Починаючи з 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 не налаштовують цю зовнішню програму.

Схожі статті