"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मैं PHP में Exec() कमांड से stdout और stderr दोनों को कैसे कैप्चर कर सकता हूं?

मैं PHP में Exec() कमांड से stdout और stderr दोनों को कैसे कैप्चर कर सकता हूं?

2024-12-13 को प्रकाशित
ब्राउज़ करें:234

How Can I Capture Both stdout and stderr from an Exec() Command in PHP?

PHP StdErr उपरांत Exec()

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