在“包含”和“要求”之间的差异

他们之间有什么区别? 正在使用他们的偏好问题? 是否使用其中一个产生任何优势? 哪一个更好的安全性?

您可以在require页面的详细PHP手册中find不同之处 。

requireinclude相同,除非失败,否则会产生致命的E_COMPILE_ERROR级别错误。 换句话说,它将停止脚本,而包含只发出警告( E_WARNING ),允许脚本继续。

请参阅@ efritz的答案为例

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

如果文件无法加载, include会产生一个Warning。 (执行继续)

这是一个很好的例子,包括和要求的区别 :

在这里输入图像描述

来自: 差异要求与包括PHP(罗伯特; 2012年11月)

使用include如果你不介意你的脚本继续不加载文件(如果它不存在等),你可以(虽然你不应该)显示警告错误信息居住。

使用require意味着如果脚本无法加载指定的文件,它将会暂停,并发出致命错误。

require()include()之间的主要区别是,如果你require()一个不能被加载的文件(例如,如果它不存在),那么它会产生一个致命的错误,这个错误将会完全停止页面的执行,不会再有输出。 另一方面,如果include()一个无法加载的文件,那么这只会产生一个警告,并继续构build页面。

正如其他人指出的,唯一的区别是,要求抛出一个致命的错误,并包括一个可捕获的警告。 至于哪一个使用,我的build议是坚持包括。 为什么? 因为您可以收到警告并向最终用户提供有意义的反馈。 考虑

  // 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工作,你需要安装一个错误exception处理程序,这里描述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"); 
 <?PHP echo "Firstline"; include('classes/connection.php'); echo "I will run if include but not on Require"; ?> 

代码非常简单实用的例子。 第一个回显将被显示。 无论你使用包含还是要求,因为它运行之前包括或需要。

要检查结果,在代码的第二行有意提供文件的错误path或在文件名中出错。 因此,第二个显示与否的回声将完全取决于您是否使用requireinclude

如果使用require,则第二个echo将不会执行,但是如果使用include,无论发生什么错误,您都将看到第二个echo的结果。

如果包含程序不会终止并在浏览器上显示警告,另一方面要求程序将终止,并显示致命的错误,如果没有find文件。