ສົ່ງສະພາບແວດລ້ອມພຣັອກຊີໄປຍັງຄຳສັ່ງລູກ 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 ຕີຄວາມໝາຍເຄື່ອງໝາຍ ampersand, ເຄື່ອງໝາຍໂດລາ ຫຼື ຊ່ອງຫວ່າງຂອງຂໍ້ມູນຢືນຢັນຕົວຕົນ. ບໍ່ມີການກຳນົດຄ່າທີ່ຖືບັນຊີຝັງຢູ່ໃນຄຳສັ່ງ shell.
ຕົວຢ່າງນີ້ເລືອກ curl ເພາະມັນຮອງຮັບຕົວປ່ຽນທີ່ສະແດງ. ທີ່ຢູ່ຈາກລາຍຊື່ພຣັອກຊີ HTTP ສາມາດຕື່ມຄ່າສະພາບແວດລ້ອມເຫຼົ່ານັ້ນສຳລັບເສັ້ນທາງ HTTP ສາທາລະນະ. ໄຟລ໌ປະຕິບັດອື່ນຕ້ອງການສ່ວນຕິດຕໍ່ພຣັອກຊີທີ່ມັນຮອງຮັບເອງ; ຕົວເລືອກ cURL ຂອງ PHP ເອງບໍ່ໄດ້ຕັ້ງຄ່າໂປຣແກຣມພາຍນອກນັ້ນ.