0

在使用此代码使用 Ajax XHTMLRequest 收集数据时,我遇到了 PHP Max 执行超时

if(isset($_GET['func']) and $_GET['func'] == 'feed') {
    global $ado;
    $old_msg_id = $_GET['old_msg_id']; 
    $result = $ado->exec("SELECT * FROM `earnings` ORDER BY `id` DESC LIMIT 1");
    while($row = $ado->fetch_assoc($result)) {
        $last_msg_id = $row['id']; 
    }
    while($last_msg_id <= $old_msg_id) {
        $result = $ado->exec("SELECT * FROM `earnings` ORDER BY `id` DESC LIMIT 1");
        while($row = $ado->fetch_assoc($result)) {
            $last_msg_id = $row['id'];
        }
    }
    $response = array();
    $response['msg'] = 'new';
    $response['old_msg_id'] = $last_msg_id;
    echo json_encode($response);
}

我在 error_log 中收到的错误是

PHP Fatal error:  Maximum execution time of 30 seconds exceeded in /ajax.php on line 165

第 165 行如下:

while($last_msg_id <= $old_msg_id) {

我目前没有看到代码有问题,有什么提示有什么问题吗?

4

2 回答 2

4

JS级别

在 AJAX 中,您可以像下面这样发布超时,

       jQuery.ajax({
           url: 'ajaxhandler.php',
           success: function (result) {                               
                returned_value=result;
           },
           timeout: 10000,
           async: false
        });

PHP级别

如果您正在获取 PHP,您可以在 PHP.ini 中更改它

max_execution_time = 30 //make it like 300

其他在您的 PHP 代码中使用set_time_limit

调用时, set_time_limit() 从零重新启动超时计数器。换句话说,如果超时是默认的 30 秒,并且在脚本执行 25 秒后调用了诸如 set_time_limit(20) 之类的调用,则脚本将在超时之前总共运行 45 秒。

还要确保那些 while 循环不是永无止境的循环。

于 2013-02-10T13:27:42.840 回答
0

似乎您的两个 while 循环执行时间过长,数据库中是否有数据分配。

于 2013-02-10T13:35:08.230 回答