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 ഉം ആപ്ലിക്കേഷന്റെ നിലവിലുള്ള output കൈകാര്യം ചെയ്യുന്നതിൽ നിന്ന് വരുന്നു. ലോഞ്ച് പരാജയപ്പെട്ടോ എന്ന് പരിശോധിക്കുക, പൈപ്പുകൾ കൈകാര്യം ചെയ്യുക, ആ ലൈഫ്സൈക്കിളിലൂടെ പ്രോസസ്സ് അടയ്ക്കുക.
array_replace(getenv(), ...) പാരന്റ് എൻവയോൺമെന്റ് സൂക്ഷിക്കുകയും ചൈൽഡിനായി ഈ രണ്ട് മൂല്യങ്ങൾ മാറ്റിസ്ഥാപിക്കുകയും ചെയ്യുന്നു. പാരമ്പര്യമായി ലഭിച്ച വലിയക്ഷര പ്രോക്സി, ബൈപ്പാസ് വേരിയബിളുകൾ ഉദ്ദേശിച്ച വഴി മാറ്റാൻ കഴിയുമ്പോൾ പരിശോധിക്കുക.
ആർഗ്യുമെന്റ് അറേ, ഷെൽ ക്രെഡൻഷ്യലുകളിലെ ആംപർസാൻഡുകളും ഡോളർ ചിഹ്നങ്ങളും സ്പേസുകളും വ്യാഖ്യാനിക്കുന്നത് തടയുന്നു. ഷെൽ കമാൻഡിൽ അക്കൗണ്ട് വഹിക്കുന്ന ഒരു അസൈൻമെന്റും ഉൾച്ചേർത്തിട്ടില്ല.
ഈ ഉദാഹരണം curl തിരഞ്ഞെടുക്കുന്നു, കാരണം അത് കാണിച്ച വേരിയബിളുകളെ പിന്തുണയ്ക്കുന്നു. HTTP പ്രോക്സി പട്ടികയിൽ നിന്നുള്ള ഒരു വിലാസത്തിന് പൊതു HTTP വഴിക്കായി ആ എൻവയോൺമെന്റ് മൂല്യങ്ങൾ നിറയ്ക്കാം. മറ്റൊരു എക്സിക്യൂട്ടബിളിന് അതിന്റേതായ പിന്തുണയുള്ള പ്രോക്സി ഇന്റർഫേസ് ആവശ്യമാണ്; PHP-യുടെ സ്വന്തം cURL ഓപ്ഷനുകൾ ആ ബാഹ്യ പ്രോഗ്രാം കോൺഫിഗർ ചെയ്യുന്നില്ല.