我目前正在开展一个项目。我正在聊天。
我的目标是使用EventSource
来节省资源。我之前在我的主机上使用过它们,JavaScript
和PHP
一切正常。
我目前正在使用XAMPP
服务器来构建我的项目。问题是我需要EventSource
的脚本在完成之前不会停止执行(在30秒内我得到时间限制错误,就是“完成”)。当我重新加载页面时,它不会停止加载,直到触发30秒限制错误。无论我在哪个页面,我都会遇到这个问题。
我的主机上没有这个,所以我想知道PHP中是否有某种设置可以禁用这种行为。
我的剧本是:
require "connect.php";
require "user.php";
date_default_timezone_set("America/New_York");
header("Content-Type: text/event-stream\n\n");
//ini_set('max_execution_time', 1200);
$wait = 1000;
$curr = 0;
$sM = "";
while (1) {
$number = $data["number"];
$query = $mysqli->query("SELECT * FROM(SELECT * FROM `messages` WHERE `to`='$number' OR `from`='$number' ORDER BY `timestamp` DESC) as mess GROUP BY `id`");
$ql = $query->num_rows;
if ($ql == 0) {
echo 'data: null';
echo "\n\n";
exit();
}
if($curr != $ql){
while ($rows = $query->fetch_assoc()) {
$to = $rows["to"];
$id = $rows["id"];
$choose = $to == $number ? $rows["from"] : $to;
$side = $to == $number ? "To You:" : "From You:";
$sM .= "<div class='messageBox sBox' onclick=\"Connect.messages.load($id, $to)\" data-id='$id'><name>$choose</name><div>$side " . $rows["message"] . "</div>";
$q = $mysqli->query("SELECT `id` FROM `messages` WHERE `to`='$number' OR `from`='$number' AND `status`='unread' AND `id`='$id'");
if ($q->num_rows > 0) {
$sM .= "<span>" . $q->num_rows . "</span>";
}
$sM .= "</div>";
}
echo 'data: '. $sM;
echo "\n\n";
$curr = $ql;
}
ob_flush();
flush();
usleep($wait * 1000);
}
基本上这个脚本会一直运行,直到达到时间限制(我知道我可以更改)。但是,当您离开脚本时它不会停止,它仍然在后台运行,因此页面在完成之前不会加载。我最初在WAMP
服务器上安装了这个项目。我认为这是服务器故障。但是在尝试XAMPP
之后,我认为可能有一个选项来改变它的行为。