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 मार्ग के लिए उन एनवायरनमेंट मानों को भर सकता है। किसी भिन्न एक्ज़ीक्यूटेबल को अपना समर्थित प्रॉक्सी इंटरफ़ेस चाहिए; PHP के अपने cURL विकल्प उस बाहरी प्रोग्राम को कॉन्फ़िगर नहीं करते।