ส่งผ่านสภาพแวดล้อมพร็อกซีไปยังคำสั่งลูกของ PHP
ใช้สภาพแวดล้อมแยกและอาร์เรย์อาร์กิวเมนต์ของ proc_open สำหรับตัวดาวน์โหลดหนึ่งตัว โดยเก็บค่าที่สืบทอดมาอย่างตั้งใจ
สำหรับ PHP 7.4 หรือใหม่กว่า ให้แยกอาร์กิวเมนต์ของคำสั่งและสภาพแวดล้อมของโพรเซสลูกออกจากกัน:
$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 และ $descriptorSpec มาจากการจัดการเอาต์พุตที่มีอยู่แล้วของแอปพลิเคชัน ตรวจสอบการเปิดทำงานที่ล้มเหลว จัดการไปป์ และปิดโพรเซสผ่านวงจรชีวิตนั้น
array_replace(getenv(), ...) เก็บรักษาสภาพแวดล้อมของแม่ไว้พร้อมแทนที่สองค่านี้สำหรับลูก ตรวจทานตัวแปรพร็อกซีและการข้ามที่สืบทอดมาเป็นตัวพิมพ์ใหญ่เมื่ออาจเปลี่ยนเส้นทางที่ตั้งใจไว้
อาร์เรย์อาร์กิวเมนต์ป้องกันไม่ให้เชลล์ตีความเครื่องหมายแอมเพอร์แซนด์ เครื่องหมายดอลลาร์ หรือช่องว่างของข้อมูลรับรอง ไม่มีการกำหนดค่าที่พาบัญชีฝังอยู่ในคำสั่งเชลล์
ตัวอย่างนี้เลือก curl เพราะรองรับตัวแปรที่แสดง ที่อยู่จากรายการพร็อกซี HTTPสามารถเติมค่าสภาพแวดล้อมเหล่านั้นสำหรับเส้นทาง HTTP สาธารณะได้ ไฟล์ปฏิบัติการอื่นต้องมีอินเทอร์เฟซพร็อกซีที่รองรับของตนเอง ตัวเลือก cURL ของ PHP เองไม่ได้กำหนดค่าโปรแกรมภายนอกนั้น