2

Linux で PHP の exec() を使用して egrep を実行しています。出力は、実際に Linux のコマンド ラインからこのステートメントを実行したときのファイルの一覧です。PHP で結果をエコーすると、出力の最後の行のみが表示されます。

このリストを配列にバインドして、PHP でさらに操作できるようにします。array() を使用して出力を配列にバインドし、それを print_r で表示しようとしましたが、配列内の最後の行に 1 つの項目しか表示されません。

4

1 に答える 1

2

マニュアルを読み、署名を見てください。

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

したがって:

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

あなたが求めているものです!

exec確かに出力の最後の行を返しますが、3 つの引数を受け入れます。2 つ目は、配列への参照です (何らかの理由で、事前に宣言する必要はありません。ここでは通知を発行しません)。echo $?3番目は終了ステータスです(コマンドラインでコマンド/プログラムの実行が終了した後に実行したときに得られるようなものです。
マニュアルを引用するには:

出力引数が存在する場合、指定された配列はコマンドからの出力のすべての行で埋められます。\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 に答える