PHP作为Apache模块运行。
脚本以:SET @lastValue=0, @lastItem=0;
它的作用基本上是连接数据库,执行大ini_set('max_execution_time', 300);
查询并循环结果,将它们写入文件并在每次写入后使用显式SELECT
回显“结果正常”
没有flush();
来电。
这是一个由我的同事制作的“测试”脚本,用于备份目的,目的是运行几个小时!我以为我知道脚本执行时间限制,并认为他的脚本会在300秒后超时...... 但事实并非如此!
它是从Web浏览器调用的。页面保持打开状态,我们可以看到实时回显的结果。
为什么不超时? 更奇怪的是,其中一项测试发出了“超过300秒的最长执行时间”但这至少在执行2小时后出现了!
这里发生了什么?在max_execution_time和flush()之间有什么需要理解的,或者浏览器窗口是否保持打开状态?
答案 0 :(得分:8)
正如您在man页面上看到的set_time_limit函数,here您设置的总执行时间仅影响实际脚本。花在数据库查询或任何其他外部调用上的时间不计入(如果操作系统不是Windows)。
答案 1 :(得分:0)
我能想到的唯一可能导致这种情况的原因是PHP是否以安全模式运行。 ini_get('max_execution_time')应该告诉你它是否真的被设置了。
编辑:发现上面的评论。
echo ini_get('max_execution_time'); //说300
如果报告了300,并且您不在Windows上,则@mishu可能是正确的。您的SELECT查询可能需要数小时。