是ini_set('max_execution_time',0)一个坏主意?
有没有好的理由不把PHP的configurationvariablesmax_execution_time
为0?
一位同事最近检查了一个文件的变化,补充说:
ini_set('max_execution_time', 0);
在将输出返回给用户之前,进行一些复杂处理的页面的默认值太低。
手册指出,设置的主要目的是:
防止写得不好的脚本捆绑服务器。
但是还要指出:
您的Web服务器可以有其他超时configuration,也可能会中断PHP的执行。 Apache有一个Timeout指令,IIS有一个CGI超时函数。 两者默认为300秒。 有关具体详情,请参阅您的Web服务器文档
我们正在Apache下运行,以便超时设置适用。 是否有任何理由不把max_execution_time
全局设置为零? 我主要好奇的是,如果没有将其设置为零,我是否可以忽略这些好处。
冒着刺激你的风险;
你问的是错误的问题。 你不需要一个不偏离默认值的理由,反之亦然。 你需要这样做的理由。 运行Web服务器时,超时是绝对必要的,并且在没有任何理由的情况下禁用该设置本质上与良好实践相反,即使它运行在恰好具有自己的超时指令的Web服务器上。
现在,至于真正的答案; 在这种情况下可能根本就不重要,但是通过设置一个单独的系统是不好的做法。 如果脚本稍后在不同的服务器上以不同的超时运行,该怎么办? 如果你可以肯定地说,它永远不会发生,但好的做法主要是考虑看似不太可能发生的事件,而不是不必要地将完全不同的系统的设置和function捆绑在一起。 这些原则的解雇在软件世界中造成了许多毫无意义的不兼容性。 几乎每一次,他们都是无法预料的。
如果稍后Web服务器被设置为运行一些仅从Web服务器inheritance超时设置的运行时环境,该怎么办? 比方说,你以后需要一个用C ++编写的15年的CGI程序,由一个移到另一个大陆的人来完成,除了Web服务器之外,它不知道任何超时。 这可能会导致需要更改超时,并且由于PHP毫无意义地依赖于Web服务器的超时而不是自己的超时,这可能会导致PHP脚本出现问题。 或者相反,由于某种原因你需要一个较小的Web服务器超时,但PHP仍然需要更高。
将PHPfunction绑定到Web服务器并不是一个好主意,因为Web服务器和PHP负责不同的angular色,应尽可能保持function上的分离。 当PHP端需要更多的处理时间时,它应该是PHP中的一个设置,因为它与PHP相关,而不一定是Web服务器上的其他所有内容。
简而言之,在没有必要的时候,这是不必要地混淆的。
最后但并非最不重要的是,“仍然存在”是正确的。 你至less应该使用set_time_limit()
不是ini_set()
。
希望这不是太光顾和刺激。 就像我说过的,在你的具体情况下可能没问题,但是不要假定你的情况是一个真实的情况。 就这样。 🙂
原因是有一些零以外的价值。 一般的做法是把它缩短到全局,并且长时间工作,比如parsing器,爬虫,翻斗车,导出和导入脚本等。
- 你可以通过内存消耗脚本来停止服务器,破坏其他人的工作,甚至不知道它。
- 发生无限循环时,您不会看到错误,而且诊断将会更加困难。
- 当请求执行时间较长的页面时,这样的站点可能容易被单个用户拒绝