Til PHP 7.4 eller nyere skal du holde kommandolinjens argumenter og barneprocessens miljø adskilt:

$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 og $descriptorSpec kommer fra applikationens eksisterende outputhåndtering. Kontrollér for mislykket start, håndtér rørene, og luk processen gennem den livscyklus.

array_replace(getenv(), ...) bevarer forældremiljøet, mens disse to værdier erstattes for barnet. Gennemgå nedarvede store proxy- og bypass-variabler, når de kan ændre den tilsigtede rute.

Argumentarrayet forhindrer en shell i at fortolke &-tegn, dollartegn eller mellemrum i legitimationsoplysninger. Der er ingen kontobærende tildeling indlejret i en shell-kommando.

Dette eksempel vælger curl, fordi det understøtter de viste variabler. En adresse fra HTTP-proxylisten kan udfylde disse miljøværdier til en offentlig HTTP-rute. En anden eksekverbar fil kræver sin egen understøttede proxygrænseflade; PHPs egne cURL-indstillinger konfigurerer ikke det eksterne program.

Relaterede artikler