"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني التقاط كل من stdout وstderr من أمر Exec() في PHP؟

كيف يمكنني التقاط كل من stdout وstderr من أمر Exec() في PHP؟

تم النشر بتاريخ 2024-12-13
تصفح:443

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"

يُظهر الإخراج تدفقات stdout و stderr من البرنامج النصي test.sh.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3