Odovzdanie proxy prostredia podriadenému príkazu PHP
Použite samostatné prostredie a pole argumentov funkcie proc_open pre jeden sťahovač a vedome zachovajte zdedené hodnoty.
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ú.