我正在对我的数据库运行一个巨大的导入(大约20万条记录),并且我的导入脚本超时时出现严重问题。我用我的手机作为秒表,发现每次通过它的时间恰好是45秒(内部服务器错误)......它一次只能做约200条记录,有时甚至更少。我扫描了我的phpinfo(),没有设置为45秒;所以,我对它为什么会这样做一无所知。
我的max_execution_time设置为5分钟,我的max_input_time设置为60秒。我也试过设置set_time_limit(0); ignore_user_abort(1);在我的页面顶部,但它不起作用。
注意我的错误文件:“脚本标头的过早结束”作为执行错误也可能会有所帮助。
非常感谢任何帮助。
答案 0 :(得分:15)
我尝试了此页面上的所有解决方案,当然,还是从命令行运行:
php -f filename.php
布伦特说这是明智之举。
但是如果你真的想要从你的浏览器运行一个脚本,在45秒内因500内部服务器错误(正如我在重建我的phpBB搜索索引时发现的那样)保持超时,那么这是一个很好的这可能是由mod_fcgid引起的。
我有一个Plesk VPS,我通过编辑文件来修复它
/etc/httpd/conf.d/fcgid.conf
具体来说,我改变了
FcgidIOTimeout 45
到
FcgidIOTimeout 3600
3600秒= 1小时。对于大多数人来说应该足够长,但如果需要可以向上调整。我看到一个例子在那里引用了7200秒。
最后,重新启动Apache以使新设置处于活动状态。
apachectl graceful
某人HTH。这已经困扰了我6个月了!
干杯,
富
答案 1 :(得分:0)
您很可能在服务器上达到了强制资源限制,特别是如果服务器不在您的控制之下。
假设它是某种类型的Linux服务器,您可以在命令行上使用ulimit -a
查看资源限制。 ulimit -t
还会向您显示cpu时间的限制。
如果你的cpu是有限的,你可能需要批量处理你的导入。
答案 2 :(得分:0)
首先,如果需要一段时间,您应该从命令行运行脚本。如果没有收到任何内容,您的浏览器至少会在2分钟后超时。
php -f filename.php
但是如果你需要从浏览器运行它,请在导入踢之前尝试添加标题(“Content-type:text / html”)。
如果您在共享主机上,那么当在一段时间后自动终止任何长时间运行的查询和/或脚本时,系统可能会受到限制。对于非Web运行脚本,通常会松开这些限制。因此,从命令行运行它会有所帮助。
答案 3 :(得分:0)
45秒可能是巧合 - 它可能是你达到内存限制所需的时间。增加内存限制将是这样的:
ini_set('memory_limit', '256M');
它也可能是超时的实际数据库连接..您使用的数据库服务器是什么? 对我来说,默认情况下,mssql在超过60秒后超时失败,“数据库上下文已更改”。要解决这个问题,你可以:
ini_set('mssql.timeout', 60 * 10); // 10 min
答案 4 :(得分:0)
First of all
max_input_time and set_time_limit(0)
will only work with VPS or dedicated servers . Instead of that you can follow some rules to your implementation like below