Para PHP 7.4 ou posterior, manteña separados os argumentos do comando e o contorno do proceso fillo:

$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 e $descriptorSpec proveñen do tratamento de saída existente da aplicación. Comprobe se o lanzamento fallou, xestione as canalizacións e peche o proceso durante ese ciclo de vida.

array_replace(getenv(), ...) conserva o contorno pai mentres substitúe estes dous valores para o fillo. Revise as variables herdadas de proxy e de omisión en maiúsculas cando poidan cambiar a ruta prevista.

A matriz de argumentos impide que unha shell interprete os ampersands, os signos de dólar ou os espazos das credenciais. Non hai ningunha asignación que leve contas incorporada nun comando de shell.

Este exemplo escolle curl porque admite as variables mostradas. Un enderezo da lista de proxies HTTP pode encher eses valores de contorno para unha ruta HTTP pública. Un executable diferente necesita a súa propia interface de proxy compatible; as opcións cURL de PHP non configuran ese programa externo.

Artigos relacionados