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(), ...) эцэг орчныг хадгалж, эдгээр хоёр утгыг охин процессод орлуулна. Өвлөгдсөн том үсгийн прокси болон тойрч гарах хувьсагчдыг зорилтот замыг өөрчилж болзошгүй үед хянана.
Аргументын массив нь shell-д итгэмжлэлийн амперсанд, долларын тэмдэг эсвэл зайг тайлбарлахаас сэргийлнэ. Shell команд дотор данс агуулсан оноолт ороогүй байна.
Энэ жишээ curl-ыг сонгосон, учир нь энэ нь үзүүлсэн хувьсагчдыг дэмждэг. HTTP прокси жагсаалтаас авсан хаяг нь нийтийн HTTP замд зориулж эдгээр орчны утгыг бөглөж чадна. Өөр гүйцэтгэх файлд өөрийн дэмжигдсэн прокси интерфейс хэрэгтэй; PHP-ийн өөрийн cURL сонголтууд тэр гадаад програмыг тохируулдаггүй.