PHP Опасный возврат на функцию exe c () - PullRequest
0 голосов
/ 11 января 2020

эта функция ничего не дает, кто-нибудь знает почему?

var_dump(shell_exec('netstat /?'));

такая же проблема с версией exe c ().

однако этот код работает хорошо

var_dump(shell_exec('dir /?));

Ответы [ 2 ]

0 голосов
/ 11 января 2020

netstat с переключателем /? печатает не в стандартном выводе (stdout), а в стандартной ошибке (stderr). Поскольку ваш код PHP не делает никаких действий для захвата stderr, вы получаете только (пустой) стандартный вывод. Если вы запускаете PHP из командной строки, вы все равно должны видеть stderr, но если вы запускаете PHP, хотя веб-сервер (который, как я предполагаю, имеет место в данном случае), тогда stderr отбрасывается. Однако это само по себе не объясняет пустой вывод, поскольку shell_exe c () возвращает (выделено мое):

Вывод выполненной команды или NULL если произошла ошибка или команда не выдаст .

В любом случае, если вы не хотите возиться с pipe Вы можете просто перенаправить stderr на стандартный вывод :

var_dump(shell_exec('netstat /? 2>&1'));
0 голосов
/ 11 января 2020

Попробуйте добавить в команду флаг -n:

var_dump(shell_exec('netstat -n'));

Еще лучше, с помощью exec() вы также можете назначить вывод команды массиву:

exec('netstat -n', $output);
var_dump($output);

См. https://www.php.net/manual/en/function.exec.php

...