PHPシステムプログラムの実行関数(system、passthru、exec)の簡易解析(コード付き)

不言
リリース: 2023-04-03 14:44:01
オリジナル
3308 人が閲覧しました

この記事では、PHPのシステムプログラム実行関数(system, passthru, exec)の簡単な解析を紹介します(コード付き)。一定の参考価値があります。困っている友人の参考になれば幸いです。あなたに、助けられました。

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

string exec ( string $command [, array &$output [, int &$return_var ]] )

<?php
        echo exec("ls",$output);
        echo "</br>";
        print_r($file);
?>
ログイン後にコピー

実行結果:

test.php
Array([0] =>index.php [1] =>test.php)

分析:
exec は実行結果を積極的に返さず、結果の最後の行のみを返します;
完全な結果を取得したい場合は、それを出力するための 2 番目のパラメーターが必要です。配列内のこの 1 つのレコードは出力行を表し、異なるシステム外部コマンドが繰り返し実行されると、混乱を避けるために各システム外部コマンドの結果を出力するときに unset() 配列がクリアされます。パラメータはコマンドの実行を取得するために使用されます。実行が成功した場合、ステータス コードは通常 0 を返します。

passthru — 外部プログラムを実行し、生の出力を表示します

void passthru ( string $command [, int &$return_var ] )

<?php
        passthru("ls");
?>
ログイン後にコピー

実行結果:


index.phptest.php

分析:

exec() 関数と同様に、外部の実行にも使用されます。コマンドを実行しますが、直接結果はブラウザに出力されます (処理を行わない生の出力)。戻り値はありません。
バイナリ データを出力する必要があり、直接ブラウザに送信する必要がある場合など、この関数を使用します。 Command;

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

string system ( string $command [, int &$return_var ] )

<?php
        system(&#39;ls&#39;, $retval);
?>
ログイン後にコピー

分析:

結果をブラウザに直接出力します;
2 番目のパラメータは、外部コマンドが実行された後の戻りステータスです;
成功した場合、コマンド出力の最後の行は次のようになります。失敗した場合は FALSE が返されます;
PHP がサーバー モジュールで実行され、system() 関数も出力の各行の後に Web サーバーの出力キャッシュを自動的に更新しようとする場合。

shell_exec — シェル環境を通じてコマンドを実行し、完全な出力を文字列として返します。

説明

string shell_exec (string $cmd)
バッククォート演算子「`」は、関数shell_exec()と同じ効果があります。
shell_exec の戻り値
プロセス実行中にエラーが発生した場合や、プロセスが出力しない場合には NULL が返されるため、この関数を使用しても戻り値によってプロセスが正常に実行されたかどうかを知ることはできません。プロセス実行の終了コードを確認する必要がある場合は、exec() 関数を使用します。

<?php
$output = `ls -al`;
echo "<pre class="brush:php;toolbar:false">$output
"; ?>
ログイン後にコピー

注:

バックティック演算子は、セーフ モードがアクティブになっている場合、またはshell_exec() がオフになっている場合は効果がありません。
他の一部の言語とは異なり、二重引用符で囲まれた文字列ではバッククォートを使用できません。

例 #1 shell_exec() ルーチン

PHP がセーフ モードで実行されている場合、この関数は使用できません。

<?php
$output = shell_exec(&#39;ls -lart&#39;);
echo "<pre class="brush:php;toolbar:false">$output
"; ?>
ログイン後にコピー

escapeshellargDescription
stringscapeshellarg (string $arg)
escapeshellarg() は文字列に一重引用符を追加し、既存の文字列を引用またはエスケープできます。一重引用符の存在により、文字列をシェル関数に直接渡すことができ、安全であることが保証されます。この関数は、ユーザーが入力した一部のパラメータに使用する必要があります。シェル関数には、exec()、system() 実行演算子が含まれます。

パラメータ

arg
トランスコードする必要があるパラメータ。

戻り値

変換後の文字列。

<?php
system(&#39;ls &#39;.escapeshellarg($dir));
?>
ログイン後にコピー

escapeshellcmd説明
string escapeshellcmd (string $command)
escapeshellcmd() は文字列内のシェル コマンドを偽装する可能性があります エスケープ文字任意のコマンドを実行します。この関数は、ユーザーが入力したデータが exec() 関数または system() 関数、あるいは実行オペレーターに渡される前にエスケープされることを保証します。

バックスラッシュ (\) は、文字 &#;`|*?~<>^()[]{}$\、\x0A、\xFF の前に挿入されます。 ' および " は、一致しない場合にのみエスケープされます。Windows プラットフォームでは、これらの文字はすべて、% および ! 文字と同様にスペースで置き換えられます。

パラメータ
コマンド
エスケープするコマンド。

戻り値

エスケープされた文字列。

<?php
// 我们故意允许任意数量的参数
$command = &#39;./configure &#39;.$_POST[&#39;configure_options&#39;];
$escaped_command = escapeshellcmd($command);
 
system($escaped_command);
?>
ログイン後にコピー
警告

escapeshellcmd()は完全なコマンド文字列に対して使用する必要があります。任意の数のパラメータを渡すこともできます。単一のパラメータをエスケープするには、escapeshellarg() 関数を使用してください。

おすすめ関連記事:

php の _get メソッドと _set メソッドのアクセス方法コード例

phpでのファイル操作の色々な方法まとめ(コード付き)

以上がPHPシステムプログラムの実行関数(system、passthru、exec)の簡易解析(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート