2013-06-05 5 views
14

मैं shell_exec विधि का उपयोग कर PHP से test.sh को कॉल कर रहा हूं।वेरिएबल्स को shell_exec() में पास कर रहा है?

$my_url="http://www.somesite.com/"; 
$my_refer="http://www.somesite.com/"; 
$page = shell_exec('/tmp/my_script.php $my_url $my_refer'); 

हालांकि, कमांड लाइन स्क्रिप्ट कहते हैं कि यह केवल 1 तर्क प्राप्त किया:

कोड::

$page = shell_exec('/tmp/my_script.php {$my_url} {$my_refer}'); 
/tmp/my_script.php

जब मैं करने के लिए कॉल को बदलने

यह कहता है कि इसे 3 तर्क प्राप्त हुए लेकिन argv [1] और argv [2] खाली हैं।

जब मैं करने के लिए कॉल बदलने के लिए:

कोड:

$page = shell_exec('/tmp/my_script.php "http://www.somesite.com/" "http://www.somesite.com/"'); 

स्क्रिप्ट अंत में सभी 3 तर्क के रूप में इरादा प्राप्त करता है।

क्या आपको हमेशा स्क्रिप्ट के साथ उद्धृत पाठ भेजना पड़ता है और उन्हें $ var जैसे चर भेजने की अनुमति नहीं है? या क्या कोई विशेष तरीका है जिसे आपको $ var भेजना है?

उत्तर

11

है कोटा के साथ बहस भेजने की जरूरत है, तो आप इसे का उपयोग करना चाहिए की तरह:

$page = shell_exec("/tmp/my_script.php '".$my_url."' '".$my_refer."'"); 
+1

यह काम कर रहा है – user2314387

+1

आप इन्हें कैसे पढ़ते हैं my_script.php? –

+0

हाँ आप उन पैरामीटर को "/tmp/my_script.php" में कैसे पकड़ते हैं? –

16

बदलें

$page = shell_exec('/tmp/my_script.php $my_url $my_refer');

$page = shell_exec("/tmp/my_script.php $my_url $my_refer");

या

$page = shell_exec('/tmp/my_script.php "'.$my_url.'" "'.$my_refer.'"');

को यह भी सुनिश्चित escapeshellarg का उपयोग सुनिश्चित करें आपके मूल्यों पर।

उदाहरण:

$my_url=escapeshellarg($my_url); 
$my_refer=escapeshellarg($my_refer); 
+0

पीएचपी केवल पार्स होगा '' $ चर दोहरे उद्धरण चिह्नों के चारों ओर लिपटा ('" ') –

+2

भी सुनिश्चित करें कि आप escapseshellarg – Orangepill

+0

के लिये दस्तावेज देखें साथ sanatize बनाते हैं। एकल- और डबल-उद्धृत तारों के बीच अंतर: http://php.net/manual/en/language.types.string.php – DaoWen

2

बदलें

$page = shell_exec('/tmp/my_script.php $my_url $my_refer'); 

को
$page = shell_exec('/tmp/my_script.php "'.$my_url.'" "'.$my_refer.'"'); 

फिर आप कोड फ़ाइल नाम में रिक्त स्थान बर्दाश्त करेंगे।

+0

हाँ, मैं जानबूझ कर करता हूं। मेरी असली गलती यह थी कि मैं स्ट्रिंग से '$ my_url' और' $ my_refer' बाहर लेना भूल गया था। –

6

चर एक एकल उद्धृत स्ट्रिंग के अंदर इंटरपोलेट नहीं करेंगे। साथ ही आपको यह सुनिश्चित करना चाहिए कि आपके तर्क ठीक से बच गए हैं।

$page = shell_exec('/tmp/myscript.php '.escapeshellarg($my_url).' '.escapeshellarg($my_refer)); 
+0

धन्यवाद ओरंगपिल .. यह काम कर रहा है – user2314387

2

आप यहाँ sprintf लिए उपयोगी हो सकती:

$my_url="http://www.somesite.com/"; 
$my_refer="http://www.somesite.com/"; 
$page = shell_exec(sprintf('/tmp/my_script.php "%s" "%s"', $my_url, $my_refer)); 

आप निश्चित रूप से escapeshellarg का उपयोग के रूप में अन्य उत्तर में सिफारिश करना चाहिए अगर आप इनपुट की आपूर्ति एक नहीं कर रहे हैं।

2

मुझे इस बारे में सोचा था कि मैं अपना कोड स्निपेट साझा करूंगा।

$output = shell_exec("/var/www/sites/blah/html/blahscript.sh 2>&1 $host $command"); 

इससे पहले के बाद

$output = shell_exec("/var/www/sites/blah/html/blahscript.sh 2>&1 $host {$command}"); 

{} कोष्ठक जोड़ा जा रहा है क्या यह मेरे लिए तय है।

इसके अलावा, escapeshellarg की पुष्टि करने के लिए भी आवश्यक है।

$host=escapeshellarg($host); 
$command=escapeshellarg($command); 

स्क्रिप्ट को छोड़कर भी जरूरत:

set host [lindex $argv 0] 
set command [lindex $argv 1] 
संबंधित मुद्दे