【发布时间】:2020-11-07 06:39:35
【问题描述】:
我有一个 PHP 脚本,它使用 require_once 来加载模块。它由 CRON 每小时运行一次并且工作正常自从添加了另一个模块后,它仍然可以在一夜之间正常工作(可能在负载较低时),但在白天经常失败(崩溃)。我在模块中的函数中添加了一些监控代码,以查看它是否失败,并且它肯定是它尝试加载模块的地方。为了确定脚本无法加载模块的原因,我将 require_once 更改为 include_once。出于某种原因,这似乎解决了问题 - 模块中的功能正在执行。谁能解释为什么 require_once 无法加载模块但 include_once 成功?以前有人遇到过这个问题吗?
【问题讨论】:
-
您是否在
require_once周围添加了try {} catch($e) {}以了解问题所在? -
没有看到所有涉及的代码,没有人可以肯定地说。这显然是某个地方的代码错误的结果,因为这两者根本不会自己随意行事。
-
我不会将此与负载联系起来,而是与此脚本的作用联系起来。这是有条件的要求吗?也许当脚本通过 cron 运行时,它会处理一些记录并要求文件执行某些操作。一旦它被处理,另一个执行不需要文件,直到满足某些条件(添加新订单或其他),这在白天发生得更频繁。主要区别在于 include 只会警告包含失败,而 require 将停止执行并出现致命错误 - 所以我会说你的代码仍然无法正常工作,只是对问题不太严格。
-
require/include 在这段代码中 - spl_autoload_register( function( $class ) { require_once CLASSES_DIR . $class . '.class.php'; } );正如我所说,它在一夜之间工作得很好,白天也在工作。由于添加了另一个类,它仍然可以在一夜之间正常工作,但在白天实例化新类时经常崩溃。自从将 require_once 更改为 include_once 后,它一直运行良好。那是唯一的变化。我知道包含类模块是因为正在执行类函数。
标签: php require-once include-once