1

在 PHP 中,我正在运行以下命令:

exec ("ls -U ".$folder." |head -1000", $ls_u);

此命令位于 PHP 文件中,由 PHP 在控制台上直接运行并引发此错误:

ls: write error: Broken pipe

是什么导致了这个错误?或者在 PHP exec 中使用管道不是一个好主意?

4

2 回答 2

3

在终端上使用 PHP 的 Linux 中,您可以使用以下代码重现此错误:

主.php:

<?php
  $process = popen("ls", "r");
  pclose($process);
?>

然后在终端上像这样运行它:

eric@dev ~ $ php main.php
ls: write error: Broken pipe

发生错误是因为您正在运行一个返回数据的命令并且您没有捕获它,因此它抱怨管道损坏。

我能够像这样修复它:

<?php
  $handle = popen('ls', 'r');
  $read = fread($handle, 2096);
  pclose($handle);
  echo $read;
?>

然后它工作,打印:

eric@dev ~ $ php main.php
main.php
anotherfile.txt

请注意,fread(...)如果您想从 ls 获取所有输出,则必须将其放入循环中。

于 2014-07-29T17:42:43.960 回答
-1

我相信控制台命令中存在语法错误,并建议使用escapeshellarg().

exec('ls -U '.escapeshellarg($folder).' | head -1000', $ls_u);
于 2012-07-02T15:39:25.453 回答