2013-11-21 11 views
11

मैं php से .sh फ़ाइल चलाने की कोशिश कर रहा हूं। मैंने shell_exec() के साथ ऐसा करने का प्रयास किया। लेकिन इसकी काम नहीं कर रहा मैं ढेर अतिप्रवाह में इस से संबंधित कई सवाल संदर्भित लेकिन हल नहीं कर सकता हैphp shell_exec() कमांड काम नहीं कर रहा है

मेरे php कोड (web.php) है

<?php 
    echo shell_exec('/var/www/project/xxe.sh'); 
    echo "done"; 
    ?> 
ही किया

छपा है। लेकिन यह टर्मिनल से काम कर रहा है (php /var/www/project/web.php)

xxe.sh में मैं

python vin.py 

मैं भी के लिए 777 करने के लिए फ़ाइल अनुमति बदल दिया है एक अजगर फ़ाइल बोल रहा हूँ दोनों .sh n .py फ़ाइलें कृपया

+0

जाएँ आप यह कैसे "काम नहीं कर" है का निर्धारण कर रहे हैं कर सकते हैं? Vin.py के किन दुष्प्रभाव हैं कि आप उम्मीद कर रहे हैं लेकिन नहीं देख रहे हैं? – geoffspear

+2

[डॉक्स] (http://php.net/shell_exec) के अनुसार, "इस फ़ंक्शन का उपयोग करके निष्पादन विफलताओं का पता लगाना संभव नहीं है। प्रोग्राम निकास कोड की आवश्यकता होने पर exec() का उपयोग किया जाना चाहिए" –

+0

इन पायथन फ़ाइल मैं डेटाबेस में कुछ मानों को स्टोर करने की कोशिश कर रहा हूं। जब मैं ब्राउज़र पर php फ़ाइल चलाता हूं तो यह किसी भी मान को संग्रहीत नहीं कर रहा है – user3018038

उत्तर

3

अगर यह अच्छी तरह से खोल में काम करता है, मैं अपाचे chrooted है लगता है। तो php/var/...

या उपयोगकर्ता httpd के उपयोगकर्ता में प्रवेश करने की अनुमति नहीं है नहीं मिल सकता है/var/...

आप PHP में अच्छा कर रहे हैं। खुले dir/var/... और readdir() और जांच dir मौजूद है और फ़ाइल मौजूद है जांचें।

यह प्रश्न आपकी मदद कर सकता है। scanning /home/ with opendir()

+0

$ ls -ld/var/ drwxr-xr-x 14 रूट रूट 4096 दिसंबर 31 21:20/var/ $ ls - एलडी/var/www drwxrwxrwx 6 रूट रूट 4096 नवंबर 18 02:00/var/www – user3018038

+1

खोल से नहीं, diropen() और readdir() का उपयोग करके php में निर्देशिका प्रविष्टि करें और वेब के माध्यम से PHP खोलें। यह एक तरीका है अपाचे जांच/var/... यदि आप निर्देशिका सूची कैसे नहीं करते हैं, तो Google –

+0

कार्य करता है:"। $ एफ ""; } ?> क्या यह कोड आप के बारे में बात कर रहे हैं? – user3018038

1

समस्या आमतौर पर होती है जब आप php के भीतर से कोड निष्पादित करते हैं तो यह लिनक्स डिस्ट्रोज़ में बहुत से वेबसर्वर उपयोगकर्ता www-data के रूप में चलाया जाता है। Normaly इस उपयोगकर्ता के पास एक पर्यावरण स्थापित नहीं है, और उस के कारण कोई पाथ नहीं है। अपनी फाइलों में पूर्ण पथ का उपयोग करके आप आमतौर पर इसे दूर कर सकते हैं।

xxe.sh

/usr/bin/python /path/to/script/vin.py 
+1

मैंने कोशिश की लेकिन कोई परिणाम नहीं – user3018038

1

यदि आप कहते हैं कि यह टर्मिनल पर काम करता है और अपाचे पर नहीं तो अपाचे की php.ini फ़ाइल shell_exec() के उपयोग को अक्षम कर सकती है।

, http://www.php.net/manual/en/ini.core.php#ini.disable-functions

आपका अपाचे के php.ini फ़ाइल

disable_functions=exec,passthru,shell_exec,system,proc_open,popen 

की तरह कुछ लग सकता है इस सूची से shell_exec निकालें और वेब सर्वर को पुनः आरंभ देखें हालांकि यह एक सुरक्षा जोखिम है और मैं इसकी सलाह नहीं देते।

+1

कोई अक्षम_फंक्शन में shell_exec या exec – user3018038

+0

शामिल नहीं हो सकता है, यदि सर्वर लाइव नहीं है और केवल देव के लिए है तो निर्देशिका प्रतिबंधों को भी देखना चाहते हैं, तो अस्थायी रूप से 'php.ini' खोलने का प्रयास करें और देखें कि इससे कोई फर्क पड़ता है या नहीं। – SamV

+0

क्षमा करें मुझे नहीं मिला। मैं क्या शर्मिंदा हूँ? – user3018038

2

जीथब पोस्ट-प्राप्त वेबहुक द्वारा ट्रिगर की गई स्क्रिप्ट चलाने की कोशिश करते समय। मैं ऊपर निर्देशिका webhook कहा जाता है के अंदर एक स्क्रिप्ट बनाने

/var/www/html/my-repo 

:

यहाँ (क्लोन Git रेपो) वह जगह है जहाँ अपने प्रोजेक्ट निर्देशिका स्थित है।php:

<?php 
#webhook.php 

$cmd = shell_exec("git pull 2>&1"); 

#for debugging 
echo $cmd; 
?> 

http://www.myserver.com/my-repo/webhook.php

के लिए जा रहा GitHub webhooks करने के लिए अपने पथ को स्क्रिप्ट पर जोड़े द्वारा/var/www/html अंदर निम्न आदेश निष्पादित

sudo chown www-data:www-data -R my-repo/ 

टेस्ट यह।

1

मैं कई घंटों तक इस समस्या में फंस गया हूं।

मैंने एक समाधान के बारे में सोचा है। 1. अपनी स्क्रिप्ट को एक पायथन फ़ाइल "script.py" पर ले जाएं और इस फ़ाइल को अपने सर्वर रूट पर रखें। 2. shell_exec ("python script.py");

किसी भी तरह से, यह मेरे लिए काम करता है।

0

मेरे मेजबान पर मुझे shell_exec() से निष्पादित करने के लिए मेरी PHP फ़ाइल के लिए एक अलग पथ देना पड़ा। यह shell_exec('/usr/bin/php backgroundtask.php'); काम नहीं किया।

हालांकि यह shell_exec('/opt/php/php-5.5.0/bin/php backgroundtask.php'); था।

आप this Reference.

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