Předání proxy prostředí podřízenému příkazu PHP
Použijte samostatné prostředí a pole argumentů funkce proc_open pro jeden stahovač a vědomě zachovejte zděděné hodnoty.
Pro PHP 7.4 nebo novější držte argumenty příkazu a prostředí podřízeného procesu oddělené:
$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ázejí ze stávajícího zpracování výstupu aplikace. Zkontrolujte neúspěšné spuštění, spravujte roury a proces ukončete v rámci tohoto životního cyklu.
array_replace(getenv(), ...) zachovává prostředí rodiče a nahrazuje tyto dvě hodnoty pro potomka. Zkontrolujte zděděné proxy a obchvatové proměnné psané velkými písmeny, pokud by mohly změnit zamýšlenou trasu.
Pole argumentů brání shellu interpretovat ampersandy, znaky dolaru nebo mezery v přihlašovacích údajích. V příkazu shellu není vloženo žádné přiřazení nesoucí účet.
Tento příklad volí curl, protože podporuje uvedené proměnné. Adresa ze seznamu HTTP proxy může tyto hodnoty prostředí naplnit pro veřejnou HTTP trasu. Jiný spustitelný soubor potřebuje své podporované proxy rozhraní; vlastní možnosti cURL v PHP tento externí program nenastavují.