PHPからWindowsへのバックグラウンドプロセスの実行

* nixでは、バックグラウンドプロセスの起動は、コマンドにアンパサンド(&)を追加するだけで実行されます。 Windowsでは、PHPからこれを行うのはそれほど簡単ではありません。



PHPでexec、system、passthru、shell_execなどのシステムコール関数を使用すると、これらのメソッドは、呼び出されたプロセスの完了を待機しているプログラムをフリーズします。



以下で説明する方法は、PHP-CLIを使用していることを前提としています(コマンドラインからphpを操作する)。 WebサーバーでPHPを実行するには、safe_mode、safe_mode_exec_dirなどの正しい設定とアクセス権が必要です。



たとえば、PHPからcmdを呼び出したいが、プログラムがアクションを実行し続けるようにします。

以下の例は機能しません。

exec( "cmd");

exec( "cmd> NUL");

exec( "cmd / c cmd");

exec( "start / b cmd");

exec( "runas cmd");



いずれの場合も、PHPはcmdが閉じるまで待機します。



exec()関数の PHPドキュメントへのコメントで言及されているいくつかの回避策があります。



これらの方法の概要を優先順に示します。



popenとpcloseを使用してプロセスを開始する



このコードは、LinuxおよびWindowsで動作するはずです。

$ exe = "cmd.exe";

pclose(popen( 'start“ bla” "'。$ exe。 '"'。escapeshellarg($ args)、 'r'));



WScript.Shellオブジェクトを使用してバックグラウンドプロセスを開始する



このコードはWindowsでのみ機能します。

$ WshShell = new COM( "WScript.Shell");

// cmdを最小化して実行します

$ oExec = $ WshShell-> Run( "cmd"、7、false);

//バックグラウンドでcmdを実行します。タスクバーアイコンは表示されません

$ oExec = $ WshShell-> Run( "cmd / C dir / S%windir%"、0、false);



msdnの Run()メソッドの詳細をご覧ください。



PsExecユーティリティを使用してバックグラウンドプロセスを開始する

この方法では、 Sysinternalsから無料のPsToolsユーティリティをインストールする必要があります

exec( "psexec -d cmd.exe");



このテキストルート{Dog} imcms.ruの作成者は、招待を送信できます。



All Articles