Send et proxy-miljø til en underordnet PHP-kommando
Brug proc_opens separate miljø og argumentarray til én downloader, og bevar nedarvede værdier bevidst.
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.