我有这样的东西:
<?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,它调用你用来检查的函数。