ホームページ  >  記事  >  バックエンド開発  >  PHP で exec、system、およびその他の関数を使用してシステム コマンドを呼び出す方法について

PHP で exec、system、およびその他の関数を使用してシステム コマンドを呼び出す方法について

不言
不言オリジナル
2018-06-21 14:55:572111ブラウズ

この記事では、PHP で exec 関数や system 関数などを使用してシステム コマンドを呼び出す方法を主に紹介します。必要な方は参考にしてください。 ##PHP AS サーバーサイドのスクリプト言語であり、単純または複雑な動的 Web ページの作成などのタスクを完全に実行できます。ただし、常にこのようになるとは限りません。場合によっては、特定の機能を実装するために、オペレーティング システムの外部プログラム (またはコマンド) を使用する必要があります。この方法では、半分の労力で 2 倍の結果を得ることができます。

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 が指定されている場合、実行に戻されたステータス コマンドがこの変数に書き込まれます。

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

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

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

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

説明:

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

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

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

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

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

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

これらはどちらもシステム シェル コマンドを呼び出すために使用されます。

違いは次のとおりです。

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

システムは $output 関数を提供する必要はなく、同様に、$return_var は実行ステータス コードです。 1 は失敗です。

実行例:

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

システムの例:

<?php 
$a = system("dir",$out); 
print_r($a); 
print_r($out); 
?>
システム、 exce、パススルーの違い

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

以上がこの記事の全内容であり、皆様の学習に役立つことを願っています。 PHP中国語ウェブサイトです!

関連提案:

PHPの条件を満たすすべての文字列を定期的に置換するpreg_replace()メソッドについて

PHPのfilter_var()関数とFilter関数の分析PHP

php

における str_replace 置換の脆弱性の分析

以上がPHP で exec、system、およびその他の関数を使用してシステム コマンドを呼び出す方法についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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