Magpasa ng Proxy Environment sa Isang Child Command ng PHP
Gamitin ang hiwalay na environment at argument array ng proc_open para sa isang downloader, sinasadyang pinapanatili ang mga minanang halaga.
Para sa PHP 7.4 o mas bago, panatilihing hiwalay ang mga argumento ng command at ang environment ng child process:
$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 at ang $descriptorSpec ay nagmumula sa umiiral na paghawak ng output ng application. Suriin kung nabigo ang paglunsad, pamahalaan ang mga pipe at isara ang proseso sa lifecycle na iyon.
array_replace(getenv(), ...) pinapanatili ang parent environment habang pinapalitan ang dalawang halagang ito para sa anak. Repasuhin ang mga minanang uppercase na variable ng proxy at bypass kapag maaari nilang baguhin ang nilalayong ruta.
Pinipigilan ng argument array ang isang shell na bigyang-kahulugan ang mga ampersand, dollar sign o espasyo ng kredensyal. Walang assignment na may dalang account na naka-embed sa isang shell command.
Pinipili ng halimbawang ito ang curl dahil sinusuportahan nito ang mga variable na ipinakita. Ang isang address mula sa listahan ng HTTP proxy ay maaaring punan ang mga halagang iyon ng environment para sa isang pampublikong rutang HTTP. Ang ibang executable ay nangangailangan ng sarili nitong sinusuportahang proxy interface; hindi kinokonfigura ng mga cURL option ng PHP mismo ang panlabas na programang iyon.