Փոխանցել 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 ընտրանքները չեն կարգավորում այդ արտաքին ծրագիրը։