आप एक आदेश एक समाधान पर अमल करने, और stderr
और stdout
दोनों, नहीं "विलय कर दिया" मिलता है, शायद proc_open
है, जो आदेश पर नियंत्रण का एक बड़ा स्तर है कि निष्पादित किया जा रहा है प्रदान करता है का उपयोग करने के लिए चाहते हैं - एक तरह से सहित पाइप stdin
/stdout
/stderr
पर।
और यहाँ एक उदाहरण है: temp.php
में
#!/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;
अब, चलो चलो कोड कुछ पीएचपी,: चलो पर विचार हम जो दोनों stderr
और stdout
को लिखते हैं test.sh
में इस खोल स्क्रिप्ट है, चलो
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w"), // stderr
);
: - पहला, हम आई/ओ वर्णनकर्ता प्रारंभऔर, फिर, test.sh
आदेश पर अमल, उन वर्णनकर्ता का उपयोग कर, मौजूदा निर्देशिका में, और कह रही है मैं/हे होना चाहिए से/$pipes
रहे हैं:
$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);
हम निम्नलिखित उत्पादन जब temp.php
स्क्रिप्ट पर कार्य मिलती है:
$ php ./temp.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
"
आशा इस मदद करता है :-)
मैं आपको सिम्फनी/प्रोसेस घटक का उपयोग करने की सलाह दूंगा। –