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.

Relaterade artiklar