2017-04-26 7 views
17

मैं खोल स्क्रिप्ट से एंड्रॉइड apk फ़ाइलों को उत्पन्न करने की कोशिश कर रहा हूं, मैं PHP से एक शेल स्क्रिप्ट फ़ाइल निष्पादित करना चाहता हूं। जब मैं टर्मिनल में खोल स्क्रिप्ट चलाता हूं, तो यह पूरी तरह से काम करता है। यदि मैं PHP का उपयोग करके स्क्रिप्ट चलाने की कोशिश करता हूं, तो खोल स्क्रिप्ट सभी आदेशों को निष्पादित नहीं करती है। शेल स्क्रिप्ट में ls कमांड पूरी तरह से काम करता है, लेकिन PHP का उपयोग करते समय निष्पादित करते समय, अन्य आदेश काम नहीं करते हैं। मैं एक लिनक्स पर्यावरण में xampp सर्वर का उपयोग कर रहा हूँ।php से खोल स्क्रिप्ट का उपयोग कर एंड्रॉइड एपीके उत्पन्न करें?

मेरे खोल स्क्रिप्ट

cd /home/user/AndroidStudioProjects/msvep4247-inghamautogroup-pulse-and/ 
./gradlew assembleDebug 
cp -fr app/build/outputs/apk/app-debug.apk /opt/lampp/htdocs/sample/apk 
ls 

शैल स्क्रिप्ट ls उत्पादन

एप्लिकेशन autolead_data_format.pdf निर्माण build.gradle गाल Gradle gradle.properties gradlew.bat lib local.properties gradlew msvep4247-inghamautogroup -pulse-and.iml सेटिंग्स.gradle

मेरा फ़ोल्डर में ls आउटपुट फ़ाइल नाम

मैं सभी फ़ाइल सेट: PHP स्क्रिप्ट

<?php 
     echo shell_exec('ls'); 
     echo shell_exec('./generateApk.sh'); 
    ?> 

PHP स्क्रिप्ट ls उत्पादन

generateApk.sh APK

नोट generate.php xampp सर्वर में खोल स्क्रिप्ट के लिए अनुमतियाँ। क्या कोई वर्णन कर सकता है कि मुझे गलत कहां है? प्रतिक्रियाओं की प्रतीक्षा कर रहे हैं ...

+1

'निष्पादित नहीं करता' ... कोई त्रुटि? – modsfabio

+0

क्या आप यह जांच सकते हैं कि यह काम करता है या नहीं? '$ output = shell_exec ('./ generApk.sh');' 'आउटपुट $ echo"; ' –

+0

@ZumodeVidrio पहले से ही चेक किया गया है, लेकिन – Keerthivasan

उत्तर

11

बस स्क्रिप्ट/निष्पादन योग्य के लिए पूर्ण पथ का उपयोग करें, क्योंकि PHP से चलते समय पर्यावरण अलग होता है।

+0

पूर्ण पथ - shell_exec ('/ opt/lampp/htdocs/sample/generApk.sh'); – Keerthivasan

+3

यदि आप पथ को हार्ड-कोड नहीं करना चाहते हैं, तो आप [dirname] (http://php.net/manual/en/function.dirname.php) का उपयोग कर सकते हैं - 'dirname (__ FILE __)' – DeeBee

3

ऐसा लगता है कि PATH वेब सर्वर में निष्पादित PHP कोड में पर्यावरण चर आपके द्वारा काम किए जा रहे खोल में से एक से अधिक सीमित है। लेकिन आप PHP में पर्यावरण चर बदल सकते हैं, और आपके द्वारा शुरू किए गए आदेश यह उन परिवर्तनों को देखेगा।

<?php 
// set content type so the output is more readable in the browser 
header('Content-Type: text/plain'); 
// set $PATH to some limited value 
putenv('PATH=/bin:/sbin'); 
// verify, note that we have to use full path to 'env' 
print(shell_exec("/usr/bin/env|grep '^PATH='")); 
// this command won't run (assuming its full path is /usr/bin/id) 
print(shell_exec("id")); 
// add more directories to $PATH 
putenv('PATH=/bin:/sbin:/usr/bin:/usr/sbin'); 
// verify again, we can use env without specifying the path this time 
print(shell_exec("env|grep '^PATH='")); 
// this command will 
print(shell_exec("id")); 

तो आप अपने PHP स्क्रिप्ट के शीर्ष पर putenv('PATH=<your_shell_PATH_contents>'); लिखने के लिए की है। केवल शैल स्क्रिप्ट के लिए पूर्ण पथ का उपयोग करने से मदद नहीं मिलेगी यदि स्क्रिप्ट स्वयं शुरू होने वाली द्विआधारी के सापेक्ष पथ का उपयोग करती है।

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