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