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

2023-12-31

有没有充分的理由不设置 PHP 配置变量max_execution_time http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time to 0?

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

ini_set('max_execution_time', 0);

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

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

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

但还继续指出:

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

我们在 Apache 下运行,所以Timeout设置适用。有什么理由不设置max_execution_time全球归零?我主要好奇的是,当我这样做时是否有我忽略的好处not将其设置为零。


冒着激怒您的风险;

你问错了问题。您不需要理由不偏离默认值,但反之亦然。你需要一个这样做的理由。运行 Web 服务器时,超时是绝对必要的,无缘无故地禁用该设置本质上是违背良好实践的,即使它运行在恰好有自己的超时指令的 Web 服务器上。

现在,至于真正的答案;在这种特殊情况下可能根本不重要,但是设置单独的系统是不好的做法。如果该脚本稍后在不同的服务器上以不同的超时运行怎么办?如果您可以有把握地说它永远不会发生,那很好,但良好的实践主要是考虑看似不可能的事件,而不是不必要地将完全不同系统的设置和功能捆绑在一起。对这些原则的忽视导致了软件世界中许多毫无意义的不兼容性。几乎每一次,他们都出乎意料。

如果稍后将 Web 服务器设置为运行其他仅继承 Web 服务器超时设置的运行时环境,该怎么办?举例来说,您后来需要一个由搬到另一个大陆的人用 C++ 编写的 15 年前的 CGI 程序,除了 Web 服务器的超时之外,它不知道任何超时。这可能会导致需要更改超时,并且由于 PHP 毫无意义地依赖于 Web 服务器的超时而不是其自身的超时,这可能会导致 PHP 脚本出现问题。或者反过来,由于某种原因您需要较小的 Web 服务器超时,但 PHP 仍然需要更高的超时。

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

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

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

希望这不会太居高临下和令人恼火。就像我说的,根据您的具体情况可能没问题,但最好不要假设您的情况是唯一的真实情况。就这样。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ini_set('max_execution_time', 0) 是一个坏主意吗? 的相关文章

随机推荐

  • 系列的第 n 项

    我们必须找到这个级数的第n项http oeis org A028859 http oeis org A028859 n 答案应该以 1000000007 为模 我已经编写了代码 但是当 n a 是一个巨大的数字时 时间限制就超出了 incl
  • 其他同步方法

    除了使用synchronized关键字之外 如何在java中同步方法 你可以使用java util concurrent locks封装 特别是Lock接口 Lock l l lock try access the resource pro
  • 在图像控制中以 5 秒时间间隔显示文件夹中的所有图像

    我有一个包含 1000 张图像的文件夹 图像名称的顺序为 ICON000 ICON001 直到 ICON 999 我需要它们以 5 秒的时间延迟按顺序显示在我的 WPF 图像控件中 我使用文件对话框来获取特定文件夹的路径和图像的相应前缀 图
  • JavaScript ES6 类可以与异步代码库一起使用吗?

    什么可以ES6 类 https developer mozilla org en US docs Web JavaScript Reference Classes作为一种组织模式 提供异步代码 下面是一个 ES7 async await 的
  • Bootstrap 导航栏边距

    我想让导航栏内容的左右边距变小 以便 品牌 最左侧的组件 在左侧显示得比默认值更多 右侧组件的情况也是如此 有人可以指出我要修改的相关较少变量吗 Thanks 对于基本布局 您想要的 CSS 选择器是 body gt navbar bran
  • PHP 在 foreach 中通过引用传递[重复]

    这个问题在这里已经有答案了 我有这个代码 a array zero one two three foreach a as v foreach a as v echo v PHP EOL 有人可以解释一下为什么输出是 零一二二 来自 zend
  • Android WebView 中的自定义视频播放器

    我研究了 Android 中的一些浏览器 当用户单击 Web 视图中的 html5 视频标记项时 他们可以使用自定义播放器播放视频 这个怎么做 更具体地说 当用户单击视频标签时 如何获取视频网址以及如何触发我的自定义播放器而不是 Andro
  • 如何在控制台应用程序中使用 TIdUDPServer?

    Indy UDP 服务器组件似乎依赖于 Windows 消息 因为我看到只有当鼠标光标移到包含服务器组件的表单上时才会出现新消息 我使用以下代码在运行时创建了该组件 private Private declarations Srv TIdU
  • SQL Server Compact Edition 是 SQLite 的明智替代品吗?

    除了 SQL Server Compact 中的文件大小限制和仅限 Windows 的使用之外 还有哪些区别 我找到了一个couple https stackoverflow com questions 2278104 sql ce sql
  • Windows 线程:_beginthread、_beginthreadex 与 CreateThread C++

    有什么更好的方式来启动一个线程 beginthread beginthreadx or CreateThread 我正在尝试确定什么是优点 缺点 beginthread beginthreadex and CreateThread 所有这些
  • 为什么 swagger 会引发不清楚的错误 - Django

    我有一个 django Rest 后端应用程序 我使用 swagger 来查看我的 api 并将其记录到 FE 这工作正常 但我做了一些更改 现在出现此错误 Internal Server Error Traceback most rece
  • 无法在 ubuntu 20.04 中安装 g++ 和 build-essentials

    即使在清洁后apt get clean它说有破损的包裹 sudo dpkg l grep r正如 1 中提到的 什么也不返回 sudo apt get install build essential Reading package list
  • MySQL配置不当原因:相对路径的不安全使用

    我正在使用 Django 当我运行时python manage py runserver我收到以下错误 ImproperlyConfigured Error loading MySQLdb module dlopen Library Pyt
  • 使用 Jasypt 和 PBKDF2WithHmacSHA1 密钥进行基于密码的 AES 加密

    我正在工作中实现加密机制 安全人员的要求如下 使用 PBKDF2WithHmacSHA512 秘密密码 256 位盐和最少 20000 次迭代创建 256 位密钥 盐应该使用 SecureRandom getInstance SHA1PRN
  • Java 接口是否可以定义为只有 Enum 可以扩展它?

    我想这样做并没有什么特别的原因 我只是想知道这是否可能 如果有帮助的话 这是一个可以使用它的虚构情况 想象一下一种类型Enum它用作只读数据源 这样每个值Enum包含不同的内容 这Enum实施Readable 现在 假设我们想要一个读取所有
  • 如何处理持久的 http 请求

    我有一个持久的http请求 后端有大量计算 目前 这一切都是同步的 而服务器计算机 浏览器看不到输出 结果 一段时间后 连接断开 浏览器中显示超时错误 我想立即向浏览器返回一些信息 并让它等待结果 如何实现这一目标 请注意 Java 后端是
  • 多个具有相同名称的单选按钮组

    我已经继承了一个动态创建 HTML 的复杂应用程序 问题是 前面的人不知道单选按钮的 名称 属性实际上是组关联 通过以下标记 有什么方法可以将它们分为两组 div div
  • 列出 .gitignore 不忽略的所有文件

    我想列出 gitignore 未忽略的所有文件 即我的存储库的所有源文件 ag默认情况下效果很好 但我不知道有一种方法可以在不安装其他软件的情况下工作 git ls files没有选项几乎可以很好地工作 但没有考虑已修改 创建的文件 例如
  • 如何安装 NODE_MODULE_VERSION 46

    如何使用 NODE MODULE VERSION 46 安装 Node js 版本 我一直遇到 NODE MODULE VERSION 不匹配的情况 并且重新编译没有帮助 因此切换节点版本可能会更容易 基本上 我一直遇到这样的情况 Warn
  • ini_set('max_execution_time', 0) 是一个坏主意吗?

    有没有充分的理由不设置 PHP 配置变量max execution time http www php net manual en info configuration php ini max execution time to 0 一位同