これら 2 つの関数はどちらも Linux コマンドを実行する関数です。違いは、exec はデータの最後の行のみを取得できるのに対し、shell_exec はすべてのデータを取得できるという点です。
スクリプトパスに以下のファイルがある場合
-bash-4.1#ll
総投与量12
-rw-rw-r-- 1 www web 133 7 月 16 日 15:00 a.php
-rw-r--r--. 1 lee web 59 2月29日 17:05 b.php
-rw-r--r-- 1 lee web 81 3月8日 17:00 c.php
まず、PHP マニュアルでこれら 2 つの関数の説明を見てください:
exec --- 外部プログラムを実行します
構文: string exec ( string command [, array &output [, int &return_var]] )
説明:
Exec() は指定されたコマンドを実行しますが、何も出力しません。コマンドを実行してコマンドからすべての情報を取得する必要がある場合は、 を使用できます。 passthru() 関数。
パラメータ配列が指定されている場合、指定された配列にはコマンドによって出力された各行が埋め込まれます。 注: 配列にすでに要素が含まれている場合、exec() はそれを配列の末尾に追加します。この関数で要素を追加したくない場合は、配列を exec() に渡す前に unset() を呼び出すことができます。
実行例
コードは次のとおりです | コードをコピー |
/** ?>
|
実行結果
-rw-r--r--. 1 lee web 81 3月8日 17:00 c.phpshell_exec の例
shell_exec()
shell_exec() コマンドラインは実際にはバッククォート (`) 演算子のバリエーションにすぎません。シェルまたは Perl スクリプトを作成したことがある場合は、バックティック演算子内で他のコマンドの出力をキャプチャできることをご存知でしょう。たとえば、リスト 1 は、バッククォートを使用して、現在のディレクトリ内の各テキスト (.txt) の単語数を取得する方法を示しています。
shell_exec() 内
コードは次のとおりです | コードをコピー |
エコー $結果 ?> |
図 1 からわかるように、得られる結果はシェル スクリプトから得られる結果と同じです
execとshell_execの違い
コードは次のとおりです | コードをコピー |
/** * *瓊台ブログ */ $data = shell_exec('/bin/ls -l'); エコー ' リーリー '; ?> |
実行結果
合計12
-rw-rw-r-- 1 www ウェブ 139 2012 年 7 月 16 日 a.php
-rw-r--r-- 1 リーウェブ 59 2月29日 17:05 b.php
-rw-r--r--. 1 lee web 81 3月 8 日 17:00 c.php したがって、通常 exec 関数を使用する人は、すべての戻り情報を取得する必要がある場合は、shell_exec 関数を使用する必要があることに注意してください。もちろん、コマンドの実行結果に返される情報は 1 行だけなので、どちらを使用しても問題ありません