PHPでexec関数を使う方法

WBOY
リリース: 2016-06-13 13:43:43
オリジナル
1037 人が閲覧しました

php での exec 関数の使用法
私は exec を使用してアプリケーションを実行する php スクリプトを作成しました。コードは次のとおりです。

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php
    $return_array = array(); 
    $sendmsg ="C:\wamp\www\FlowServer\sendmsg\test\bin\Debug\test.exe"; 
    exec($sendmsg,$return_array); 
    var_dump($return_array);   
?>

ログイン後にコピー

でも可能です。ブラウザでアクセス この PHP ページを表示しても何も起こりません。$return_array は空のように表示されます。 cmd コマンド ラインに C:wampwwwFlowServersendmsgtestbinDebugtest.exe と入力すると、プログラムは正常に実行できます。何故ですか?

-----解決策---------
http://topic.csdn 。 net/u/20070627/10/39bd28ed-05e7-41b1-984d-f205ee4672ac.html
------解決策----------------------
PHP を使用して外部のコマンドを実行する 4 つの方法システム
2010 年 4 月 14 日の読み取り数: 3,063 ビュー
コメントを読む コメントを残す

ファイル インスタンスを削除する方法に関する PHP ファイル関数のチュートリアルで、2 つの方法があると述べました。 unlink関数を使用してファイルを削除する方法と、system関数を介してシステムコマンドを呼び出してファイル削除コマンドを実行する方法があります。実は、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[オプション] $output ,int[オプション] $return_value)
1
2
3
4

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

説明: PHP 実行ファイルと同じディレクトリ内のすべてのディレクトリとファイルの情報を一覧表示します。

知識ポイント: exec はシステムの外部コマンドを実行するときに結果を出力しませんが、結果を取得したい場合は 2 番目のパラメーターを使用して出力できます。この配列は、1 つのレコードが 1 行の出力を表します。つまり、出力結果が 20 行ある場合、この配列には 20 レコードが含まれるため、異なるシステム外部コマンドの呼び出し結果を繰り返し出力する必要がある場合に使用します。混乱を避けるために、各システム外部コマンドの結果を出力することをお勧めします。 3 番目のパラメータは、コマンド実行のステータス コードを取得するために使用されます。通常、実行が成功した場合は 0 が返されます。

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

プロトタイプ: function system(string $command,int[optional] $return_value)
1
2
3

system("dir");
?>

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

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

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

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

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

echo `dir `;
?>

知識ポイント: このメソッドを使用して外部システム コマンドを実行する場合は、shell_exec 関数が使用可能であることを確認する必要があります。そうでない場合、このバックティックを使用して外部システム コマンドを実行することはできません。 。

安全上の注意

これらの関数を使用してコマンドを実行する場合、ユーザーがデータを実行コマンドとして送信する場合は、escapeshellcmd() 関数とscapeshellarg() 関数を使用して、ユーザーがシステム上でコマンドを悪意的に実行することを防ぐことができます。 () は実行されたシステム コマンド、escapeshellarg() は実行されたシステム コマンドのパラメータです。これら 2 つのパラメータは、addslashes() の関数に似ています。

その他の命令

実行コマンドの戻り結果が非常に大きい場合、戻り結果を別のファイルに出力し、そのファイルを個別に読み取ることを検討する必要がある場合があります。これにより、パフォーマンスが大幅に改善される可能性があります。プログラム実行の効率化。つまり、
1
2
3

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

説明:ここでシステムがコマンドを実行すると、結果がブラウザに直接出力されるのではなく、指定されたディレクトリ内のファイルに出力されるため、プログラムの実行効率が大幅に向上します。

この時点で、PHP でコマンドを実行するために最も一般的に使用される 4 つのメソッド、exec()、passthru()、system()、shell_exec() とそれらの違いが紹介されました。これらは、適切に使用できます。これらの関数は、システムの外部でコマンドを実行する場合に非常に役立ちます。

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


------解決策---------
PHP コード
 $sendmsg ="c:\wamp\www\FlowServer\sendmsg\testbin\Debug\test.exe"; <div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート