PHP には、system 関数、exec 関数、popen 関数、passthru、shell_exec 関数など、システム コマンドを実行するためによく使用される関数がいくつかあります。これらはすべてシステム コマンドを実行できますが、前提条件はシステムによって与えられた権限である必要があります。
システム機能
説明: 外部プログラムを実行し、出力データを表示します。
構文: string system(string command, int [return_var]);
戻り値: 文字列
詳しい紹介:
この関数は、C 言語の関数 system() に似ており、命令を実行して結果を出力するために使用されます。 return_var パラメータが存在する場合、return_var にはコマンド実行後のステータスが入ります。ユーザーが入力したデータを処理する必要があるが、ユーザーがシステムをクラックするためのトリックを行うのを防ぎたい場合は、EscapeShellCmd() を使用できることにも注意してください。 PHP がモジュール形式で実行される場合、この関数は出力の各行の後に Web サーバーの出力バッファを自動的に更新します。完全な文字列を返す必要があり、不必要な他の中間出力インターフェイスを経由したくない場合は、PassThru() を使用できます。
コード例:
コードは次のとおりです | コードをコピー |
$last_line = system("ls", $retval); 戻り値: " . $retval; ?> |
実行関数
説明: 外部プログラムを実行します。
構文: string exec(string コマンド, string [array], int [return_var]);
戻り値: 文字列
詳しい紹介:
外部プログラムまたは外部命令入力コマンドを実行する機能です。戻り文字列は、外部プログラムの実行後に返される最後の行のみです。完全な戻り文字列が必要な場合は、PassThru() 関数を使用できます。
パラメータ配列が存在する場合、コマンドはその配列をパラメータに追加して実行します。配列を処理したくない場合は、exec() を実行する前に unset() を呼び出すことができます。 return_var と配列パラメータの両方が存在する場合、コマンド実行後のステータスが return_var に設定されます。
ユーザーが入力したデータを処理し、ユーザーがシステムをクラックするためのトリックを行うのを防ぐ必要がある場合は、EscapeShellCmd() を使用できることに注意してください。
コード例:
コードは次のとおりです | コードをコピー |
echo exec("whoami"); |
ポップオープン機能
説明: ファイルを開きます。
構文: int Popen(文字列コマンド, 文字列モード);
戻り値: 整数
詳しい紹介:
この関数はファイルを開くコマンドを実行し、ファイルはパイプラインで処理されます。この関数で開かれたファイルは一方向 (読み取り専用または書き込み専用) のみであり、pclose() で閉じる必要があります。ファイル操作には、fgets()、fgetss()、および fputs() が使用できます。ファイルを開くときにエラーが発生した場合は、false 値が返されます。
コード例:
コードは次のとおりです | コードをコピー |
|
関数パススルーを使用して外部システムコマンドを実行します
プロトタイプ: 関数 passthru(string $command,int[optional] $return_value)
知識ポイント: パススルーとシステムの違い パススルーは値を返さずに結果をブラウザに直接出力し、画像データなどのバイナリを出力できます。
方法 4: バックティック` (および同じキー内の ~) を使用して外部システム コマンドを実行します
コードは次のとおりです | コードをコピー |
|
知識ポイント: このメソッドを使用して外部システム コマンドを実行する場合は、shell_exec 関数が使用可能であることを確認する必要があります。そうでない場合、このバックティックを使用して外部システム コマンドを実行することはできません。
安全上の注意事項
これらの関数を使用してコマンドを実行する場合、ユーザーが送信したデータに基づいてコマンドを実行する場合は、システムのセキュリティを考慮する必要があります。escapeshellcmd() 関数とscapeshellarg() 関数を使用すると、ユーザーがシステム上でコマンドを悪意をもって実行するのを防ぐことができます。 .escapeshellcmd() は実行されたシステム コマンド用であり、escapeshellarg() は実行されたシステム コマンドのパラメータ用です。これら 2 つのパラメータは、addslashes() の関数に似ています。
次に、システムコマンドを実行するカスタム関数を見てみましょう
コードは次のとおりです | コードをコピー |
関数実行($cfe) { |