انتقال محیط پروکسی به یک فرمان فرزند 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 آن برنامه خارجی را پیکربندی نمیکنند.