PHPの組み込み関数execやsystemはシステムコマンド(シェルコマンド)を呼び出すことができ、もちろんpassthruやescapeshellcmdなどの関数もあります。
多くの場合、PHP の exec、system、およびその他の関数を使用してシステム コマンドを呼び出すと、作業をより適切かつ迅速に完了するのに役立ちます。たとえば、2 日前に .rar ファイルをバッチ処理していたとき、exec は非常に役に立ちました。
今日は、よく使われる通話システムの機能を整理し、私の経験を皆さんと共有します。
注: これら 2 つの関数を使用したい場合は、php.ini のセーフ モードをオフにする必要があります。オフにしないと、セキュリティ上の理由から、php はシステム コマンドを呼び出すことを許可しません。
まず、PHPマニュアルでこれら2つの関数の説明を見てください:
exec --- 外部プログラムを実行します
構文: string exec ( string command [, array &output [, int &return_var]] )
説明:
exec() は指定されたコマンド command を実行しますが、コマンドを実行してコマンドからすべての情報を取得する必要がある場合は、単にコマンドの結果から最後の行を返します。 passthru() 関数を使用できます。
パラメータ配列が指定されている場合、指定された配列にはコマンドによって出力された各行が埋め込まれます。 注: 配列に既に要素が含まれている場合、exec() はその要素を配列の末尾に追加します。この関数で要素を追加したくない場合は、配列を exec() に渡す前に unset() を呼び出すことができます。
パラメータ array と return_var が与えられた場合、実行に戻されたステータスコマンドがこの変数に書き込まれます。
注: ユーザー入力からのデータがこの関数に渡されることを許可する場合は、ユーザーがシステムをだまして任意のコマンドを実行できないようにするために、escapeshellcmd() を使用する必要があります。
注: この関数を使用してプログラムを開始し、そのプログラムがバックグラウンドで実行されている間はそのままにしておきたい場合は、プログラムの出力がファイルまたは何らかの出力データ ストリームにリダイレクトされていることを確認する必要があります。それ以外の場合は PHP にリダイレクトされます。プログラムの実行が終了するまでハングします。
system --- 外部プログラムを実行し、出力を表示する
構文: string system ( string command [, int &return_var] )
説明:
System( ) は、指定されたコマンド command を実行し、結果を出力します。パラメータ return_var が指定されている場合、実行されたコマンドのステータス コードがこの変数に書き込まれます。
注: ユーザー入力からのデータがこの関数に渡されることを許可する場合は、ユーザーがシステムをだまして任意のコマンドを実行できないようにするために、escapeshellcmd() を使用する必要があります。
注: この関数を使用してプログラムを開始し、そのプログラムがバックグラウンドで実行されている間はそのままにしておきたい場合は、プログラムの出力がファイルまたは何らかの出力データ ストリームにリダイレクトされていることを確認する必要があります。それ以外の場合は PHP にリダイレクトされます。プログラムの実行が終了するまでハングします。
PHPがサーバーモジュールとして実行されている場合、system()は各行を出力した後にWebサーバーの出力バッファを自動的にクリアしようとします。
成功した場合はコマンドの最後の行を返し、失敗した場合は false を返します。
コマンドを実行して、コマンドからすべてのデータを取得する必要がある場合は、 passthru() 関数を使用できます。
これら 2 つはシステム シェル コマンドを呼び出すために使用されます。
違い:
Exec はすべての実行結果を $output 関数 (配列) に返すことができ、$status は実行ステータス、0 は成功、1 は失敗です
systerm は $output 関数を提供する必要はありません。同様に、$return_var は実行ステータス コードです。 0 は成功、1 は失敗です。コードをコピーします。コードは次のとおりです:
$a = exec("dir",$out,$status);
print_r($out); ?>