Menghantar Persekitaran Proksi kepada Perintah Anak PHP
Gunakan persekitaran berasingan dan tatasusunan argumen proc_open untuk satu pemuat turun, sambil memelihara nilai yang diwarisi secara sengaja.
Untuk PHP 7.4 atau lebih baharu, asingkan argumen perintah daripada persekitaran proses anak:
$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 dan $descriptorSpec berasal daripada pengendalian output sedia ada aplikasi. Semak kegagalan pelancaran, uruskan paip dan tutup proses melalui kitaran hayat itu.
array_replace(getenv(), ...) mengekalkan persekitaran induk sambil menggantikan kedua-dua nilai ini untuk anak. Semak pemboleh ubah proksi dan pintasan warisan huruf besar apabila ia boleh mengubah laluan yang dimaksudkan.
Tatasusunan argumen menghalang shell daripada mentafsir ampersand, tanda dolar atau ruang kelayakan. Tiada penetapan yang membawa akaun terbenam dalam perintah shell.
Contoh ini memilih curl kerana ia menyokong pemboleh ubah yang ditunjukkan. Alamat daripada senarai proksi HTTP boleh mengisi nilai persekitaran itu untuk laluan HTTP awam. Boleh laksana lain memerlukan antara muka proksi yang disokongnya sendiri; pilihan cURL PHP sendiri tidak mengkonfigurasi program luaran itu.