Proxy környezet átadása PHP gyermekparancsnak
Használja a proc_open külön környezetét és argumentumtömbjét egyetlen letöltőhöz, az örökölt értékeket szándékosan megőrizve.
PHP 7.4 vagy újabb esetén tartsa külön a parancs argumentumait és a gyermekfolyamat környezetét:
$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 és $descriptorSpec az alkalmazás meglévő kimenetkezeléséből származnak. Ellenőrizze a sikertelen indítást, kezelje a csöveket, és azon az életcikluson keresztül zárja le a folyamatot.
array_replace(getenv(), ...) megőrzi a szülői környezetet, miközben ezt a két értéket lecseréli a gyermek számára. Tekintse át az örökölt nagybetűs proxy- és megkerülési változókat, amikor azok módosíthatják a szándékolt útvonalat.
Az argumentumtömb megakadályozza, hogy a héj értelmezze a hitelesítő adatok ampersandjeit, dollárjeleit vagy szóközeit. A héjparancsban nincs fiókot hordozó értékadás beágyazva.
Ez a példa a curl-t választja, mert támogatja a bemutatott változókat. A HTTP proxy listából származó cím kitöltheti ezeket a környezeti értékeket egy nyilvános HTTP-útvonalhoz. Egy másik végrehajtható fájlnak saját támogatott proxyfelületre van szüksége; a PHP saját cURL-beállításai nem konfigurálják azt a külső programot.