我想在PHP中执行系统命令,并捕获那些输出涵盖多行的那些命令的输出。我正在使用exec(),但它似乎只为单行生成输出的命令返回一个值。如何捕获PHP执行的命令的多行输出?
例如,如果我在命令行中运行日期,我得到:
Wed May 15 15:07:32 EST 2013
正如预期的那样,如果我跑从PHP这个命令使用该执行exec ...
exec("date", $exec_results);
...然后$ exec_results的值变为...
Array ([0] => Wed May 15 15:07:32 EST 2013)
但是,当我从命令行运行时,我得到这...
real 0m0.000s
user 0m0.000s
sys 0m0.000s
...但是当我做这从PHP ...
exec("time", $exec_results);
... $ exec_results的值为空:
Array()
我不实际上需要在我的应用程序中运行日期或时间,但这些仅仅是命令行中的单行输出与多行输出如何改变PHP返回的例子。
的文件说:
如果输出参数存在,则该指定的数组将被填充来自指令输出的每一行。
那么,为什么$ exec_results数组没有被命令行中运行time命令时看到的所有行填充?
笔记 - 我已经运行命令行条目作为apache用户来排除特权。
感谢您的想法 - 我试过了shell_exec但不幸的是发现它也没有返回到PHP对于其中CLI输出多行的命令。仍然困惑... – Dan
要小心,实际上与cron和写入文件的问题是完全一样的问题,如果该命令不写入控制台它不能被重定向器捕获:#time> file.txt将不会把结果写入文件 –
谢谢Ph.T - 你是对的,不适合时间。它确实适用于戴尔OMSA应用程序的命令(这是我想用PHP捕获的)。所以在这个例子中,屏幕上显示的内容可以移动到文件中,但PHP仍然只是获得一个空数组。我的解决方法是有效的,但是我们无法找到为什么PHP能够获取文本是一种遗憾...... – Dan