PHP में, exec() फ़ंक्शन एक कमांड निष्पादित करता है और कमांड के stdout से आउटपुट लौटाता है। हालाँकि, यदि कमांड stderr को लिखता है, तो यह आउटपुट exec() द्वारा कैप्चर नहीं किया जाता है।
एक कमांड से stdout और stderr दोनों को कैप्चर करने के लिए, आप proc_open() फ़ंक्शन का उपयोग कर सकते हैं। proc_open() कमांड निष्पादन प्रक्रिया पर उच्च स्तर का नियंत्रण प्रदान करता है, जिसमें कमांड के stdin, stdout और stderr स्ट्रीम को पाइप करने की क्षमता शामिल है।
उदाहरण:
आइए निम्नलिखित शेल स्क्रिप्ट, test.sh पर विचार करें, जो stderr और दोनों को लिखता है stdout:
#!/bin/bash echo 'this is on stdout'; echo 'this is on stdout too'; echo 'this is on stderr' >&2; echo 'this is on stderr too' >&2;
इस स्क्रिप्ट को PHP में निष्पादित करने और stdout और stderr दोनों को कैप्चर करने के लिए, आप निम्नलिखित कोड का उपयोग कर सकते हैं:
$descriptorspec = [ 0 => ['pipe', 'r'], // stdin 1 => ['pipe', 'w'], // stdout 2 => ['pipe', 'w'], // stderr ]; $process = proc_open('./test.sh', $descriptorspec, $pipes, dirname(__FILE__), null); $stdout = stream_get_contents($pipes[1]); fclose($pipes[1]); $stderr = stream_get_contents($pipes[2]); fclose($pipes[2]); echo "stdout : \n"; var_dump($stdout); echo "stderr :\n"; var_dump($stderr);
आउटपुट:
जब आप उपरोक्त PHP स्क्रिप्ट निष्पादित करते हैं, तो आपको निम्नलिखित आउटपुट मिलेगा:
stdout : string(40) "this is on stdout this is on stdout too" stderr : string(40) "this is on stderr this is on stderr too"
आउटपुट test.sh स्क्रिप्ट से stdout और stderr स्ट्रीम दिखाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3