V PHP 7.4 alebo novšom držte argumenty príkazu a prostredie podriadeného procesu oddelené:

$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 a $descriptorSpec pochádzajú z existujúceho spracovania výstupu aplikácie. Skontrolujte neúspešné spustenie, spravujte rúry a proces ukončite v rámci tohto životného cyklu.

array_replace(getenv(), ...) zachováva prostredie rodiča a nahrádza tieto dve hodnoty pre potomka. Skontrolujte zdedené proxy a obchádzacie premenné písané veľkými písmenami, ak by mohli zmeniť zamýšľanú trasu.

Pole argumentov bráni shellu interpretovať ampersandy, znaky dolára alebo medzery v prihlasovacích údajoch. V príkaze shellu nie je vložené žiadne priradenie nesúce účet.

Tento príklad volí curl, pretože podporuje uvedené premenné. Adresa zo zoznamu HTTP proxy môže naplniť tieto hodnoty prostredia pre verejnú HTTP trasu. Iný spustiteľný súbor potrebuje svoje podporované proxy rozhranie; vlastné možnosti cURL v PHP tento externý program nenastavujú.

Súvisiace články