Skicka en proxy-miljö till ett underordnat PHP-kommando
Använd proc_opens separata miljö och argumentarray för en nedladdare och bevara ärvda värden medvetet.
Från PHP 7.4 ska du hålla kommandots argument och barnprocessens miljö åtskilda:
$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 och $descriptorSpec kommer från applikationens befintliga utdatahantering. Kontrollera om starten misslyckades, hantera rören och stäng processen genom den livscykeln.
array_replace(getenv(), ...) bevarar föräldramiljön medan dessa två värden ersätts för barnet. Granska ärvda proxy- och kringgåendevariabler i versaler när de kan ändra den avsedda rutten.
Argumentarrayen hindrar ett skal från att tolka ampersandtecken, dollartecken eller mellanslag i inloggningsuppgifter. Det finns ingen kontobärande tilldelning inbäddad i ett skalkommando.
Det här exemplet väljer curl eftersom det stöder variablerna som visas. En adress från HTTP-proxylistan kan fylla dessa miljövärden för en offentlig HTTP-rutt. En annan körbar fil behöver sitt eget stödda proxygränssnitt; PHPs egna cURL-alternativ konfigurerar inte det externa programmet.