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

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

WBOY
リリース: 2016-07-21 15:16:54
オリジナル
837 人が閲覧しました

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);
?>

システムの例:


コードをコピーします:


$a = system("dir",$out); $a);
print_r( $out)


system、exce、passthruの違い
system()はシェル結果の最後の行を出力して返します。
exec() は結果を出力せず、シェル結果の最後の行を返します。すべての結果は返された配列に保存できます。
passthru()はコマンドを呼び出すだけで、コマンドの実行結果をそのまま標準出力装置に直接出力します。
同じこと: コマンド実行のステータスコードを取得できます

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325819.html技術記事 PHPの組み込み関数execやsystemはシステムコマンド(シェルコマンド)を呼び出すことができ、もちろんpassthruやescapeshellcmdなどの関数もあります。 多くの場合、php の exec、system、およびその他の関数は、システム コマンドを呼び出すために使用されます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート