0

我目前正在做一个项目。我正在聊天。

我的目标是使用一个EventSource可以让我节省资源的。我以前在我的主机上使用过它们,并且在JavaScriptPHP.

我目前正在使用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,我认为可能有一个选项可以改变这种行为。

4

0 回答 0