Meneruskan Lingkungan Proxy ke Perintah Anak PHP
Gunakan lingkungan terpisah dan array argumen proc_open untuk satu pengunduh, dengan sengaja mempertahankan nilai yang diwarisi.
Untuk PHP 7.4 atau lebih baru, pisahkan argumen perintah dari lingkungan 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 dari penanganan keluaran aplikasi yang sudah ada. Periksa kegagalan peluncuran, kelola pipa, dan tutup proses melalui siklus hidup tersebut.
array_replace(getenv(), ...) mempertahankan lingkungan induk sambil mengganti kedua nilai ini untuk anak. Tinjau variabel proxy dan lewatan warisan berhuruf besar saat variabel itu dapat mengubah rute yang dimaksud.
Array argumen mencegah shell menafsirkan ampersand, tanda dolar, atau spasi pada kredensial. Tidak ada penetapan yang membawa akun yang tertanam dalam perintah shell.
Contoh ini memilih curl karena mendukung variabel yang ditampilkan. Alamat dari daftar proxy HTTP dapat mengisi nilai lingkungan tersebut untuk rute HTTP publik. Eksekusi lain memerlukan antarmuka proxy yang didukungnya sendiri; opsi cURL milik PHP tidak mengonfigurasi program eksternal itu.