2

私はこのようなものを持っています:

<?php
  $perform_check = 1; #Checks data with ID : 1
  while(true)
  {
    #code
  }
?> 

ただし、このプロセスで一部のデータを更新する必要があります。このデータを別のドキュメントから更新することは可能ですか?

私はこのようなことを試しました:

index.php

<?php
  setcookie("data", 19, time()+3600);
?>

loop.php

<?php
  while(true)
  {
    if($perform_check!=$_COOKIE[data]) $perform_check = $_COOKIE[data];
    #rest of code
    flush();
    sleep(0.3);
  }
?>

しかし、うまくいきません。私も試し$_SESSIONましたが、ページがクラッシュしsession_start()ます。

それはどういうわけか可能ですか?

4

6 に答える 6

2

PHP が Web サーバー (Apache2 など) を介して応答を送信する場合、Cookie はHTTP ヘッダーとして送信されます。

すべての HTTP ヘッダーは、出力の前に送信されます。何かを出力すると、出力の前にヘッダーが送信されます ( set-cookie ヘッダーを含む)。

flush()初めて Cookie やその他のヘッダーを設定することはできません。

進行状況インジケーターまたは更新が必要な場合は、javascript を使用して行っている操作を開始し、一定間隔でポーリングを行う必要があります。ループのあるプロセスでは、進行状況を共有メモリ、ファイル、またはデータベース (この優先順) に保存し、javascript 進行状況チェック/更新チェックによって開始されたプロセスを使用してそのデータを読み取る必要があります。

于 2012-06-07T16:52:37.963 に答える
1

ファイルの存在を使用して、プロセスの終了にフラグを立てることができます。たとえば、ロックファイルを作成します。

$lock_file = <some unique name>
fopen($lock_file, 'w') or die("can't open file");
while ( file_exists($lock_file)) {

.
.
doStuff();
.
.

}

ファイルが他のプロセスによって削除された場合、ファイルは終了するはずです。

于 2012-06-07T16:23:01.567 に答える
1

while ループはここでは役に立たないと思います。php websocket の実装を調べる必要があります。Websocket を持ち、ユーザーとのオープンな接続を確立するのは、PHP での実装です。それがあれば、両側のリスナーで物事を管理できます。

于 2012-06-08T13:18:48.263 に答える
0

コードがループしている間に値を変更したい場合は、ループ前ではなく、ループ内で値が変更されたかどうかを確認する必要があります。

Cookie またはセッションは、同じユーザー/ブラウザーが両方のスクリプトを実行している場合にのみ機能します。ファイルまたはデータベースへの書き込みは、より一般的なアプローチです。

于 2012-06-07T16:10:15.360 に答える
0

あなたが本当にここで何をしたいのかよくわかりません..しかし、私はあなたがこれを行うことができると思います..

<?php
  $perform_check = 1; #Checks data with ID : 1
  while(true) : ?>
    $.ajax({
        type:'post',
        data: //your data to be passed to ajax script..
        url: //the script wherein you want to run the query..
        onSuccess: function(data) {

             if(data==test) {
             //if you have data that you want then you could stop the loop
              <?php $perform_check = false; ?>

             }

        }
    });
  <?php endwhile: ?>

お役に立てれば。

于 2012-06-07T16:16:33.270 に答える
0

非常に頻繁にチェックする必要がある場合は、チェックに使用する関数を呼び出す CRON を使用する必要があります。

于 2012-06-07T16:17:46.900 に答える