Μετάδοση περιβάλλοντος διαμεσολαβητή σε θυγατρική εντολή 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 δεν διαμορφώνουν αυτό το εξωτερικό πρόγραμμα.