【问题标题】:Difference between "include" and "require" in phpphp中“include”和“require”的区别
【发布时间】:2011-04-07 17:28:18
【问题描述】:

它们之间有什么区别吗?使用它们是偏好问题吗?使用其中一种会产生任何优势吗?哪个更安全?

【问题讨论】:

  • 始终使用“要求”。 “包含”就像桑拿房的电动门一样方便。
  • @MarcoMariani 怎么会不方便?这可能很清楚,我只是没有看到它。也许是蒸汽?
  • 简单地说,如果错误地丢失了'foo.php'文件,我想尽快知道,而不是何时调用应该在foo.php中的函数。将 include 替换为 require 通常会发现错误。假设缺少 config.php,并且应用程序正在使用默认配置运行。哪个更安全?至于桑拿,当我在里面,门因为某种原因打不开时,我不喜欢它。

标签: php include require


【解决方案1】:

require 如果文件无法加载,将抛出 PHP 致命错误。 (执行停止)

include 如果无法加载文件,则会产生警告。 (继续执行)

这是一个不错的illustration of include and require difference

发件人: Difference require vs. include php (by Robert; Nov 2012)

【讨论】:

  • 链接失效
  • 不需要插图的链接。 ;)
【解决方案2】:

您可以在the page of require 上的详细 PHP 手册中找到解释的差异:

requireinclude 相同,但失败时也会产生致命的 E_COMPILE_ERROR 级别错误。换句话说,它会停止脚本,而 include 只会发出一个警告 (E_WARNING) 允许脚本继续。

查看@efritz's answer 示例

【讨论】:

  • tiposaurus.co.uk/2011/04/04/… "require() 和 include() 之间的主要区别在于,如果你 require() 一个无法加载的文件(例如,如果它不存在),那么它会生成一个致命错误,它将完全停止页面的执行,并且不会产生更多的输出。另一方面,如果你包含()一个无法加载的文件,那么这只会产生一个警告并继续构建页面。”
  • "你应该使用什么取决于具体情况;require() 最适合加载对页面其余部分至关重要的文件——例如,如果你有一个数据库驱动的网站,那么使用 require () 包含一个包含数据库登录名和密码的文件显然比使用 include() 更可取。如果在这种情况下使用 include(),那么最终可能会产生比预期更多的警告和错误。"
  • <?php if (isset($flibbertygibbet)) require 'file.php'; 似乎使这个答案看起来完全不正确。否则,即使条件不正确,我也会收到致命错误。 strace 没有显示 PHP 甚至试图触摸 file.php
  • 与 include() 不同,require() 将始终读取目标文件,即使它所在的行从未执行。如果要有条件地包含文件,请使用 include()。 AND 然而,如果发生 require() 的那一行没有被执行,那么目标文件中的任何代码都不会被执行。好像在说反话,还是我误会了?
  • 所有这些 cmets 都指的是该答案在编辑之前的原始版本。最初有一个无效声明,声称if (false) require 'file.php'; 会导致加载“file.php”(但不执行)。 TLDR 忽略所有这些 cmets。
【解决方案3】:

如果您不介意脚本在不加载文件的情况下继续执行(以防文件不存在等)并且您可以(尽管您不应该)忍受显示的警告错误消息,请使用 include

使用require 意味着如果您的脚本无法加载指定的文件,它将停止,并抛出一个致命错误。

【讨论】:

    【解决方案4】:

    include()require() 之间的区别在于找不到包含的文件:include() 将发布警告 (E_WARNING) 并且脚本将继续,而 require()将释放致命错误 (E_COMPILE_ERROR) 并终止脚本。如果包含的文件对于正确运行脚本的其余部分至关重要,那么您需要使用require()

    更多详情:Difference between Include and Require in PHP

    【讨论】:

      【解决方案5】:

      正如其他人指出的那样,唯一的区别是 require 会引发致命错误,并包含 - 一个可捕获的警告。至于使用哪一个,我的建议是坚持包含。为什么?因为您可以捕获警告并向最终用户提供有意义的反馈。考虑

        // Example 1.
        // users see a standard php error message or a blank screen
        // depending on your display_errors setting
        require 'not_there'; 
      
      
        // Example 2.
        // users see a meaningful error message
        try {
            include 'not_there';
        } catch(Exception $e) {
           echo "something strange happened!";
        }
      

      注意:例如 2 要工作,您需要安装错误到异常处理程序,如此处所述http://www.php.net/manual/en/class.errorexception.php

        function exception_error_handler($errno, $errstr, $errfile, $errline ) {
           throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
        }
        set_error_handler("exception_error_handler");   
      

      【讨论】:

      • 在包含级别不是了解您期望的文件不存在的好地方。您的示例中的任何一个问题都不会影响您的网站查看者。
      【解决方案6】:
      <?PHP
      echo "Firstline";
      include('classes/connection.php');
      echo "I will run if include but not on Require";
      ?>
      

      一个非常简单的带有代码的实用示例。 将显示第一个回声。无论您使用 include 还是 require,因为它在 include 或 required 之前运行。

      为了检查结果,在代码的第二行故意提供错误的文件路径或文件名错误。因此,是否显示第二个回显将完全取决于您是使用 require 还是 include

      如果您使用 require,第二次回显将不会执行,但如果您使用 include,无论出现什么错误,您都会看到第二次回显的结果。

      【讨论】:

        【解决方案7】:

        如果 Include 程序不会终止并在浏览器上显示警告,另一方面 Require 程序将终止并在找不到文件的情况下显示致命错误。

        【讨论】:

        • 您真的必须提出一个 2 1/2 岁的问题才能重复 2/3 的答案已经说过的话...?
        • 哇,他是个新手!可能还不明白 SO 的概念。
        • 可怜的用户2069222,现在他离开了SO :'(
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-03
        • 2010-10-10
        • 2010-09-24
        • 2011-01-25
        相关资源
        最近更新 更多