PHPExcel导入文件超时的解决方法
目前,PHPExcel是完成将xls或xlsx的数据导入到平台的主流方式,但是在使用PHPExcel导入文件时,经常会因为数据量太大而导致超时。对于PHPExcel导入文件超时的问题,网上有很多说法,但总结得不够完整。这里分享一下小卓的经验,如果你有服务器的管理权限,修改好下面的三个设置来增加超时限制就可以解决大部分导入超时的问题。
一、修改php.ini文件
如果你想修改PHP脚本的最大执行时间限制从默认的30秒增加到300秒
vim /etc/php5/fpm/php.ini
设置:
max_execution_time = 300
二、修改phP-fpm
这一步不是必须的,仅在你曾经去掉过request_terminate_timeout参数注释才情况下才需要。默认情况下,request_terminate_timeout参数是被注释掉的,此时会取php.ini中max_execution_time参数的值。
如果你曾经去掉过注释那么编辑www.conf文件:
vim /etc/php5/fpm/pool.d/www.conf
设置参数的值:
request_terminate_timeout = 300
三、修改NGINX的配置
例如增加站点example.com的时间限制
vim /etc/nginx/sites-available/example.com
设置:
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 300;
}
如果你想让时间限制对服务器上的所有站点有效,你也可以编辑nginx.conf文件:
vim /etc/nginx/nginx.conf
在http{..}部分增加下面的内容:
http {
#...
fastcgi_read_timeout 300;
#...
}
最后别忘了重新加载PHP-FPM和NGINX:
service php7.0-fpm reload
service nginx reload
OK,如果上面的方法还没有解决到你的导入超时问题,如果你前端有用框架,也可以考虑是不是前端有超时设置。最典型的就是Extjs,默认通过Ext.Ajax发出的请求有30秒的默认超时值。在前端页面可以通过下面标粗体的两种方式修改默认值。其中第一种方式修改的是当前页面的全局默认值,而第二种方式只是修改当前消息请求的超时值。
Ext.Ajax.timeout = 120000; // 120 seconds Ext.Ajax.request({ url: 'page.aspx', timeout: 60000 // 600 seconds });
除了Extjs外,还有其他前端框架也可能有消息交互的默认超时设置,如果你知道的话,可以给小卓留言,以便将相关信息总结到一块。