ホームページ >php教程 >php手册 >PHP を使用してシステム上で外部コマンドを実行する 4 つの方法

PHP を使用してシステム上で外部コマンドを実行する 4 つの方法

WBOY
WBOYオリジナル
2016-06-21 08:53:23889ブラウズ

ファイルを削除する方法に関する PHP ファイル関数のチュートリアルでは、unlink 関数を使用してファイルを削除する方法と、system 関数を介してシステム コマンドを呼び出して実行する方法の 2 つがあると述べました。ファイル削除コマンド 実際、PHP にはシステム関数以外にもコマンドを実行する方法がたくさんあります。ここでは、PHP Web サイト開発で最も一般的に使用される 4 つのコマンドを実行します。

準備

セキュリティ上の理由から、通常の状況では、仮想ホスト、XAMPP、DedeAMPZ、およびその他の PHP オペレーティング環境がシステムの外部コマンドを呼び出すことは禁止されています。したがって、PHP の機能を使用してコマンドを実行し、システムの外部コマンドを呼び出す必要がある場合は、PHP 実行環境がコマンドを実行するための PHP の機能をサポートしていることを確認する必要があります。

XAMPP または DedeAMPZ を使用している場合、通常、PHP コマンドを実行する関数の実行はデフォルトで禁止されています。php.ini 設定ファイルの disable_functions 項目から使用する関数を削除して、Apache を再起動します。 。私は DedeAMPZ を使用しているので、exec()、passthru()、system()、shell_exec() の 4 つの関数を削除しました。 PHP の実行環境を構成するにはどうすればよいですか?

PHP オペレーティング環境が自分で設定されている場合、デフォルトの php.ini 設定ファイルは外部コマンドを実行する関数の呼び出しを禁止しません。 もちろん、セキュリティ上の理由から、外部コマンドを実行する一部の関数の呼び出しを禁止する必要があります。システムの関数で disable_functions を見つけ、次のように設定します:

disable_functions = exec,system,passthru,shell_exec

つまり、これら 3 つの関数の実行は禁止されており、各関数はカンマで区切られています。 PHP.INI を設定するにはどうすればよいですか?

バーチャルホストを使用している場合は、PHP 環境が PHP を使用してコマンドを実行する機能をサポートしているかどうかをホスティングプロバイダーに問い合わせる必要があります。

その他の指示:

私は Windows システムを使用しているため、このチュートリアルの例では主に Windows システムからの外部コマンドの呼び出しに焦点を当てています。Linux の操作に慣れている場合は、Linux システムで Linux コマンドを実行してみるとよいでしょう。

PHP でコマンドを実行する 4 つの方法

方法 1: exec 関数を使用してシステムから外部コマンドを実行します

プロトタイプ: function exec(string $command,array[optional] $output,int[optional] $return_value)

1
2
3
4


exec("dir",$outPut);
print_r($outPut);
?>

1
2
3
4

< br/> exec("dir"

,

$outPut);


print_r

($outPut)

<スパンクラス="sy0">;


?>

1
2
3


system("dir");
?>

説明: PHP 実行ファイルと同じディレクトリ内のすべてのディレクトリとファイルの情報を一覧表示します。 知識ポイント: exec がシステムの外部でコマンドを実行する場合、結果は出力されません。結果を取得したい場合は、その代わりに結果の最後の行が返されます。 2 番目のパラメーターを使用して、指定された配列に出力できます。この配列内の 1 つのレコードは 1 行の出力を表します。つまり、出力結果が 20 行ある場合、この配列には 20 レコードが含まれるため、繰り返し出力する必要がある場合に使用します。さまざまなシステム外部コマンドを呼び出した結果を出力する場合は、混乱を避けるために結果をコマンドするときにこの配列をクリアして、各システム外部を出力することをお勧めします。 3 番目のパラメータは、コマンド実行のステータス コードを取得するために使用されます。通常、実行が成功した場合は 0 が返されます。 方法 2: system 関数を使用して外部システム コマンドを実行します プロトタイプ: function system(string $command,int[optional] $return_value)
1
2
3


システム<🎜>(<🎜>"dir"<🎜>)<🎜> ;<🎜>
?>

知識ポイント: system と exec の違いは、system がシステムの外部でコマンドを実行すると、コマンドが正常に実行された場合は結果をブラウザーに直接出力することです。それ以外の場合は false を返します。 2 番目のパラメータは、exec の 3 番目のパラメータと同じ意味を持ちます。

方法 3: 関数 passthru を使用して外部システム コマンドを実行します

プロトタイプ: function passthru(string $command,int[optional] $return_value)

知識ポイント: パススルーとシステムの違い パススルーは値を返さずに結果を直接ブラウザに出力し、画像データなどのバイナリを出力できます。

方法 4: バックティック ` (~ と同じキー) で外部システム コマンドを実行します

1
2
3


echo `dir`;
?>

1
2
3


エコー `ディレクトリ`;
?>

知識ポイント

: この方法を使用して外部システム コマンドを実行する場合は、shell_exec 関数が使用可能であることを確認する必要があります。使用できない場合、このバッククォートを使用して外部システム コマンドを実行することはできません。

安全上の注意

これらの関数を使用してコマンドを実行する場合、ユーザーが送信したデータに基づいてコマンドを実行している場合は、システムのセキュリティを考慮する必要があります。escapeshellcmd() 関数とscapeshellarg() 関数を使用すると、ユーザーが悪意を持ってコマンドを実行するのを防ぐことができます。システム、escapeshellcmd () は実行されたシステム コマンド用であり、escapeshellarg() は実行されたシステム コマンドのパラメータ用です。これら 2 つのパラメータは、addslashes() の関数に似ています。

その他の指示

実行コマンドの戻り結果が非常に大きい場合、戻り結果を別のファイルに出力し、そのファイルを個別に読み取ることを検討すると、プログラムの実行効率が大幅に向上します。それが

1
2
3


system("dir > leapsoulcn.txt");
?>

です

1
2
3


システム("dir > Leapsoulcn.txt");
?>

: ここでシステムがコマンドを実行すると、結果がブラウザに直接出力されず、指定されたディレクトリ内のファイルに出力されるため、プログラムの実行効率が大幅に向上します。 この時点で、PHP でコマンドを実行する 4 つの最も一般的に使用されるメソッド、exec()、passthru()、system()、shell_exec() と、それらの違いが PHP Web サイト開発で導入されました。状況に応じて合理的に活用できるシステム外部コマンドは非常に便利です。


注意
: PHP Web サイト開発チュートリアル-leapsoul.cn 転載の際は、元のソースとこの記述をリンクの形で明記してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。