0

我在我的 php 脚本中使用 require_once,我想知道编写代码的正确方法,以便在失败时处理错误。

目前,我只使用 require_once('included_file.php'); 我在想用这个:

if (!@require_once('included_file.php')){
//log error, print nice error message, and exit;
}

这是“好的做法”,还是有不同/更好的方法来做到这一点。我已经阅读了这个页面(http://us3.php.net/manual/en/language.operators.errorcontrol.php)并看到了 OR DIE 的使用,但我只是不确定最好的方法。

谢谢!

4

4 回答 4

3

如果require*调用失败,脚本会立即停止,不会执行其他代码。你不能require_once优雅地处理错误。如果PHP 进程失败,您可以配置您的Web 服务器以使用错误页面来处理它。否则,您将不得不基本上使用您显示的代码,但使用include_once. 您不应该使用@来抑制产生的错误,而只是关闭错误显示,以便记录错误。

说了这么多,您应该使用脚本运行所需require*的文件。您甚至不应该编写任何额外的代码来处理这些文件不可用的情况,因为这意味着您的应用程序处于完全不可用的状态。如果所有必需的文件都不存在,应用程序甚至不应该部署到生产服务器,因此不需要任何优雅的错误处理。有些错误你真的想打你的脸;缺少关键文件就是其中之一。

于 2013-06-17T16:01:17.717 回答
1

require_once会触发compilation错误。因此,执行将停止并且自定义日志记录不会同步

请参阅require http://www.php.net/manual/en/function.require.php的文档

require is identical to include except upon failure it will also produce a fatal
E_COMPILE_ERROR level error. In other words, it will halt the script whereas
include only emits a warning (E_WARNING) which allows the script to continue.
于 2013-06-17T15:58:21.277 回答
1

使用 required_once 包含文件意味着如果脚本无法加载给定文件,它将停止执行。在某些条件下使用 require_once 很好。它取决于包含文件的重要性。

于 2013-06-17T16:00:26.793 回答
0

嗯 - 最初的想法是 PHP 已经处理了你想要的 2/3 - 记录致命错误并在所需文件加载失败时退出。听起来真正的问题只是你想要一个“漂亮”的错误页面——这个页面有一个很好的如何设置它的演练——http: //papermashup.com/create-an-error-page -to-handle-all-errors-with-php/

于 2013-06-17T16:02:49.487 回答