PHPでは、次のコマンドを実行しています。
exec ("ls -U ".$folder." |head -1000", $ls_u);
このコマンドはPHPファイル内にあり、コンソール上でPHPによって直接実行され、次のエラーをスローします。
ls: write error: Broken pipe
このエラーの原因は何ですか?または、PHP execでパイプを使用するのは良い考えではありませんか?
PHPでは、次のコマンドを実行しています。
exec ("ls -U ".$folder." |head -1000", $ls_u);
このコマンドはPHPファイル内にあり、コンソール上でPHPによって直接実行され、次のエラーをスローします。
ls: write error: Broken pipe
このエラーの原因は何ですか?または、PHP execでパイプを使用するのは良い考えではありませんか?
ターミナルで 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 からすべての出力を取得したい場合は、ループに入れる必要があることに注意してください。
コンソール コマンドに構文エラーがあると思われます。引数を でエスケープすることをお勧めしescapeshellarg()
ます。
exec('ls -U '.escapeshellarg($folder).' | head -1000', $ls_u);