使用此代码使用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) {
我目前没有看到代码有问题,有什么问题的提示?
答案 0 :(得分:3)
在AJAX中你可以发布如下所示的时间,
jQuery.ajax({
url: 'ajaxhandler.php',
success: function (result) {
returned_value=result;
},
timeout: 10000,
async: false
});
如果您正在使用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循环不会永远不会结束循环。
答案 1 :(得分:0)
看来你的两个while循环执行时间太长,数据库中是否有数据分配。