في 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 لا تُهيّئ ذلك البرنامج الخارجي.

مقالات ذات صلة