«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу захватить как stdout, так и stderr из команды Exec() в PHP?

Как я могу захватить как stdout, так и stderr из команды Exec() в PHP?

Опубликовано 13 декабря 2024 г.
Просматривать:499

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

PHP StdErr после Exec()

В PHP функция exec() выполняет команду и возвращает выходные данные из стандартного вывода команды. Однако, если команда записывает в поток stderr, этот вывод не захватывается функцией exec().

Чтобы захватить как стандартный вывод, так и стандартный вывод из команды, вы можете использовать функцию proc_open(). proc_open() обеспечивает более высокий уровень контроля над процессом выполнения команды, включая возможность передачи потоков команды stdin, stdout и stderr.

Пример:

Давайте рассмотрим следующий сценарий оболочки test.sh, который записывает данные как в stderr, так и в стандартный вывод:

#!/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 и захватить как стандартный вывод, так и стандартный вывод, вы можете использовать следующий код:

$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