ホームページ  >  記事  >  php教程  >  exec、system、およびその他の関数を使用して PHP でシステム コマンドを呼び出す方法 (推奨されず、セキュリティ上の問題が発生する可能性があります)

exec、system、およびその他の関数を使用して PHP でシステム コマンドを呼び出す方法 (推奨されず、セキュリティ上の問題が発生する可能性があります)

WBOY
WBOYオリジナル
2016-06-13 11:58:391201ブラウズ

PHPの組み込み関数execやsystemはシステムコマンド(シェルコマンド)を呼び出すことができ、もちろんpassthruやescapeshellcmdなどの関数もあります。

多くの場合、PHP の exec、system、およびその他の関数を使用してシステム コマンドを呼び出すと、作業をより適切かつ迅速に完了できます。たとえば、2 日前に .rar ファイルをバッチ処理していたとき、exec は非常に役に立ちました。

今日は、よく使われる通話システムの機能を整理し、私の経験を皆さんと共有します。

注: これら 2 つの関数を使用したい場合は、php.ini のセーフ モードをオフにする必要があります。オフにしないと、セキュリティ上の理由から、php はシステム コマンドの呼び出しを許可しません。

まず、PHP マニュアルでこれら 2 つの関数の説明を見てください:

exec --- 外部プログラムを実行します

構文: 文字列exec ( string command [, array &output [, int &return_var]] )

説明:

exec() は指定されたコマンド command を実行しますが、何も出力せず、単にコマンドを受け取ります。コマンドを実行してコマンドからすべてのデータを取得する必要がある場合は、 passthru() 関数を使用できます。

引数配列が指定されている場合、指定された配列にはコマンドによって出力された各行が埋め込まれます。 注: 配列に既に要素が含まれている場合、exec() は後でその要素を配列に追加します。この関数で要素を追加したくない場合は、配列を exec() に渡す前に unset() を呼び出すことができます。

パラメーター array と return_var が指定されている場合、返されたステータス コマンドはこの変数に書き込まれます。

注: ユーザー入力からのデータをこの関数に渡すことを許可する場合は、ユーザーがシステムをだまして任意のコマンドを実行できないようにする必要があります。

注: この関数を使用してプログラムを開始し、バックグラウンドで実行中にそのプログラムをそのままにしておく場合は、プログラムの出力がファイルまたは他の出力データ ストリームにリダイレクトされていることを確認する必要があります。そうしないと、プログラムの実行が終了するまで PHP がハングします。

system --- 外部プログラムを実行し、出力を表示します

構文: string system ( string command [, int &return_var] )

説明:

System() は、指定されたコマンド command を実行し、結果を出力します。パラメータ return_var が指定されている場合、実行されたコマンドのステータス コードがこの変数に書き込まれます。

注: ユーザー入力からのデータをこの関数に渡すことを許可する場合は、ユーザーがシステムをだまして任意のコマンドを実行できないようにする必要があります。

注: この関数を使用してプログラムを開始し、バックグラウンドで実行中にそのプログラムをそのままにしておく場合は、プログラムの出力がファイルまたは他の出力データ ストリームにリダイレクトされていることを確認する必要があります。そうしないと、プログラムの実行が終了するまで PHP がハングします。

PHP がサーバー モジュールとして実行されている場合、system() は各行が出力された後に Web サーバーの出力バッファを自動的にクリアしようとします。

成功した場合はコマンドの最後の行を返し、失敗した場合は false を返します。

コマンドを実行して、コマンドからすべてのデータを取得する必要がある場合は、 passthru() 関数を使用できます。

どちらもシステム シェル コマンド

を呼び出すために使用されます。 違い:

exec はすべての実行結果を $output 関数 (配列) に返すことができ、$status は実行のステータス、0 は成功、1 は失敗

システムは $output 関数を提供する必要はなく、結果を直接返します。同様に、$return_var は実行のステータス コードで、0 は成功です。 1 は失敗です

実行例:

コードをコピー コードは次のとおりです:


< ?php
$a = exec("dir",$out,$status);
print_r($out); print_r($status);
?>


システムの例:

コードをコピーします。コードは次のとおりです。 $a = system("dir",$out);

print_r($a); out);

?>



system、exce、および passthru の違い

system() は、シェル結果の最後の行を出力して返します。

exec() は結果を出力せず、シェル結果の最後の行を返します。すべての結果は返された配列に保存できます。
passthru()はコマンドを呼び出すだけで、コマンドの実行結果をそのまま標準出力装置に直接出力します。 同じ点: コマンド実行のステータスコードを取得できます
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。