Перадача проксі-асяроддзя даччынай камандзе 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 не наладжваюць гэтую знешнюю праграму.