একটি 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 অপশন সেই বহিঃস্থ প্রোগ্রামটি কনফিগার করে না।