私は現在、プロジェクトに取り組んでいます。チャットをしています。
私の目標は、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
、これの動作を変更するオプションがあるかもしれないと思います。