2012-02-04 12 views
0

私は以下のことをするためのアイデアを探しています。かなり長い間、特定のアクションを実行するにはPHPスクリプトが必要です。これはCMSの拡張であり、これはPHP以外のものではありません。また、CMSの標準的な手段しか持たない一般の人々が使用する必要があるため、コマンドラインスクリプトにすることもできません。オプションの1つは、スクリプトを頻繁にトリガするcronジョブ(ほとんどの単純なホスティングがあります)を持っているため、長い時間働く代わりに、1つの起動から次の起動まで状態を保存するアクションステップを実行できます。これは完璧ではありませんが、私は他の解決策は見当たりません。スクリプトがそれ自身のサーバにリダイレクトされると、サーバはそれを中断します。他にどんな選択肢がありますか?永遠に動作するPHPスクリプト:)

ありがとうございました!

+1

私たちは、事前に感謝したくありません。事実の後でお礼を言いたいと思います。) – andrewtweber

+0

PHPの機能は一晩中だけ削除されるだけではありません。スクリプトが実行される前にPHPがアップグレードされているため、複雑さに応じてCMSが壊れる可能性が高くなります。 – kba

答えて

2

あなたが話しているのは、クライアントプログラムによる呼び出し、実行、アクションを待っているデーモンまたは長時間実行中のプログラムで、応答を提供してからさらに呼び出しを待っています。

Apache & MySQLの形でおなじみかもしれませんが、とにかくPHPはこの点で大丈夫です。複数のリクエストを処理するために、rawソケットやフォークのサブプロセスで機能する機能はあります同時に。

PHPデーモンはYMMVのツールであると言われていますが、私のような人達は、プロセス間の通信やメモリの漏洩など、unset()呼び出しが過多であっても問題があると言う人もいます。

とにかく、共有ホスティング環境にどのような種類のデーモンも展開することはできません。より良いサーバーパッケージを入手するか、Cronベースのソリューションを採用する必要があります。

Here's a link PHPデーモンの作成について

また、もう1つ注意してください。デーモンは時折クラッシュするので、何か起こっていることについての状態を保存する必要があるかもしれません。誰かが電源コードを使って共有サーバーにアクセスした場合に備えてください:)

+0

ありがとうございます。これは良い選択ですが、広く普及しているソフトウェアの一部になるので、ほとんどの人がPHPデーモンとしてスクリプトを起動することができません。 – AndreyM

+0

それは大丈夫ですが、本質的に '永遠に実行される'プログラムです。ワイドディストリビューションについて考えているなら、Windowsが望ましいプラットフォームであれば、cronをリストから外すことさえできます。 Apacheの内部で長時間実行されているプログラムをエミュレートするいくつかの手法があります(http://moxune.com/blog/2011/04/non-blocking-web-service-processing-in-php/)。最短の短期間のプログラム。 * nixシステムにrootアクセス権を持つ人は誰でも、デーモンを実行/インストールできます。共有ホスティングシステムがソフトウェアのターゲットである場合、cronは確かに行く方法です。 – quickshiftin

+0

はい、私はデーモンが何であるかを知っています。これは、エクステンションをダウンロードしてCMSの標準的な手段(拡張ファイルを選択して「インストール」)を使用してインストールできる人向けでない限り、本当に素晴らしいオプションです。 – AndreyM

1

私はあなたがデーモンそうでない場合、あなたは単にタイムアウトしないと何もによって中断を取得していないことを伝えるために先頭に

set_time_limit(0); 
ignore_user_abort(true); 

を使用することができます。その後、それをcronから呼び出して、毎日または何でもそれを開始します。私は多くの長い処理の毎日の仕事でこれを持っており、それは私にとって素晴らしい作品です。しかし、外界と簡単に会話することはできません(他のスクリプトはそれを照会することができません - もしそれがあなたがPHPサービスを見たいのであれば)。一度実行すれば停止します。その進捗状況をログファイルに出力します。

+0

私もこれを念頭に置いていましたが、ホスティングプロバイダがそのようなスクリプトを検出して中断するためにサーバーを監視しているのだろうかと思います。また、ホスティングプロバイダがあなたが言及したオプションを変更する機能を無効にする手段があるかどうかも疑問です。 – AndreyM

関連する問題