Passar um ambiente de proxy a um comando filho PHP
Use o ambiente separado e o array de argumentos de proc_open para um só descarregador, preservando deliberadamente os valores herdados.
Para PHP 7.4 ou posterior, mantenha os argumentos do comando e o ambiente do processo filho separados:
$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 vêm do tratamento de saída já existente da aplicação. Verifique se o arranque falhou, controle os pipes e feche o processo ao longo desse ciclo de vida.
array_replace(getenv(), ...) preserva o ambiente do processo pai enquanto substitui estes dois valores para o filho. Reveja as variáveis herdadas de proxy e de derivação em maiúsculas quando possam alterar a rota pretendida.
O array de argumentos impede que uma shell interprete os ampersands, os sinais de dólar ou os espaços das credenciais. Não há qualquer atribuição que transporte conta embutida num comando de shell.
Este exemplo escolhe o curl porque suporta as variáveis mostradas. Um endereço da lista de proxies HTTP pode preencher esses valores de ambiente para uma rota HTTP pública. Um executável diferente precisa da sua própria interface de proxy suportada; as opções cURL do próprio PHP não configuram esse programa externo.