如何在PHP中的无限循环中更新变量


How to update variables while page in Infinite loop in PHP?

我有这样的东西:

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

但是在这个过程中必须更新一些数据,是否可以从另一个文档更新这些数据?

我尝试了这样的事情:

索引.php

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

循环.php

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

但它不起作用。我也尝试了$_SESSION但页面在session_start()崩溃.

有没有可能?

当PHP通过Web服务器(例如Apache2)发送响应时,Cookie作为HTTP标头发送。

所有 HTTP 标头都会在任何输出之前发送。如果输出任何内容,则会在输出之前发送标头(包括 set-cookie 标头)。

首次flush()后,您将无法再设置 Cookie 或其他标头。

如果你想要一个进度指示器或更新,你需要启动你正在使用javascript执行的任何操作,并每隔一段时间进行轮询。在循环过程中,您需要将进度保存在共享内存、文件或数据库中(按此优先顺序),然后使用 javascript 进度检查/更新检查启动的进程读取该数据。

您可以使用文件的存在来标记进程的结束。 例如,创建一个锁定文件,

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

如果该文件被其他进程删除,则应终止。

我认为 while 循环在这里没有任何好处。 你应该研究一下 PHP Websocket 的实现。它是PHP中的一种实现,用于拥有websockets并与用户建立开放连接。如果你有这个,你可以与双方的听众一起管理事情。

如果您希望在代码循环时更改值,则需要检查值是否在循环中更改,而不是之前更改。

仅当同一用户/浏览器同时运行两个脚本时,cookie 或会话才有效。写入文件或数据库是更常用的方法。

我不太确定你在这里真正想做什么......但我想你可以这样做。

<?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: ?>

希望这有帮助。

如果你需要经常检查,你应该使用一个CRON,它调用你用来检查的函数。