Przekazywanie środowiska proxy do podrzędnego polecenia PHP
Użyj osobnego środowiska i tablicy argumentów proc_open dla jednego pobierającego, świadomie zachowując odziedziczone wartości.
W PHP 7.4 lub nowszym trzymaj argumenty polecenia i środowisko procesu podrzędnego osobno:
$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 i $descriptorSpec pochodzą z istniejącej obsługi wyjścia w aplikacji. Sprawdź nieudane uruchomienie, zarządzaj potokami i zamknij proces w ramach tego cyklu życia.
array_replace(getenv(), ...) zachowuje środowisko rodzica, zastępując te dwie wartości dla procesu podrzędnego. Przejrzyj odziedziczone zmienne proxy i obejścia pisane wielkimi literami, gdy mogą zmienić zamierzoną trasę.
Tablica argumentów powstrzymuje powłokę przed interpretowaniem ampersandów, znaków dolara lub spacji w danych uwierzytelniających. W poleceniu powłoki nie ma osadzonego przypisania niosącego konto.
Ten przykład wybiera curl, ponieważ obsługuje pokazane zmienne. Adres z listy proxy HTTP może wypełnić te wartości środowiska dla publicznej trasy HTTP. Inny plik wykonywalny wymaga własnego obsługiwanego interfejsu proxy; opcje cURL samego PHP nie konfigurują tego zewnętrznego programu.