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.

Kaugnay na mga artikulo