これまで何度も質問されたことがあるので、少し申し訳ありませんが、私が見つけたすべての答えが私の状況では機能しません。私は根本的に間違ったことをしているのか、それとも不可能なことをしようとしているのか。
Webブラウザ(Windows上で実行されているApache Webサーバーによって提供される)を介してアクセスされるPHPファイルからバックグラウンドプロセスをフォークできる必要があります。フォアグラウンドプロセスを終了する必要があるため、フォークされたプロセスがバックグラウンドで続行されている間、ブラウザーはサーバーの待機を停止します。PHP5.3を使用しています。
私は、さまざまな程度の失敗を伴う多数の提案された解決策を試しました。
shell_exec('D:\php5.3\php.exe sleep.php > out 2>out2' );
コマンドラインから実行した場合でも、ブラウザから実行した場合でも、フォアグラウンドプロセスは、バックグラウンドプロセスが完了するまで完了しませんでした。最後に「&」を追加しても違いはないようです
pclose(popen("start D:\php5.3\php.exe sleep.php","r"));
これはコマンドラインからは正常に機能しましたが、ブラウザからアクセスすると、フォアグラウンドプロセスとバックグラウンドプロセスの両方が終了するのを待ちました。
exec("nohup D:/php5.3/php.exe -f sleep.php > out 2>out2");
これはまったく機能しなかったようです
$commandString = "start /b D:/php5.3/php.exe d:\\webroot\\other\\tests\\sleep.php";
pclose(popen($commandString, 'r'));
コマンドラインで作業し、ブラウザで待機しました
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("D:/php5.3/php-win.exe -f d:\\webroot\\other\\tests\\sleep.php", 0, false);
まったく機能しませんでした-新しいプロセスをフォークしようとするとハングしました。
誰か助けてもらえますか?私は本当に明白な何かを逃していますか?!
タスクをデータベースにキューに入れてバッチで実行できることはわかっていますが、これを可能な限りリアルタイムで実行する必要があるため、キューに入れて最大1回しか実行できないような遅延を発生させたくありません。一分。