Подаване на прокси среда към дъщерна команда на PHP
Използвайте отделната среда и масива с аргументи на proc_open за един свалящ, като умишлено запазвате наследените стойности.
За PHP 7.4 или по-нова версия дръжте аргументите на командата и средата на дъщерния процес отделно:
$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 и $descriptorSpec идват от съществуващата обработка на изхода в приложението. Проверете за неуспешно стартиране, управлявайте тръбите и затворете процеса чрез този жизнен цикъл.
array_replace(getenv(), ...) запазва родителската среда, като замества тези две стойности за дъщерния процес. Прегледайте наследените променливи на прокси и обход с главни букви, когато те биха могли да променят желания маршрут.
Масивът с аргументи не позволява на шела да тълкува амперсанди, знаци за долар или интервали в данните за достъп. В командата на шела няма вградено присвояване, носещо акаунт.
Този пример избира curl, защото поддържа показаните променливи. Адрес от списъка с HTTP проксита може да запълни тези стойности на средата за публичен HTTP маршрут. Друг изпълним файл се нуждае от собствения си поддържан прокси интерфейс; собствените опции на cURL в PHP не конфигурират тази външна програма.