2016-04-01 4 views
2

ながら、私は手元に次のような問題を持っている:PHPファイルのアップデートのための(真の)ループ

私は2つの別々のページにユーザーを持つが、同じテキストファイルにページの入力を保存しています。一方のユーザーは編集中ですが、もう一方のユーザーは編集できません。私はセッションでこのことを把握しており、変更を書き、誰がそれを編集するかはファイルになっています。

作品罰金は、これまでのところ、最終的には出力は、チャットと非常によく似ています。しかし、今、私はユーザーに手動で自分のページを実現させて、ファイルをリロードするようにしています。私がしたいのは、ファイルタイムスタンプが変更されたときにページがリダイレクトを実行するようにすることです(最後のユーザーが編集内容を保存し、別のユーザーがそれを回したことを示すため)。 JavaScriptのショートポーリングを少し見てきましたが、PHPのフィルムタイム機能を見つけて使いやすくなっています。よく、ここに私が持っているものがあります:

while(true){ 
    $oldtimestamp=filemtime(msks/$session['user']['kampfnr'].txt); 
    $waittimer=2; 
    $waittimer++; 
    sleep($waittimer); 
    $newtimestamp=filemtime(msks/$session['user']['kampfnr'].txt); 

    if ($eintragszeit2 > $eintragszeit1){ 
     addnav("","kampf_ms.php?op=akt"); 
     redirect("kampf_ms.php?op=akt"); 
    }} 

理論的には、ユーザーは出力が「ファイルを編集しようとしています」と思っています。これはバックグラウンドでループして、ファイルがすでに更新されているかどうかをチェックし、そうであればユーザーをリダイレクトします。

それはエラーメッセージを超えメモリーで破断するまで実際にこれは頻繁に(私は、共有ホスティングでよ)サーバーもパフォーマンスに影響を与えます。

は、コードで何かが間違っていますか?または、この場合、whileループを使用することは一般的には悪い考えですか?

ありがとうございます!

答えて

2

PHP言語は、唯一のWebコンテンツを生成するために使用される(クライアントがサーバ=>サーバーにリクエストを行う必要なスクリプトを呼び出し、クライアントに応答を返す)する必要があります。 ページがロードされてクライアントに表示されると、接続が閉じられ、インターネットが停止してクライアントに通知されません。

したがって、クライアントは応答を待つことができません。 。無限の時間だけでなく、サーバーは負荷のために重い影響を受けるかもしれません。効果的には本当に悪い考えです。

PHPは双方向通信を行うために使用できません:ちょうど「バックグラウンドで」(直接、効果的にあなたがクライアントに通知するために、外部スクリプトを呼び出すことはできませんが、ありません...)

をクライアントの要求Webページを構築し、彼は何もできません

また、双方向の通信を行うには、クライアント/サーバーのアーキテクチャのために、PHPと "通常の" httpは良くありません(サーバーはクライアントの要求に答えるだけでパッシブになります)

WebSocketプロトコルは、チャットアプリケーションを実行します。

http://socket.io/

https://en.wikipedia.org/wiki/WebSocket

しかし、そのために、あなたは "アクティブ" サーバソリューションを使用する必要があり、そのようnode.jsまたはruby(サーバの能力に依存します)として

phpにとどまっていれば、クライアントはAjaxに10秒ごとにリクエストします。たとえば、phpスクリプトを呼び出すファイルが更新されている場合は、クライアントにメッセージを返信します。しかし、パフォーマンスの低下のため、実際には非推奨のですので、すぐに忘れてしまいます。

関連する問題