【Day26】include require include_once require_once 的区别深度总结

这个问题遇到过很多次了,今天在这里再总结一次。

引用文件的方法有两种:require 及 include。

require 的使用方法如 require("file.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

include 使用方法如 include("file.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

_once 后缀表示已加载的不加载.

1.报错 include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码 require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。
当要加载的文件不存在时候, include会给一个warning警告, 然后继续运行. 而require则会给一个fatal error, 直接结束脚本。
php手册里面是这样说的:
    require() 和 include() 除了怎样处理失败之外在各方面都完全一样。include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果想在丢失文件时停止处理页面,那就别犹豫了,用 require() 吧。include() 就不是这样,脚本会继续运行。

注:在 PHP 4.3.5 之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。

2条件引用

include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数, 例如下面例子,如果变量$somg为真,则将包含文件somefile.php:
if($some){
  include 'somefile.php';
}
但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:
if($something){
  require 'somefile.php';
}

下面的例子充分说明了这两个函数之间的不同

$i = 1;

while ($i < 3) 
{
  require "somefile.$i.php";
  $i++;
}
可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,很显然这不我们想要的,可以看出这段代码希望在每次循环时, 将不同的文件包含进来,如果要完成这个功能,只能使用函数include()
$i = 1;
while ($i < 3)
 {
      include "somefile.$i.php";

  $i++;
}



3.require用相对路径的时候



    当A引用B,而B又引用了其他文件C时,C的路径如果是相对路径,则是相对于A的路径,而不是相对于B'

    4.require_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。

    include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 include() 语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。如同此语句名字暗示的那样,只会包括一次。



    5.文件引用方式
include有返回值,而require没有

$login = include(’test.php’);

if(!empty($login))
{
  echo “文件包含成功”;
}else
{
  echo “文件包含失败”;
}



include()执行时需要引用的文件每次都要进行读取和评估。
 require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)。
  可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高, 若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(), 可以给想要包括的文件名设置变量,当参数为 include()时使用这个变量。

对include ,require, include_once,require_once的单独解释:

    1.include() 函数会将指定的档案读入并且执行里面的程序。 

    例如:include('/home/me/myfile'); 

    被导入的档案中的程序代码都会被执行,而且这些程序在执行的时候会拥有和源文件中呼叫到 include() 函数的位置相同的变量范围(variable scope)。你可以导入同一个服务器中的静态档案,甚至可以通过合并使用 include() 与 fopen() 函数来导入其它服务器上面的档案。
    include_once()函数的作用和 include() 是几乎相同的。

    2.唯一的差别在于 include_once() 函数会先检查要导入的档案是不是已经在该程序中的其它地方被导入过了,如果有的话就不会再次重复导入该档案(这项功能有时候是很重要的,比方说要导入的档案里面宣告了一些你自行定义好的函数,那么如果在同一个程序重复导入这个档案,在第二次导入的时候便会发生错误讯息,因为 PHP 不允许相同名称的函数被重复宣告第二次)。
3.require()函数会将目标档案的内容读入,并且把自己本身代换成这些读入的内容。 
这个读入并且代换的动作是在 PHP 引擎编译你的程序代码的时候发生的,而不是发生在 PHP 引擎开始执行编译好的程序代码的时候(PHP 3.0 引擎的工作方式是编译一行执行一行,但是到了 PHP 4.0 就有所改变了,PHP 4.0 是先把整个程序代码全部编译完成后,再将这些编译好的程序代码一次执行完毕,在编译的过程中不会执行任何程序代码)。require() 通常来导入静态的内容,而 include() 则适合用来导入动态的程序代码。
4.如同 include_once()函数,require_once() 函数会先检查目标档案的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。 
个人习惯使用 require() 函数来导入版权宣告(copyrights),静态文字或其它本身不含有变量,或者本身需要倚赖其它执行过的程序才能正确执行的程序代码。例如: 

<HTML>
<HEAD><TITLE>网页标题</TITLE></HEAD>
<BODY>
[一堆内容]
<?
// 导入版权宣告文字
require('/home/me/mycopyright');
?>
</BODY>
</HTML>
另一方面,我通常在程序的开头使用 include() 函数来导入一些函式库或者类似的程序代码: 
<?
// 导入我的函式库
include('/home/me/myfunctions'); 
// 利用之前导入的函式库里面定义好的 PHP 函数执行一些功能
?>
<HTML>
<HEAD><TITLE>网页标题</TITLE></HEAD>
<BODY>
[一堆内容]
</BODY>
</HTML> 
接下来你可能会问一个问题:「这些被导入的档案要放在哪儿呢?」简短的答案是:「放在服务器档案系统里的任何地方都行。」然而,要留意的是如果被导入的档案除了单纯的程序代码片段以外还包含了一些敏感资料,例如连结数据库系统要用到的帐号和密码,那么建议你不要把这些档案放在 Web 服务器的文件根目录之下,因为那样的话他人便可以很容易地窃取到这些资料了。
你可以将这些被包含的档案放在系统的任何一个目录里面,唯一的条件是 PHP 本身用来执行的身分(www,nobody 或者其它身分)必须要有足够的权限能够读取这些档案就可以了。这些档案的扩展名也可以任意取,甚至没有附档名也无所谓。
善用include()和 require()来将网站里面经常需要变动的共享内容做合理的分割,在更新网站内容的时候将会容易进行得多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值