PHP से एक पायथन लिपि चला रहा है




python linux (5)

अलेजांद्रो ने इसे अपील की, अपवाद (उबंटू या डेबियन) को स्पष्टीकरण जोड़ना - मेरे पास उत्तर में जोड़ने का प्रतिनिधि नहीं है:

sudoers फ़ाइल: sudo visudo

अपवाद जोड़ा गया: www-data ALL=(ALL) NOPASSWD: ALL

मैं निम्न आदेश का उपयोग कर PHP से एक पायथन स्क्रिप्ट चलाने की कोशिश कर रहा हूं:

exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');

हालांकि, PHP बस किसी भी आउटपुट का उत्पादन नहीं करता है। त्रुटि रिपोर्टिंग E_ALL पर सेट है और display_errors चालू है।

मैंने जो कोशिश की है वह यहां है:

  • मैंने python2 , /usr/bin/python2 python2.7 और python2.7 बजाय उपयोग किया
  • मैंने एक पूर्ण पथ के बजाय एक सापेक्ष पथ का भी उपयोग किया जिसने कुछ भी नहीं बदला।
  • मैंने कमांड exec , shell_exec , system का उपयोग करने का प्रयास किया।

हालांकि, अगर मैं दौड़ता हूं

if (exec('echo TEST') == 'TEST')
{
    echo 'exec works!';
}

यह पूरी तरह से ठीक काम करता है जबकि shutdown now कुछ भी नहीं करता है।

PHP को फ़ाइल तक पहुंचने और निष्पादित करने की अनुमति है।

संपादित करें: अलेजैंड्रो के लिए धन्यवाद, मैं समस्या को ठीक करने में सक्षम था। यदि आपको एक ही समस्या है, तो यह न भूलें कि आपका वेबसर्वर शायद / उम्मीद है कि रूट के रूप में नहीं चलता है। अपने वेबसर्वर के उपयोगकर्ता या समान अनुमति वाले उपयोगकर्ता के रूप में लॉग इन करने का प्रयास करें और कमांड को चलाने का प्रयास करें।


उपरोक्त विधियां जटिल लगती हैं। संदर्भ के रूप में मेरी विधि का प्रयोग करें।

मेरे पास ये दो फाइलें हैं I

run.php

mkdir.py

यहां, मैंने एक HTML पृष्ठ बनाया है जिसमें गो बटन शामिल है। जब भी आप इस बटन को दबाते हैं तो एक नया फ़ोल्डर निर्देशिका में बनाया जाएगा जिसका पथ आपने उल्लेख किया है।

run.php

<html>
 <body>
  <head>
   <title>
     run
   </title>
  </head>

   <form method="post">

    <input type="submit" value="GO" name="GO">
   </form>
 </body>
</html>

<?php
	if(isset($_POST['GO']))
	{
		shell_exec("python /var/www/html/lab/mkdir.py");
		echo"success";
	}
?>

mkdir.py

#!/usr/bin/env python    
import os    
os.makedirs("thisfolder");

मेरे मामले में मुझे scripts नामक www निर्देशिका में एक नया फ़ोल्डर बनाने की आवश्यकता थी। scripts भीतर मैंने test.py नामक एक नई फ़ाइल जोड़ test.py

मैंने फिर sudo chown www-data:root test.py उपयोग किया sudo chown www-data:root scripts और sudo chown www-data:root test.py

फिर मैं नई scripts निर्देशिका में गया और sudo chmod +x test.py इस्तेमाल किया।

मेरी test.py फ़ाइल यह इस तरह दिखती है। विभिन्न पायथन संस्करण नोट करें:

#!/usr/bin/env python3.5
print("Hello World!")

PHP से अब मैं यह करता हूं:

$message = exec("/var/www/scripts/test.py 2>&1");
print_r($message);

और आपको देखना चाहिए: हैलो वर्ल्ड!


मैं passthru का उपयोग करने और सीधे आउटपुट बफर को संभालने की सलाह देते हैं:

ob_start();
passthru('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
$output = ob_get_clean(); 

यह बहुत छोटा है, लेकिन सिर्फ उन लोगों की मदद करना चाहता था जो पहले से ही अलेजैंड्रो के सुझाव के साथ पीछा करते थे लेकिन इस त्रुटि का सामना करना पड़ा:

sh: blabla.py: कमांड नहीं मिला

अगर किसी को उस त्रुटि का सामना करना पड़ा, तो अलेजैंड्रो द्वारा PHP फ़ाइल में थोड़ा बदलाव करने की आवश्यकता है:

$command = escapeshellcmd('python webScraping.py');




archlinux