PHP文件包含函数

0x00 include() 、require()语句包含并运行指定文件。

这两结构在包含文件上完全一样,唯一的区别是对于错误的处理。

  • require()语句在遇到包含文件不存在,或是出错的时候,就停止即行,并报错。
  • include()则继续即行。

    Eg:

    1
    2
    3
    4
    include('hello.php');
    echo 'include test final!';//include报错,但是会继续执行,显示:include test final!
    require('hello.php');
    echo 'require test final!';//require报错,停止代码的执行。
  • 总结

1.include() 产生一个警告
2.require() 则导致一个致命错误

  • 如果你想在丢失文件时停止处理页面,那就别犹豫了,用 require() 。
  • include() 就不是这样,脚本会继续运行(同时也要确认设置了合适的include_path)。

注意:require() 无论如何都会包含文件,而include() 可以有选择地包含:

1
2
3
4
5
6
7
8
<?php
if(FALSE){
require('x.php');
}
if(FALSE){
include('s.php');
}
?>

上面的代码中:x.php 一定会被包含,而 s.php 一定不会被包含。

##0x01 二种方式提供不同的使用弹性:

require 的使用方法如 require("MyRequireFile.php"); 。这个函式通常放在 PHP 程式的最前面,PHP 程式在执行前,就会先读入 require 所指定引入的档案,使它变成 PHP 程式网页的一部份。

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

0x02 使用语法和简介

1、include()

语法:include(/path/to/filename)

include()语句将在其被调用的位置处包含一个文件。包含一个文件与在该语句所在位置复制制定文件的数据具有相同内容的效果。

使用include()时可以忽略括号。

可以根据条件来执行include()语句。在条件语句中使用include()有个怪现象,它必须包围在语句块大括号中,或者用其他语句包围符括起来。

2、include_once()

语法:include_once(filename)

  • include_once() 语句在脚本执行期间包含并运行指定文件。
  • 此行为和 include() 语句类似,唯一区别是include_once()会先判断一下这个文件在之前是否已经被包含过,如已经包含,则忽略本次包含。
  • include_once() 应该用于嵌套包含的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

小结:include_once()函数的作用与include相同,不过它会首先验证是否已经包含了该文件。如果已经包含,则不再执行include_once。否则,则必须包含该文件。除了这一点与include完全相同。

3、require()

语法:require(filename)

  • require()在很大程度上与include相同,都是将一个模板文件包含到require调用坐在的位置。
  • require和include之间有两点重要的区别。首先,无论require的位置如何,制定文件都将包含到出现require的脚本中。

    例如,即使require放在计算结果为假的if语句中,依然会包含指定文件。

4、require_once()

语法:require_once(filename)
require_once() 语句在脚本执行期间包含并运行指定文件。此行为和 require() 语句类似,唯一区别是require_once()会先判断一下这个文件在之前是否已经被包含过,如已经包含,则忽略本次包含。
require_once() 应该用于嵌套包含的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

小结:随着网站越来越大,可能会出现重复包含某些文件。这也许不是问题,但又是修改了所包含文件的变量后,却由于后面再次包含原来的文件而被覆盖,可能不希望出现这种情况。还可能出现另一个问题,即所包含文件中函数名的冲突。使用require_once就可以解决这些问题。
require_once函数确保文件只包含一次。在遇到require_once后,后面再试图包含相同的文件时将被忽略。

0x03 区别总结

1、include()与require()语句区别。
两者区别:这两种结构除了在如何处理失败之外完全一样。

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

2、include_once()、require_once()与include()、require()的区别

include_once()require_once()一样,应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。这就是include_once()和require_once()与include() 和require()的主要区别。

0x04 需要注意的问题

1.路径问题

特别是嵌套包含的时候,一定得注意包含文件的路径。
比如 A文件包含了B文件,B文件包含了C文件,A,B,C文件都不在同一个文件夹下,这个时候往往很容易出错误。
解决方案:可以使用 dirname(FILE) 语句,这句的意思是获得当前脚本的绝对路径。如:

1
require_once(dirname(FILE).'/config.php');

2.效率问题

include_once(),require_once(),与include(),require()比较,效率要低一些,因为他们至少得先判断一下这个文件是否已包含。这一问题在PHP5版本有很大改进,不过效率还是有差别。