2

我正在使用 PHPs exec() 在 Linux 中执行 egrep。在 Linux 中从命令行实际执行此语句时,输出是文件列表。当我在 PHP 中回显结果时,它只显示输出的最后一行。

我想将此列表绑定到一个数组,以便我可以在 PHP 中进一步操作它。我尝试使用 array() 将输出绑定到一个数组,然后用 print_r 显示它,但它只显示数组中的一项,即最后一行。

4

1 回答 1

2

阅读手册,并查看签名:

string exec ( string $command [, array &$output [, int &$return_var ]] )

因此:

$lastLine = exec('ls', $output, $status);
var_dump($output);

是你所追求的!

exec确实返回输出的最后一行,但它接受 3 个参数。第二个是对数组的引用(由于某种原因,它不需要事先声明,这里不发出通知)。第三个是退出状态(有点像echo $?在命令/程序在命令行上完成运行后执行的操作。
引用手册:

如果存在输出参数,则指定的数组将填充命令的每一行输出。此数组中不包含尾随空格,例如 \n。请注意,如果数组已经包含一些元素,则 exec() 将附加到数组的末尾。如果您不希望函数附加元素,请在将数组传递给 exec() 之前对数组调用 unset()。

这意味着,最好的用途(如获取最多信息)exec是:

$last = exec('ls -lta', $fullList, $status);
if ($status !== 0)
{
    exit('command didn\'t finish as expected: '.$status);
}
print_r($fullList);

如果这对您仍然没有意义,请参阅本网站上的任何重复问题

于 2013-09-09T09:45:00.013 回答