Tarpinio serverio aplinkos perdavimas PHP antrinei komandai
Naudokite atskirą proc_open aplinką ir argumentų masyvą vienam siuntėjui, sąmoningai išsaugodami paveldėtas reikšmes.
PHP 7.4 arba naujesnėje versijoje laikykite komandos argumentus ir antrinio proceso aplinką atskirai:
$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 ir $descriptorSpec gaunami iš esamo programos išvesties apdorojimo. Patikrinkite, ar nepavyko paleisti, tvarkykite vamzdžius ir uždarykite procesą per tą gyvavimo ciklą.
array_replace(getenv(), ...) išsaugo tėvinę aplinką ir pakeičia šias dvi reikšmes antriniam procesui. Peržiūrėkite paveldėtus didžiųjų raidžių tarpinio serverio ir apėjimo kintamuosius, kai jie gali pakeisti numatytą maršrutą.
Argumentų masyvas neleidžia apvalkalui interpretuoti prisijungimo duomenų ampersandų, dolerio ženklų ar tarpų. Apvalkalo komandoje nėra įterpto paskyrimo, kuris neštų paskyrą.
Šiame pavyzdyje pasirenkamas curl, nes jis palaiko parodytus kintamuosius. Adresas iš HTTP tarpinių serverių sąrašo gali užpildyti šias aplinkos reikšmes viešam HTTP maršrutui. Kitam vykdomajam failui reikia savo palaikomos tarpinio serverio sąsajos; pačios PHP cURL parinktys nesukonfigūruoja tos išorinės programos.