Pasar un contorno de proxy a un comando fillo de PHP
Use o contorno separado e a matriz de argumentos de proc_open para un descargador, conservando deliberadamente os valores herdados.
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.