导入文件在php中主要有以下四种方式,分别为include、requir、include_once、require_once。Include 和require都是把一个页面引入到当前页面。如何理解"引入",就相当于把被包含文件的所有代码,替换include/require那一句,和直接把代码写在include那一句是一样的.
1.include
使用方法如 include("myIncludeFile.php"); ,这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。通过该方式可以把程序执行时的流程简单化。include一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。
例如:
<?php
include 'myIncludeFile.php'; // 现在的条件是test.php不存在
echo 'test include'; // 仍然执行下面的代码
if(FALSE)
{
include 'myIncludeFile.php'; // myIncludeFile.php不会被引入
}
?>
include有返回值,而require没有 ,一个载入语句,如果载入成功,会有返回值,为1,如果载入失败,则返回的是 false(通常不使用该返回值)
2.require
其使用方法如 require("myRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 指定引入的文件,使它变成 PHP 程序网页的一部份。常用函数,亦可以通过该方法将它引入网页中。这个读入并且代换的动作是在PHP引擎编译你的程序代码的时候发生的,而不是发生在PHP引擎开始执行编译好的程序代码的时候(PHP 3.0引擎的工作方式是编译一行执行一行,但是到了PHP 4.0以后就有所改变了,PHP 4.0是先把整个程序代码全部编译完成后,再将这些编译好的程序代码一次执行完毕,在编译的过程中不会执行任何程序代码)
require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require(做了一个实验并不是这样,可能早期php版本会产生这种现象)。
3.include_once
include_once()的作用和include()是几乎相同的,唯一的差别在于include_once()会先检查要导入的档案是不是已经在该程序中的其它地方被导入过了,如果有的话就不会再次重复导入(这项功能有时候是很重要的,比方说要导入的里面宣告了一些你自行定义好的函数,那么如果在同一个程序重复导入这个文件,在第二次导入的时候便会发生错误讯息,因为PHP不允许相同名称的函数被重复宣告第二次)。
4.require_once
一般是放在PHP文件的最前面将文件内容引入,PHP会先将待引入的文件内容引入到本文件中,如果引入失败则不会继续往下执行;如果引入成功,则可正常执行下面的代码。它的使用方式与require差不多,不同的是require_once只会引入一次,如果之前已引入过,则不会再引入!
php文件加载的路径问题,以 include 为例,也适用于其他3个加载语句涉及到文件加载的问题,我们就不的不谈文件的存放路径问题,在操作系统中主要有三种方式表示文件的存放路径,分别是
(1)相对路径:相对路径是指以.开头的路径,如../a/a.php
(2)绝对路径:绝对路径是指以/开头或者windows下的C:/类似的盘符开头的路径。例如:/data1/www/htdocs、C:/data1/www/htdocs
<?php
echo "使用相对路径载入"
include './myIncludeFile.php';
echo "使用本地绝对路径载入":
include _DIR_.'/myIncludeFile.php';
echo '使用网络绝对路径载入';
include $_SERVER['DOCUMENT_ROOT']./myInclude.File.php';
?>
(3)未确定路径:凡是不以.或者/开头、也不是windows下盘符:/开头的路径。例如:a/a.php、common.inc.php
相对路径和绝对路径寻找所包含文件相同,都是按照require中所指定的文件路径去寻找文件,只不过一个参考目录是程序执行入口文件所在目录,一个参考目录是系统根目录。
而未确定路径会首先逐一用php.ini的include_path中定义的包含目录来拼接[未确定路径],找到存在的文件则包含则成功退出,如果没有找到,则用执行require语句的php文件所在目录来拼接[未确定路径]组成的全路径去查找该文件,如果文件存在则包含成功退出,否则表示文件不存在,出错。