За 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 не конфигурират тази външна програма.

Подобни статии