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.

Verwante artikels