proxy გარემოს გადაცემა 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(), ...) ინარჩუნებს მშობლის გარემოს და ანაცვლებს ამ ორ მნიშვნელობას შვილისთვის. გადახედეთ მემკვიდრეობით მიღებულ დიდი ასოების proxy და გვერდის ავლის ცვლადებს, როცა მათ შეუძლიათ განსაზღვრული მარშრუტის შეცვლა.
არგუმენტების მასივი ხელს უშლის shell-ს გააზროს სერთიფიკატების ამპერსანდები, დოლარის ნიშნები ან სივრცეები. shell ბრძანებაში ჩაშენებული ანგარიშის მატარებელი მინიჭება არ არის.
ეს მაგალითი ირჩევს curl-ს, რადგან ის მხარს უჭერს ნაჩვენებ ცვლადებს. მისამართი HTTP proxy სიიდან შეიძლება შეავსოს ეს გარემოს მნიშვნელობები საჯარო HTTP მარშრუტისთვის. სხვა შესრულებად ფაილს სჭირდება თავისი მხარდაჭერილი proxy ინტერფეისი; PHP-ის საკუთარი cURL პარამეტრები არ აკონფიგურირებს ამ გარე პროგრამას.