2011-12-22 12 views
1

イベントリスナーを作成する必要があります。私は初心者なのでとても親切です:)PHPでイベントリスナーを作成し、XMLコンテンツを待っています

私はpage1.php(phpファイル)です。私はループ内で、ある時点で受け取られるべきいくつかの情報のためにpage2.xml(xmlファイル)をチェックしたい。すべての時間をチェックするか、または5分ごとに待って情報があるかどうかを確認してください。どちらも私のために働く。

数分後に情報が届かない場合は、ループが受信されるまでループを再実行します。それ以外の場合は、前に進み、新しく受信した情報で何かを行います。この部分は問題ありません。イベントリスナー自体です。私はどこでも使用しなければならない機能を見つけることができませんでした。 :(私は、XMLファイルの内容を頻繁にチェックして取得する必要があります。

これを行う機能だけでなく、私が "イベントリスナーphp"を検索したときにたくさん見つけました。

チュートリアル/サンプルコードへの参照/私が探しているキーワードや、私が最初に覚えておくべきことを教えてくださいこれを実行する。

ありがとう!

+0

このファイルはどのように更新されていますか?それはあなたのサーバー上にあり、他のスクリプトはそれを更新していますか、または他のサーバーから引き出していますか?あなたは、サーバー上で長時間実行されているPHPスクリプトや、Webサイト/クライアントからのポーリングについて話していますか? – deceze

+0

このxmlファイルは外部サーバーによって更新されていますが、サーバー上にあります。これはPHPファイルと同じものです。 –

+0

"長期実行PHPスクリプト"や "ポーリング"とは何か、あるいはそれらの違いは何か分かりません。これは基本的に私のxmlファイルを更新する外部APIです。私のPHPスクリプトは、この情報を受け取って何かを実行してから停止するまで実行する必要があります。また、ウェブサイトに出力する必要はありません(ただし可能です)。これは、フォームによってトリガされたPHPページにある可能性があります(それが可能であれば) –

答えて

1

私は次のようでした。

が自動的にデータベースに新しい何かが入って来たたびに保存されて

その後は数分ごとにフィットするデータベースに新しい何かがあるかどうかを確認するためにチェックすることをPHPのループを実行しましたこの新しいイベントのパラメータ(過去数分の時間内に発生したことを含む)私はflush();を使用してからsleep(120);をループに入れて、数分おきにループを継続させ、新しい情報が来るまでbreak();またはdie();にします。

1

さて、まずあなたが使用している用語を理解する必要があります。PHPは、イベント駆動型ではありませんそれは要求主導の言語です。 Webサーバにリクエストが来たら、PHPはそれを解析し、リクエストが返されます。どの時点でも、処理または処理できるイベントが発生していません。独自の "イベントシステム"を実装することはできますが、最終的にはこれはユースケースに伴うものよりはるかに多くの作業になります。

あなたが探しているデータを返すまで、あなたの最良の賭けはAJAXを利用し、PHPスクリプトへのリクエストを継続している可能性が高いです。最終的にはXMLHttpRequest JavaScriptオブジェクトについて学ぶ必要があります。 JavaScriptを使用して非同期リクエストを作成する方法を理解した後、リクエストを繰り返し行う方法については、setInterval()メソッドを参照してください。

非同期リクエストを繰り返し実行できるようになると、AJAXリクエストの送信をトリガーできるWebページを作成する比較的簡単なプロセスになります。


PHPコードにループは必要ありません。ループは効果的に反対側で実行されます。以下のテキストワークフローがあります。

  1. AJAX呼び出しをトリガーしてトリガーするサイトに移動します。
  2. PHPスクリプトに非同期リクエストを行います。
  3. PHPスクリプト内で、XMLファイルを開き、必要なコンテンツがあるかどうかを確認します。
  4. レスポンスをJSONオブジェクトの形式で返します。 1つの応答はデータが更新されなかったことを意味し、もう1つの応答はデータが更新されたことを意味します。
  5. データが更新されなかった場合、応答を解析し、手順(2)から繰り返します。データが更新された場合は、手順(6)に進みます。
  6. データが更新されたという祝賀挨拶を表示するか、データの更新を待っているという通知を表示します。おそらく、あなたは試合の回数を横にすることもできます。
+0

私はajaxの使い方を知っています。私はjqueryのajax機能を他のところで使っています。これはPHPループの一部であるため考えられませんでした。それでは、PHPループの途中からスクリプトを実行するだけですか? –

0

私はこれをPHPで受信トレイパーサーを書くようにしました。あなただけの2つのことを行う必要がありpage1.phpれる

コード:「新しい」何かただのデータの解析 コードを実行するがある場合page2.xmlと からXMLを読んであなたは最良の選択肢がであります。

(Linuxの場合)Cronジョブを5分ごとに実行するように設定します(Cronコマンドは、php /path/to/page1.phpのようなものです)。同様に、Windowsを実行している場合は、スケジュールされたタスクを設定して同じコマンドを実行することができます。 PHPインストールへのフルパスは、環境変数PATHにあることに注意してください。

+0

私はcronjobをpage1.phpのPHPループの一部として実行するように設定できますか?私はこのケースがジョブが無期限に実行される受信トレイのようなものではないと思っています。ユーザーがこのループを起動し、xmlに新しいものがあるまで完全に停止するまで1-5回実行するだけです。それはcronjobで可能ですか? –

+0

@LucyWeatherfordはい、私は 'shell_exec'を使ってcronジョブ(5分ごとに5回実行するジョブを作成して起動する)を管理することが可能でなければならないと思います。 – gremo

関連する問題