可能是你在这里遇到了竞争条件.
它基本上用于例如在内存的关闭函数中触发FATAL,以及在超时触发关闭函数时使用FATAL:
register_shutdown_function(function() {
# consume all memory
echo "break my pain\n";
$a = ['hello'];
while($a[] = $a);
});
set_time_limit(1);
while(1) usleep(100);
它也可以反过来工作,首先触发内存的FATAL,然后在关闭函数中触发超时的FATAL:
register_shutdown_function(function() {
set_time_limit(1);
while(1) usleep(100);
});
ini_set('memory_limit', '1');
$a = array_fill(0, 1024, 'hello');
while($a[] = $a);
这还没有100%解释Codeigniter中发生了什么,但是我会说查询花费的时间太长因此在返回触发执行时间限制之后也是如此.由于您的旧版PHP版本,这有点难以重现.如果我现在评估PHP代码,我会收到代码被评估的消息,以及我在哪一行找到eval命令(PHP 5.4).尝试使用PHP 5.4重现以获取更多信息.自PHP 5.2以来我们所看到的速度提升也将大大受益.你错过了很多.
早些时候:
Fatal error: Maximum execution time of 300 seconds exceeded in Unknown on line 0
这闻起来像一个启动错误.
什么引发了你的第一个错误很难说,你切断了它.要么你在这里得到了eval’ed代码,这些代码可能是通过APC部分处理的,你可以在同一个脚本中看到两个致命错误.
但是,如果您可以重现它,请尝试不使用APC.如果仍然可以,请在PHP bugtracker中报告.
如果你不能,请用APC bugtracker报告问题.
编辑:只是看到PHP 5.2.6,您可能需要报告并修复它自己的;) – 尝试使用当前稳定的PHP版本再现.