PHP में shell_exec() फंक्शन का उपयोग करके Python स्क्रिप्ट निष्पादित की जा सकती है। यह कमांड को shell के माध्यम से चलाता है और आउटपुट को string के रूप में वापस करता है।
मूल सिंटैक्स
<?php $scriptPath = '/path/to/your/script.py'; $command = escapeshellcmd($scriptPath); // सुरक्षा के लिए आवश्यक $output = shell_exec($command); echo $output; ?>
पूर्ण उदाहरण: आर्गुमेंट्स के साथ
<?php
// Python स्क्रिप्ट: script.py
// import sys
// name = sys.argv[1] if len(sys.argv) > 1 else "World"
// print(f"Hello, {name}!")
$script = '/var/www/html/scripts/greet.py';
$name = 'अमित';
// आर्गुमेंट्स को सुरक्षित रूप से एस्केप करें
$cmd = escapeshellcmd($script) . ' ' . escapeshellarg($name);
$output = shell_exec($cmd);
echo "Python आउटपुट: " . trim($output);
?>
महत्वपूर्ण सुरक्षा और कॉन्फ़िगरेशन
- escapeshellcmd() और
escapeshellarg()हमेशा उपयोग करें - वेब सर्वर यूजर (www-data, apache, nginx) को स्क्रिप्ट और डायरेक्टरी पर execute permission होनी चाहिए
disable_functionsमेंshell_execअक्षम हो सकता है (shared hosting में आम)- लंबी चलने वाली स्क्रिप्ट के लिए
proc_open()या job queue (Redis/RabbitMQ) बेहतर है
उन्नत: proc_open() के साथ Real-time Output
<?php
$cmd = 'python3 /path/to/long_script.py';
$descriptors = [
0 => ['pipe', 'r'], // stdin
1 => ['pipe', 'w'], // stdout
2 => ['pipe', 'w'] // stderr
];
$process = proc_open($cmd, $descriptors, $pipes);
if (is_resource($process)) {
// Real-time output पढ़ें
while ($line = fgets($pipes[1])) {
echo $line . "
";
flush(); // ब्राउज़र को तुरंत भेजें
}
fclose($pipes[1]);
$returnCode = proc_close($process);
echo "निकास कोड: $returnCode";
}
?>
सामान्य समस्याएं और समाधान
| समस्या | समाधान |
|---|---|
| Permission denied | chmod +x script.py और वेब यूजर को ownership दें |
| Python नहीं मिला | पूर्ण पथ उपयोग करें: /usr/bin/python3 |
| कोई आउटपुट नहीं | Python में print(..., flush=True) उपयोग करें |
| Timeout | set_time_limit() बढ़ाएं या async processing उपयोग करें |