ini_set('max_execution_time',0)是个坏主意吗?

ben*_*izi 59 php

是否有充分的理由不将PHP配置变量设置max_execution_time为0?

最近一位同事检查了一个文件的更改:

ini_set('max_execution_time', 0);
Run Code Online (Sandbox Code Playgroud)

在将输出返回给用户之前,对于执行某些复杂处理的页面,默认值太低.

该手册指出该设置的主要目的是:

防止写得不好的脚本捆绑服务器.

但也接着说:

您的Web服务器可能具有其他可能会中断PHP执行的超时配置.Apache有一个Timeout指令,IIS有一个CGI超时功能.两者都默认为300秒.有关具体详细信息,请参阅Web服务器文档

我们在Apache下运行,因此适用Timeout设置.有没有理由不在max_execution_time全球范围内设置为零?我很好奇是否有什么好处我没有把它设置为零.

Tee*_*kin 64

冒着刺激你的风险;

你问的是错误的问题.您不需要有理由不偏离默认值,反之亦然.你需要一个理由这样做.运行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().

希望这不是太过光顾和刺激.就像我说的那样,在你的具体情况下可能没什么问题,但最好不要把你的情况假设成一个真实的环境.就这样.:)

  • 谁是“静止的”,我在哪里可以找到他? (2认同)
  • 很好奇,`ini_set('max_execution_time',...)`和`set_time_limit(...)`有什么区别?我以为他们是一样的。 (2认同)
  • @SalmanAbbas请参阅http://stackoverflow.com/questions/8914257/difference-between-set-time-limit-and-ini-setmax-execution-time-不太完全相同,但看起来足够接近。也许与2010年有所不同? (2认同)

小智 16

原因是有一些非零的价值.通常的做法是让它在全局范围内缩短,并且长时间使用解析器,爬虫,转储器,导出和导入脚本等长工作脚本.

  1. 您可以通过内存消耗脚本暂停服务器,损坏其他人的工作,甚至不知道它.
  2. 你不会看到错误的地方,比方说,发生无限循环,而且诊断起来会更难.
  3. 当请求具有长执行时间的页面时,这样的站点可以由单个用户容易地进行DoSed