0

このコードを使用してAjaxXHTMLRequestを使用してデータを収集しているときに、PHPの最大実行タイムアウトが発生します

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

2つのwhileループの実行に時間がかかりすぎているようです。データベースにデータがたくさんありますか。

于 2013-02-10T13:35:08.230 に答える