代码之家  ›  专栏  ›  技术社区  ›  benizi vartec

ini-set(max-execution-time,0)是个坏主意吗?

php
  •  56
  • benizi vartec  · 技术社区  · 15 年前

    有没有理由不设置php配置变量 max_execution_time 到0?

    一位同事最近签入了一个文件的更改,其中添加了:

    ini_set('max_execution_time', 0);
    

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

    手册规定设置的主要目的是:

    防止写得不好的脚本占用服务器。

    但同时也要说明:

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

    我们在阿帕奇下面跑,所以 超时 设置适用。有什么理由不设置吗 最大执行时间 全球归零?我主要想知道在什么时候我忽略了哪些好处 设置为零。

    2 回复  |  直到 13 年前
        1
  •  63
  •   Teekin    15 年前

    冒着激怒你的危险;

    你问错了问题。你不需要一个不偏离默认值的理由,而是反过来。你需要一个理由。在运行Web服务器时,超时是绝对必要的,并且无理由地禁用该设置与良好的实践本质上是相反的,即使它运行在恰好有自己的超时指令的Web服务器上。

    现在,至于真正的答案,在这个特定的情况下,可能根本不重要,但是通过设置一个单独的系统来进行是不好的做法。如果脚本以后在另一台服务器上以不同的超时运行,会怎么样?如果你能安全地说它永远不会发生,好吧,但是好的实践主要是解释看似不可能发生的事件,而不是不必要地将完全不同的系统的设置和功能联系在一起。对这些原则的摒弃导致了软件世界中许多毫无意义的不兼容性。几乎每次都是不可预见的。

    如果以后的Web服务器被设置为运行其他只从Web服务器继承超时设置的运行时环境,该怎么办?比如说,你后来需要一个15岁的CGI程序,它是由一个移动到另一个大陆的人编写的,除了Web服务器之外,没有任何超时的概念,这可能导致超时需要改变,因为PHP毫无意义地依赖于Web服务器的超时而不是它自己的,这可能会引起问题。PHP脚本的LEMS。或者反过来说,出于某种原因,您需要一个较小的Web服务器超时,但是PHP仍然需要更高的超时。

    将PHP功能与Web服务器联系在一起不是一个好主意,因为Web服务器和PHP负责不同的角色,并且应尽可能保持功能上的分离。当php端需要更多的处理时间时,它应该是php中的一个设置,因为它与php相关,而不一定是Web服务器上的所有内容。

    简而言之,这只是在不必要的时候把事情混为一谈。

    最后但并非最不重要的是,“静止”是正确的;你至少应该使用 set_time_limit() ini_set() .

    希望这不是太客气和刺激。就像我说的,在你的特殊情况下可能是好的,但是不把你的情况假定为一个真实的情况是一个好的做法。这就是全部。:)

        2
  •  15
  •   HelloDolly1    13 年前

    原因是要有一个非零的值。 通常的做法是在全球范围内缩短它,并长时间使用诸如解析器、爬行器、转储程序、导出和导入脚本等长时间工作的脚本。

    1. 你可以停止服务器,通过内存破坏其他人的工作 在不知道的情况下使用脚本。
    2. 你不会看到错误 比如说,如果发生了无限循环,就很难诊断了。
    3. 当请求执行时间较长的页面时,单个用户可能很容易对此类网站进行管理。
    推荐文章