我有一个 php 脚本,它从远程主机获取 mysql 表并将它们插入到本地数据库中。
我需要脚本运行无限长的时间,但它在 60 秒后一直给出 500 服务器错误。
我尝试像这样更改 ini 变量:
ini_set('max_execution_time', 0);
ini_set('max_input_time', -1);
ini_set('default_socket_timeout', 15);
ini_set('mysql.connect_timeout', 15);
set_time_limit(0);
并且还在 php.ini 中设置它们。当打印配置变量时,我可以看到这些更改生效了。但我的脚本在执行 60 秒后一直给出 500。
我错过了什么?
编辑
我不认为这与链接的“重复”问题中建议的任何大小限制有任何关系。这是因为运行此脚本时,我在数据库上得到了截然不同的结果,有时插入 100.000 行,有时插入 300.000 行,而且每次错误几乎都在 60 秒处显示。
我删除了数据库脚本,只运行了 sleep(70) 来查看在上面设置的时间限制下发生了什么,脚本在 60 秒后仍然给出 500 错误。
更新
这很奇怪,如果我将浏览器指向脚本并运行它,它会在 60 秒后停止。但如果我在收到错误之前关闭浏览器,脚本将继续在服务器上运行。
最佳答案
好的,我希望这可以帮助那些遇到同样问题的噩梦的人。
当您长时间运行脚本但没有输出时,就会出现此问题。我只是通过确保脚本每隔几秒输出一些内容来修复它。对我来说是:
$counter = 0;
while($continue === TRUE){ //The long loop
if($counter%1000==0) echo '.'; //write out a dot every 1000 iterations
$counter ++;
//Code...
}
我在这里得到了我的问题的提示: https://serverfault.com/questions/277386/apache-2-2-cgi-timeout-configuration
这是关于如果脚本在几秒内没有输出(对我来说是 60 秒),apache 如何推断超时的内容。
您也许可以在某些配置文件中修复此问题,这样您就不必执行上述操作。
关于php - 1分钟后出现500服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36476823/