是否有充分的理由不将PHP配置变量max_execution_time
设置为0?
一位同事最近检查了一个添加了以下文件的更改:
ini_set('max_execution_time', 0);
对于在将输出返回给用户之前进行了一些复杂处理的页面,默认值太低了。
手册指出该设置的主要目的是:
防止写得不好的脚本占用服务器。
但是接着说:
您的Web服务器可能有其他超时配置,也可能会中断PHP执行。 Apache有一个 Timeout 指令,IIS有一个CGI超时功能。两者都默认为300秒。有关具体详细信息,请参阅Web服务器文档。
我们在Apache下运行,因此适用 Timeout 设置。有没有理由不在全球范围内将max_execution_time
设置为零?我非常好奇当不将其设置为零时,我是否会忽略这些好处。
答案 0 :(得分:63)
冒着刺激你的风险;
你问的是错误的问题。您不需要有理由不偏离默认值,反之亦然。你需要一个理由这样做。运行Web服务器时超时是绝对必要的,并且在没有理由的情况下禁用该设置本质上与良好实践相反,即使它在具有自己的超时指令的Web服务器上运行。
现在,至于真正的答案;可能在这种特殊情况下根本不重要,但是通过设置一个单独的系统是不好的做法。如果稍后在具有不同超时的其他服务器上运行该脚本会怎样?如果你可以肯定地说它永远不会发生,那很好,但是好的做法主要是考虑看似不太可能发生的事件,而不是不必要地将完全不同系统的设置和功能捆绑在一起。解散这些原则是造成软件世界中许多毫无意义的不兼容问题的原因。几乎每一次,它们都是不可预见的。
如果以后将Web服务器设置为运行仅从Web服务器继承超时设置的其他运行时环境,该怎么办?比如说,你后来需要一个15岁的CGI程序,这个程序是由一个移动到不同大陆的人用C ++编写的,除了Web服务器之外不知道任何超时。这可能导致需要更改超时,并且因为PHP毫无意义地依赖于Web服务器的超时而不是自己的超时,这可能会导致PHP脚本出现问题。或者反过来说,由于某种原因,您需要较少的Web服务器超时,但PHP仍然需要更高。
将PHP功能与Web服务器联系起来并不是一个好主意,因为Web服务器和PHP负责不同的角色,并且应尽可能保持功能分离。当PHP方需要更多的处理时间时,它应该是PHP中的一个设置,因为它与PHP相关,而不一定是Web服务器上的其他所有内容。
简而言之,在没有必要的情况下,只是不必要地混淆了这个问题。
最后但并非最不重要的是,“仍然”是正确的;你应该至少使用set_time_limit()
而不是ini_set()
。
希望这不是太过光顾和刺激。就像我说的那样,在你的具体情况下可能没什么问题,但最好不要把你的情况假设成一个真实的环境。就这样。 :)
答案 1 :(得分:15)
原因是有一些非零的价值。 一般的做法是让它在全球范围内缩短,并且长时间用于解析器,爬虫,翻斗车,出口和销售等长期工作脚本。导入脚本等。