2012-12-10 9 views
7

私は現在利用可能なコンテンツからdemenadのepubを生成しようとしています。 残念ながら、epubのコンテンツがたくさんある場合は、httpリクエストが完了するまでに(10分かかる場合があります)、これは理想的ではありません。PHP - 長い実行中のバックグラウンドタスク

私はSafari -

+1

共有Webホストを使用している場合、ホストは長時間スクリプトを実行できない可能性があります。その結果、可能であれば、仕事をチャンクしなければならないかもしれません。 –

答えて

16

長時間実行されるPHPプロセスに注意したいのは、1つのPHPのメモリ効率があまり高くないことです(例として、PHPの100個のint配列が15KBのメモリを消費することがあります)。ほとんどの人はWebサイトでPHPを使用しているにすぎず、そのプロセスは1秒間実行されるため、通常は99%のユースケースでうまくいきます。そのため、メモリは高速化のために犠牲になります。しかし、長時間実行されるプロセス(特にそれらがたくさんある場合)では、これがあなたの最善の解決策ではないかもしれません。

PHPでexec/shell_exec関数が内部的にストリームとして実装されているので、exec/shell_exec関数を呼び出す際には注意が必要です(通常、データを返すためにストリーム上で待機する必要があるため親プロセスでブロックされる可能性があります)。

タスクをバックグラウンドにする1つのオプションは、forkを使用することです。しかし、gearmanphp extensionsも参照)のような適切なジョブマネージャーを使用するか、amqpまたはzmqのようなキューを使用して、これらのタスクをよりきれいに処理することを強くお勧めします。どちらがあなたのユースケースに適しているか、私はあなたに決めるつもりです。

1

することができますを完了するまでに長い時間がかかる可能性がPHPでバックグラウンドタスク/スレッドを実行するための最良の方法は何か - 文書は

利用可能なときに私の質問があるEPUBを生成し、ユーザーに電子メールを送りコマンドを実行します。

$command = 'nohup >/dev/null 2>&1 /your/background/script.php &' 
関連する問題