For PHP 7.4 eller nyere, hold kommandolinjeargumentene og barneprosessens miljø atskilt:

$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 applikasjonens eksisterende utdatahåndtering. Sjekk for mislykket start, håndter rørene og lukk prosessen gjennom den livssyklusen.

array_replace(getenv(), ...) bevarer foreldremiljøet mens den erstatter disse to verdiene for barnet. Gå gjennom arvede proxy- og omgåelsesvariabler i store bokstaver når de kan endre den tiltenkte ruten.

Argumentarrayet hindrer et skall i å tolke &-tegn, dollartegn eller mellomrom i påloggingsinformasjon. Det er ingen kontobærende tilordning innebygd i en skallkommando.

Dette eksemplet velger curl fordi det støtter variablene som vises. En adresse fra HTTP-proxylisten kan fylle ut disse miljøverdiene for en offentlig HTTP-rute. En annen kjørbar fil trenger sitt eget støttede proxygrensesnitt; PHPs egne cURL-alternativer konfigurerer ikke det eksterne programmet.

Relaterte artikler