Houd vanaf PHP 7.4 de argumenten van de opdracht en de omgeving van het kindproces gescheiden:

$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 komen uit de bestaande uitvoerafhandeling van de applicatie. Controleer op een mislukte start, beheer de pipes en sluit het proces via die levenscyclus.

array_replace(getenv(), ...) behoudt de ouderomgeving terwijl deze twee waarden voor het kind worden vervangen. Controleer overgeërfde proxy- en bypass-variabelen in hoofdletters wanneer ze de beoogde route kunnen wijzigen.

De argumentarray weerhoudt een shell ervan ampersands, dollartekens of spaties in inloggegevens te interpreteren. Er is geen accountdragende toewijzing in een shell-opdracht ingebed.

Dit voorbeeld kiest curl omdat het de getoonde variabelen ondersteunt. Een adres uit de HTTP-proxylijst kan die omgevingswaarden vullen voor een openbare HTTP-route. Een ander uitvoerbaar bestand heeft zijn eigen ondersteunde proxy-interface nodig; de cURL-opties van PHP zelf configureren dat externe programma niet.

Gerelateerde artikelen