簡體   English   中英

在 for(;;) 循環中啟動會話時 Apache 崩潰(長輪詢)

[英]Apache Crash on session start in for(;;) loop (long polling)

代碼:

<?php

header('Content-Type: application/json; charset=utf-8');
set_time_limit(0);
clearstatcache();
require 'pdo.php';

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

$user_id = isset($_SESSION['user_id']) ? (int)$_SESSION['user_id'] : null;
$user_id_token = isset($_SESSION['user_id_token']) ? $_SESSION['user_id_token'] : null;

if (empty($user_id) and empty($user_id_token) and !is_numeric($user_id)) {
    $arr = array();
    $my = array(
        "stats" => "Disconnected"
    );
    $arr[] = $my;
    echo json_encode($arr);
    exit();
}

$stmt0 = $pdo->prepare(code);
$stmt0->execute();
$rows0 = $stmt0->fetch(PDO::FETCH_ASSOC);
$arr = array();

if (!isset($_GET['lastId']) or empty($_GET['lastId'])) {
    $my = array(
        code
    );
    $arr[] = $my;
    echo json_encode($arr);
    exit();
}

for (;;) {
    $lastId = isset($_GET['x']) ? (int)$_GET['x'] : null;
    $stmt1 = $pdo->prepare(code);
    $stmt1->bindParam(code);
    $stmt1->execute();
    $stmt = $pdo->prepare(code);
    $stmt->bindParam(code);
    $stmt->execute();
    if ($stmt->rowCount() > 0) {
        while ($rows = $stmt->fetch(PDO::FETCH_ASSOC)) {
            $my = array(
                code
            );
            $arr[] = $my;
        }

        echo json_encode($arr);
        break;
    }
    else {
        continue;
    }
}
?>    

當代碼轉到 for (;;) {

我不知道這里到底發生了什么:

$stmt1 = $pdo->prepare(code);

據我了解,這個“代碼”在循環的下一步中不會改變。 這意味着,如果您的 $stmt->rowCount() 第一次返回 0,則代碼會一次又一次地無限嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM