2012-11-27 14 views
5

से वैरिएबल प्राप्त करने के लिए मुझे यकीन है कि इसके लिए उचित नाम नहीं है, लेकिन मैं अपने लिनक्स सर्वर पर बैश स्क्रिप्ट के भीतर PHP कोड निष्पादित कर रहा हूं। मेरे पास इनमें से दो बैश फ़ाइलें हैं और एक फ़ाइल से अगले फ़ाइल में एक जीईटी वैरिएबल पास करने में सक्षम होना चाहते हैं।एक बैश/PHP स्क्रिप्ट से दूसरे

#!/usr/bin/php -q 
<?php 

require("bash2.sh?id=1"); 

यहाँ 2 फ़ाइल का एक सरलीकृत संस्करण है:

यहाँ 1 फ़ाइल का एक सरलीकृत संस्करण है

#!/usr/bin/php -q 
<?php 

echo $_GET['id']; 

वर्तमान में, जब मैं एक Crontab पर 1 फ़ाइल निष्पादित, मुझे एक त्रुटि मिलती है जो कहती है:

PHP चेतावनी: आवश्यकता (bash2.sh?id=1): स्ट्रीम खोलने में विफल: ऐसा कोई लाइन 2

अगर मैं require() से ?id=1 हटाने पर फ़ाइल या /home/bash/bash1.sh में निर्देशिका, यह एक त्रुटि के बिना निष्पादित करता है।

+0

मुझे डर है कि यह काम नहीं करेगा ... स्क्रिप्ट के सटीक नाम की खोज की आवश्यकता है, आप इसे चर नहीं दे सकते क्योंकि यह एक यूआरएल नहीं है, यह एक रास्ता है। स्क्रिप्ट के बीच चर पारित करने के लिए एकमात्र तरीके session_start() और हेडर() हैं, लेकिन मुझे डर है कि ये वेब सर्वर के बिना काम नहीं करेंगे। – Naryl

उत्तर

2

आप वेब सोच रहे हैं ... require में आपने जो भी रखा है वह वास्तविक फ़ाइल नाम है जो PHP इंजन ओएस का उपयोग करके की तलाश करेगा। यानी यह bash2.sh?id=1 नामक फ़ाइल की तलाश में है जो आपके पास स्पष्ट रूप से नहीं है।

या तो आप system('./bash2.sh 2'); के साथ कहने के लिए एक और स्क्रिप्ट कहते हैं, या डेटा पास करने के लिए नीचे दी गई विधि का उपयोग करें और उपयोग करें।

file1

<?php 
$id = 1; 
require("bash2.sh"); 

करें 2

<?php 
echo $id; 

यू पहला उदाहरण (system('./bash2.sh 2');) का उपयोग करते हैं तो फिर bash2.sh में आप निम्नलिखित तरीके से चर का उपयोग करेंगे:

<?php 
echo $argv[1]; //argv[0] is the script name 
+0

'$ argv [1]' 'argv [1]' होना चाहिए – Chris

2

आप अपने हार्डड्राइव पर स्थिर फ़ाइल में पैरामीटर नहीं जोड़ सकते हैं। लेकिन आप एक वैश्विक चर परिभाषित कर सकते हैं जो रिक्त स्क्रिप्ट द्वारा एक्सेस करने योग्य है।

<?php 
$id=1 
require("bash2.php"); 

और अपने bash2.php के लिए: इस तरह

<?php 
echo $id; 
0

कोशिश कुछ:

<?php 

    $id = $_GET['id']; 
    exec("./bash2.sh $id"); 

?> 

और फिर बैश लिपि में आप पारित कर दिया पहले पैरामीटर उपयोग करने में सक्षम हो जाएगा $ 1 के रूप में।

More info here और here

आशा इस मदद करता है!

1

कोई दोस्त आपको तर्कों का उपयोग करना चाहिए। जब आप php स्क्रिप्ट निष्पादित करते हैं (मैं क्रॉन जॉब में अनुमान लगा रहा हूं), तो आप some.php variable1 variable2 जैसे तर्क जोड़ते हैं .....आदि`,

और फिर PHP में आपको $argv[0], $argv[1] .... etc के साथ उस varibale मिलता है।

बैश स्क्रिप्ट से यह तरीका है।