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 では、次のコードでこのエラーを再現できます。

main.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 に答える