2017-07-19 27 views
0

这个简单的测试,调用参数或者set_time_limit 10倍:php的参数或者set_time_limit(0)挂起并抛出HTTP 500

<?php 
echo("<html><head><title>set_time test</title></head><body><h1>set_time test</h1>"); 
for ($i=0; $i<10; $i++) { 
    error_log("Round $i"); 
    set_time_limit(0); echo("<p>$i</p>"); 
} 
echo("</body></html>"); 

挂起永远与错误:

// Fatal error: Maximum execution time of 30 seconds exceeded in .../_set_time.php on line 4 
// Call Stack: 
// 0.0007 231768 1. {main}() .../_set_time.php:0 
// 0.0007 232000 2. set_time_limit() .../_set_time.php:4 

30秒的max_execution_time在值php.ini。如果我将它提高到3000,剧本就会继续旋转。我有AllowOverrideAll作为apache配置中的文档根(假设它很重要 - 它不应该,但仍然)

类似的机器(相同的OS & SW版本,配置非常接近)每次都完美地运行脚本。日志文件不显示。谷歌搜索大多是默默无闻或无关紧要的。似乎有些奇怪的系统/配置怪癖。

想法?

OS: CentOS 6.9
apache 2.2.15
php 5.6 (webtatic RPM:php56w-5.6.30-1.w6.x86_64)

编辑:提交给Xdebug的项目作为错误:https://bugs.xdebug.org/view.php?id=1457

+0

抛出的错误是什么?这看起来像你的代码进入一个无限循环... –

+0

无需调用set_time_limit(0);到for循环。只需将其设置为您的脚本的第一行一次即可。它会将您的脚本时间限制设置为无限。 –

+0

错误(如帖子中显示的)超出了执行时间 - 但正如前面提到的,在php.ini中提高执行时间只会让它永远挂起,主要是第一次调用set_time_limit。循环运行10次($ i <10)。我不需要在循环中调用set_time_limit,该代码只是一个POC来触发我在moodle安装中观察到的行为 - 这种行为挂在这样一个调用上。 –

回答

0

OK,所以罪魁祸首是Xdebug扩展(安装在一台机器上,但不是在其他)。通过删除它(php56w-pecl-xdebug-2.5.3-1.w6.x86_64),不需要的行为就消失了。有点棘手,花费了2天以上的时间才将它缩小到set_time_limit并找到了负责任的扩展。

相关问题