最近在做Extjs+php的开发,在涉及到导入excel时出现了问题,经过一天的检查终于发现是ajax请求超时的问题,因为要对数据库进行大量的读写操作,同时还得对excel表中的数据进行操作。所以比较耗时。经查资料,解决方案如下,希望对做Extjs配合php同时需要操作excel导入的使用者有所帮助。
php操作超时
在对数据库进行大量数据操作时,会提示操作超时,解决方法如下:
Maximum execution time of 30 seconds exceeded 错误解决方案.
简单总结一下解决办法:
报错一:内存超限,具体报错语句忘了,简单说一下解决办法
利用循环分批导入;
每个循环内部开始处使用sleep(5);语句,做延迟执行,防止服务器内存同一时间占用过多,里面数字据情况修改;
每个循环内部结束地方使用 ob_flush();刷新输出缓冲
flush();将当前为止程序的所有输出发送到用户的浏览器
两者必须同时使用来刷新输出缓冲www.2cto.com
报错二:30秒运行超时的错误(Maximum execution time of 30 seconds exceeded)
解决办法:
方法一,修改php.ini文件
max_execution_time = 30; Maximum execution time of each script, in seconds
把它设置成需要的值就可以了。如果设置成0的话,就是永不过期。
方法二,修改php执行文件
加上
<?
set_time_limit(0);
?>
max_execution_time = 30; Maximum execution time of each script, in seconds
把它设置成需要的值就可以了。如果设置成0的话,就是永不过期。
php提示内存不足:
php中sql查询会抛出错误:Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 4488 bytes)
解答:你的服务器/空间问题。设置服务器或找空间商修改:
PHP对Script记忆体空间限制的缘故。Default 设定为 8MB,而有些以前的 Script,会要求使用超过 8MB 的内存空间,只要加大 8MB 的使用限制即可。
加大 8MB 内存使用限制,方法有二,选其一即可:
方法一(推荐)、修改 php.ini 里的 memory_limit 的设置值 8M 改为 120M:memory_limit = 120M
方法二、在最上层的 PHP Script,加入一行:ini_set("memory_limit","120M");
注:如果扩大到 120M 仍然相同的错误发生,则再加大 120M 限制。
Extjs ajax访问超时:
1:在Ajax请求的时候加:(timeout: 毫秒数)属性
Ext.Ajax.request({
url: 'ExcelAdd.php',
params: { filePath: '......' }
success: someFn,
failure: otherFn,
timeout:
120000,//默认30000 毫秒,30秒
});
2:在js开始时后加:Ext.Ajax.timeout = 120000;
Ext.onReady(function() {
......
Ext.Ajax.timeout = 120000;
//两分钟
......
}
测试后发现,第一种设置无效,第二种设置有效。
php提示内存不足:
php中sql查询会抛出错误:Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 4488 bytes)
解答:你的服务器/空间问题。设置服务器或找空间商修改:
PHP对Script记忆体空间限制的缘故。Default 设定为 8MB,而有些以前的 Script,会要求使用超过 8MB 的内存空间,只要加大 8MB 的使用限制即可。
加大 8MB 内存使用限制,方法有二,选其一即可:
方法一(推荐)、修改 php.ini 里的 memory_limit 的设置值 8M 改为 120M:memory_limit = 120M
方法二、在最上层的 PHP Script,加入一行:ini_set("memory_limit","120M");
注:如果扩大到 120M 仍然相同的错误发生,则再加大 120M 限制。
Extjs ajax访问超时:
1:在Ajax请求的时候加:(timeout: 毫秒数)属性
Ext.Ajax.request({
url: 'ExcelAdd.php',
params: { filePath: '......' }
success: someFn,
failure: otherFn,
timeout:
120000,//默认30000 毫秒,30秒
});
2:在js开始时后加:Ext.Ajax.timeout = 120000;
Ext.onReady(function() {
......
Ext.Ajax.timeout = 120000;
//两分钟
......
}
测试后发现,第一种设置无效,第二种设置有效。