ב-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 עצמה אינן מגדירות את התוכנית החיצונית הזו.

מאמרים קשורים