2013-02-10 130 views
0

虽然使用此代码使用一个Ajax XHTMLRequest我发现了一个PHP最大执行超时来收集数据Ajax请求最大执行超时

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) { 

我目前还没有看到有问题的代码,任何提示至于什么是错的?

回答

3

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循环不是永无止境的循环。

+0

感谢这个信息,虽然它不是我的问题的解决方案,但我想停止它,如果可能的话会超时,因为它正在继续jQuery调用,因为所有脚本都没有运行。 – 2013-02-10 13:31:04

+0

如果您阅读它,更改max_execution_time将为您解决问题 – Techie 2013-02-10 13:32:14

+0

更改max_execution_time不是一种处理问题的非常有效的方法! – C1D 2013-02-10 13:41:09

0

看来你的两个while循环执行时间太长,数据库中是否有数据分配。

+0

不,只有1,000条记录 – 2013-02-10 13:36:32

+0

现在尝试增加'max_execution_time',然后回显时间和过程的每个部分。看看时间差异,然后寻找花费最多时间的功能并告诉我。 – C1D 2013-02-10 13:46:44