PHP脚本在没有错误的情况下超时结束

PHP脚本在没有错误的情况下超时结束

问题描述:

我有一个PHP脚本,它需要至少1000秒的执行时间才能完成。PHP脚本在没有错误的情况下超时结束

每次大约265秒后终止,没有错误。由于我正在使用循环,因此我测试了迭代次数,并且与循环次数无关,进一步排除了循环中出现错误的可能性。

我已经在php.ini中将max_execution_time设置为10800,并且还更改memory_limit不会影响结果。

请帮忙!我彻底挠了挠头!

+1

你的代码是做什么的?你确定没有错误吗?您是否将错误显示设置为E_ALL?你有没有用'@'操作符来抑制任何错误? – 2012-03-18 18:11:16

+0

确保它不会引发错误。你看过日志文件吗? – Neysor 2012-03-18 18:13:12

+1

你是从命令行,cron作业,web服务器等运行的吗?你有没有尝试过一种不同的调用方法? – dldnh 2012-03-18 18:13:57

你检查了你的日志文件吗?如果您收到错误6或分段错误。然后你的脚本实际上是崩溃的PHP,而不会在浏览器上显示任何错误(如果它是浏览器而不是cli)。

如果您在unix上使用apache,那么您应该在/var/log/apache2/error.log中找到此日志。

否则,可以通过加入这一行定义日志文件的路径.htaccess

php_value error_log "/path/to/somewhere/convenient/php_errors.log" 

更改路径的地方在那里你的httpd具有写权限,并在那里你读取权限。

+1

这个新的错误日志是空白的吗 – 7HUND3RX 2012-03-18 20:16:13

+0

嗯是的我猜想分段错误将保留在HTTP服务器日志文件中。由于PHP已经崩溃。你有没有试过寻找Apache的错误日志?或您使用的是哪个HTTP服务器? – 2012-03-18 21:59:17

+1

服务器日志文件在我获得的Plesk上不被允许。托管服务提供商确认这是由于单个脚本允许使用的最大资源限制。 非常感谢您的时间和帮助! – 7HUND3RX 2012-03-19 14:13:07

得出:

set_time_limit(0); 
在脚本的开头

。以便代码执行不会超时,除非完成。

+0

我想他说他已经排除了暂停。 – 2012-03-18 18:24:21

+0

没有帮助..它是无法贯穿整个10800s的时间.. – 7HUND3RX 2012-03-18 20:25:59

+0

@AshishAgrawal显示您的代码有问题。 – mithunsatheesh 2012-03-19 03:44:24

这同样的错误发生在我身上。我的一个PHP函数在没有任何错误发送到stderr,stdout或任何其他日志文件的情况下死亡。

发生了什么是我正在使用由其他开发人员编写的助手PHP脚本,该脚本将内存限制设置为通过我的程序操作的一半的512MB内存。在处理我的脚本的过程中,通过将错误日志设置设置为无声,子模块中毒了该井。

通过在循环的每次迭代中打印出可用于PHP脚本的php系统设置,可以证明这是否发生在您身上。当下标执行脏操作时,PHP引擎在垃圾收集器将来运行在随机点后抛出适配器,然后立即死亡而没有错误。这是PHP垃圾收集器中的一个错误,当垃圾收集器正在完成其工作时,子模块会混淆系统设置。

解决方案:编辑php helper子模块,并确保它们不会调整系统设置,因为垃圾回收器正在完成其工作。在PHP系统变量中毒之后,PHP解释器会出错并死掉,没有任何错误或以随机间隔输出。

在PHP,以隐藏即使display_errorserror_reporting正确指出记录错误的唯一方法是使用Error Control Operators

例如:下面的代码将引发一个致命错误,但一个“隐藏”一,它不会出现在日志或浏览器上。

@echo "forgetting the last quote; 

所以的display_errors值设置为开,您正在使用依赖于PHP版本的error_reporting(见差异here),并检查是否使用的是在你的代码中的“@”符号。