Gee 'n proxy-omgewing aan 'n PHP-kindopdrag
Gebruik proc_open se aparte omgewing en argument-skikking vir een aflaaier, en behou oorgeërfde waardes doelbewus.
Vir PHP 7.4 of later, hou die opdrag-argumente en die kind-omgewing apart:
$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 en $descriptorSpec kom uit die toepassing se bestaande uitvoerhantering. Kyk vir 'n mislukte bekendstelling, bestuur die pype en sluit die proses deur daardie lewensiklus.
array_replace(getenv(), ...) bewaar die ouer-omgewing terwyl dit hierdie twee waardes vir die kind vervang. Hersien oorgeërfde hoofletter-proxy- en omsy-variabeles wanneer hulle die beoogde roete kan verander.
Die argument-skikking keer dat 'n skulp die ampersande, dollartekens of spasies van geloofsbriewe interpreteer. Daar is geen rekening-draende toewysing in 'n skulp-opdrag ingebed nie.
Hierdie voorbeeld kies curl omdat dit die getoonde veranderlikes ondersteun. 'n Adres uit die HTTP-proxylys kan daardie omgewingswaardes vir 'n publieke HTTP-roete vul. 'n Ander uitvoerbare lêer het sy eie ondersteunde proxy-koppelvlak nodig; PHP se eie cURL-opsies konfigureer nie daardie eksterne program nie.