2013-06-20 9 views
6

यह पुनर्लेखन के लिए बिनाअनुरोध पैरामीटर भेजें जब कमांड लाइन के माध्यम से एक PHP स्क्रिप्ट बुला

http://somewebsite.com/yourscript?param1=val1&param2=val2. 

मैं कमांड लाइन के माध्यम से एक ही बात हासिल करने की कोशिश कर रहा हूँ की तरह कुछ लग रहा है जब आप एक ब्राउज़र के माध्यम से एक PHP स्क्रिप्ट चलाने $_REQUEST के बजाय argv स्वीकार करने के लिए स्क्रिप्ट। वहाँ इस तरह कुछ करने के लिए एक रास्ता है:

php yourscript.php?param1=val1&param2=val2 

ऐसी है कि मानकों को आप भेजने $_REQUEST चर में दिखाई?

उत्तर

5

नहीं, इसे प्राप्त करने का कोई आसान तरीका नहीं है। वेब सर्वर अनुरोध स्ट्रिंग को विभाजित करेगा और इसे PHP दुभाषिया में पास करेगा, जो इसे $_REQUEST सरणी में संग्रहीत करेगा।

यदि आप कमांड लाइन से भागते हैं और आप समान पैरामीटर स्वीकार करना चाहते हैं, तो आपको उन्हें स्वयं पार्स करना होगा। HTTP की तुलना में पैरामीटर पास करने के लिए कमांड लाइन में पूरी तरह से अलग वाक्यविन्यास है। आप getopt में देखना चाह सकते हैं।

<?php 
foreach($argv as $argument) { 
     if($argument == $argv[ 0 ]) continue; 

     $pair = explode("=", $argument); 
     $variableName = substr($pair[ 0 ], 2); 
     $variableValue = $pair[ 1 ]; 
     echo $variableName . " = " . $variableValue . "\n"; 
     // Optionally store the variable in $_REQUEST 
     $_REQUEST[ $variableName ] = $variableValue; 
} 

इस तरह इसका इस्तेमाल:

$ php test.php --param1=val1 --param2=val2 
param1 = val1 
param2 = val2 
+0

धन्यवाद, मैं ऐसा कुछ कर रहा हूं और यह अच्छी तरह से काम करता है। – emilyk

12

मामले में तुम नहीं

एक जानवर बल दृष्टिकोण है कि खाते में उपयोगकर्ता त्रुटि नहीं ले करता है के लिए, आप इस स्निपेट कोशिश कर सकते हैं चल रही स्क्रिप्ट को संशोधित करना चाहते हैं, आप इनपुट फ़ाइल से पहले चलाने के लिए कोड निर्दिष्ट करने के लिए इन-बी पैरामीटर का उपयोग कर पैरामीटर निर्दिष्ट कर सकते हैं। लेकिन इस मामले में आप भी अपने इनपुट फ़ाइल निर्दिष्ट करने के लिए एफ टैग जोड़ना चाहिए:

php -B "\$_REQUEST = array('param1' => 'val1', 'param2' => 'val2');" -F yourscript.php 
+1

$ से बचने की जरूरत है, अन्यथा आपका खोल $ _REQUEST को प्रतिस्थापित करेगा, शायद खाली स्ट्रिंग के लिए और त्रुटि दें: PHP पार्स त्रुटि: वाक्यविन्यास त्रुटि, कमांड लाइन में अप्रत्याशित '=' लाइन 1 – steveayre

+0

पर कोड शुरू नहीं करता है $ से बच निकला यह करता है: 'php -b" \ $ _ REQUEST = array ('param1' => 'val1', 'param2' => 'val2'); " -एफ yourscript.php' – Noam

0

मैं इस स्थिति से निपटने के लिए एक छोटी समारोह लिखा था - अगर आदेश पंक्ति तर्क मौजूद हैं और $ _REQUEST सरणी रिक्त है (यानी , जब आप एक वेब इंटरफेस कमांड लाइन से के बजाय हालांकि एक स्क्रिप्ट चला रहे हैं), यह कुंजी = मान जोड़े में आदेश पंक्ति तर्क के लिए लग रहा है,

Argv2Request($argv); 

print_r($_REQUEST); 

function Argv2Request($argv) { 
    /* 
     When $_REQUEST is empty and $argv is defined, 
     interpret $argv[1]...$argv[n] as key => value pairs 
     and load them into the $_REQUEST array 

     This allows the php command line to subsitute for GET/POST values, e.g. 
     php script.php animal=fish color=red number=1 has_car=true has_star=false 
    */ 


    if ($argv !== NULL && sizeof($_REQUEST) == 0) { 
     $argv0 = array_shift($argv); // first arg is different and is not needed 

     foreach ($argv as $pair) { 
      list ($k, $v) = split("=", $pair); 
      $_REQUEST[$k] = $v; 
     } 
    } 
} 

नमूना इनपुट समारोह की टिप्पणी में सुझाव दिया है:

php script.php animal=fish color=red number=1 has_car=true has_star=false 

जो उत्पादन पैदावार:

Array 
(
    [animal] => fish 
    [color] => red 
    [number] => 1 
    [has_car] => true 
    [has_star] => false 
) 
1

मैं इस के लिए ऋण नहीं ले सकते लेकिन मैं अपने बूटस्ट्रैप फ़ाइल में इस अपनाया: कमांड लाइन से एक PHP फ़ाइल को क्रियान्वित करने पर

// Concatenate and parse string into $_REQUEST 
if (php_sapi_name() === 'cli') { 
    parse_str(implode('&', array_slice($argv, 1)), $_REQUEST); 
} 

:

php yourscript.php param1=val1 param2=val2 

उपर्युक्त बाद में पुनर्प्राप्ति के लिए $ _REQUEST में कुंजी और मान डालेंगे।

संबंधित मुद्दे