我有一个PHP脚本,它需要至少1000秒的执行时间才能完成。
每次大约265秒后终止,没有错误。由于我使用循环,我测试了迭代次数并且它与此无关,进一步排除了循环中出现错误的可能性。
我已经在php.ini中将max_execution_time设置为10800,并且更改memory_limit也不会影响结果。
请帮忙!我彻底挠了头!
答案 0 :(得分:0)
得到:
set_time_limit(0);
在脚本的开头。这样代码执行除非完成,否则不会超时。
答案 1 :(得分:0)
您检查了日志文件吗?如果您收到错误6或分段错误。然后你的脚本实际上崩溃了php而没有在浏览器上显示任何错误(如果它是浏览器而不是cli)。
如果您在unix上使用apache,那么您应该在/var/log/apache2/error.log
中找到此日志。
否则,您可以通过添加以下行来在.htaccess
中定义日志文件的路径:
php_value error_log "/path/to/somewhere/convenient/php_errors.log"
将路径更改为httpd具有写入权限的位置以及具有读取权限的位置。
答案 2 :(得分:0)
同样的错误发生在我身上。我的一个PHP函数在没有发送到stderr,stdout或任何其他日志文件的任何错误的情况下死亡。
发生了什么事情我正在使用由其他开发人员编写的帮助PHP脚本,该脚本在程序运行的一半时将内存限制设置为512MB。子模块通过在我的脚本处理过程中的某个时刻将错误日志设置设置为静音来中毒井。
您可以通过在循环的每次迭代中打印PHP脚本可用的php系统设置来证明是否发生了这种情况。当下标执行脏行为时,PHP引擎会在垃圾收集器在将来的随机点运行之后抛出一个拟合,然后立即死亡而没有错误。当垃圾收集器正在执行其工作时子模块混乱系统设置时,这是PHP垃圾收集器中的一个错误。
解决方案:编辑php帮助程序子模块,并确保它们不会调整系统设置,因为垃圾收集器正在执行其工作。在PHP系统变量中毒后,PHP解释器会在没有任何错误或输出的情况下发生故障和死亡。
答案 3 :(得分:0)
在PHP上,即使正确指出display_errors和error_reporting,也只能使用Error Control Operators
来隐藏日志错误的唯一方法例如:以下代码将引发致命错误,但是"隐藏"一,它不会出现在日志或浏览器上。
@echo "forgetting the last quote;
因此,将display_errors值设置为On,并将error_reporting设置为取决于您使用的PHP版本(请参阅差异here),并检查您是否使用了" @"代码上的符号。