Za PHP 7.4 ili noviji držite argumente naredbe i okruženje podređenog procesa odvojeno:

$environment = array_replace(getenv(), [
    'http_proxy' => 'http://proxy.example:8080',
    'https_proxy' => 'http://proxy.example:8080',
]);

$process = proc_open(
    ['/usr/bin/curl', '--fail', '--max-time', '30',
     '--output', $outputFile, 'https://downloads.example/data.csv'],
    $descriptorSpec,
    $pipes,
    null,
    $environment
);

$outputFile i $descriptorSpec dolaze iz postojeće obrade izlaza aplikacije. Provjerite neuspjelo pokretanje, upravljajte cijevima i zatvorite proces kroz taj životni ciklus.

array_replace(getenv(), ...) čuva roditeljsko okruženje dok zamjenjuje ove dvije vrijednosti za podređeni proces. Pregledajte naslijeđene proxy i bypass varijable napisane velikim slovima kada bi mogle promijeniti predviđenu rutu.

Niz argumenata sprječava ljusku da tumači ampersande, znakove dolara ili razmake iz vjerodajnica. U naredbi ljuske nema ugrađenog dodjeljivanja koje nosi račun.

Ovaj primjer bira curl jer podržava prikazane varijable. Adresa s liste HTTP proxyja može popuniti te vrijednosti okruženja za javnu HTTP rutu. Druga izvršna datoteka zahtijeva vlastito podržano proxy sučelje; PHP-ove vlastite cURL opcije ne konfigurišu taj vanjski program.

Povezani članci