目录
文件包含
在一个PHP脚本中,去将另外一个文件(PHP)包含进来,合作去完成一件事情。
一、文件包含的作用
- 使用被包含文件中的内容,实现代码共享(重用):向上包含(索要)
- 自己有东西可以给别的文件使用,实现代码共享(重用):向下包含(给予)
向上包含:在当前脚本要用某个代码之前包含的文件(用别人的
向下包含:在自己有某个东西的时候,需要别的脚本来显示(自己代码写完之后包含其他文件) (给别人用
最大的作用为:分工协作,每个脚本做的事情不一样,因此可以通过协作,让多个脚本共同完成一件事情。
二、文件包含的四种形式
- include : 包含文件
- include once : 系统会自动判断文件包含过程中,是否被包含过(每个文件最多被包含一次
- require : 与include相同
- require once:与include once相同
基本写法:
include '文件名';
include ('文件名');//文件名字要能被系统找到(路径问题
##向上包含
//此文件名字为file1.php
<?php
//被包含的文件
$x = 10;
define('gz',103);
?>
//此文件名为file2.php
<?php
include 'file1.php'; //调用与file2.php在同一路径下的file1.php
echo $x , gz;
?>
//这里运行file2.php会有结果
##向下包含
//此文件名字为file3.php
<?php
//被包含的文件
$x = 10;
define('gz',103);
include_once 'file4.php';
?>
//此文件名为file4.php
<table>
<tr>
<td><?php echo $x;?></td>
<td><?php echo gz;?></td>
</tr>
</table>
//这里运行file3.php会有结果。
感觉用法不是很难懂,不作过多解释。
三、文件加载原理
- 在文件加载(include/require)的时候,系统会自动将被包含文件中的代码相当于嵌入到当前文件中
- 加载位置在文件的调用位置。(inluce/require的位置
- PHP中被包含的文件是单独进行编译的。
PHP文件在编译过程中如果有语法错误,就不会执行。
对于第三点的解释:但是被包含文件中有错的时候,系统会在执行到include所在语句的时候才会报错。(这个时候会执行include之前的语句。
四、include与require的区别
4.1include与include_once的区别
include:系统碰到一次就会执行一次;同一文件加载几次就执行几次
include_once:不管加载几次,只执行一次
4.2include与require的区别
本质上都是包含文件,唯一区别在于包含不到文件的时候,报错的形式不一样。
include 包含不存在的文件的时候,虽然会报错,还会执行下面的语句。
require 使用时如果出错,后面的代码不会执行
五、文件加载路径
文件在加载的时候需要指定文件路径才能保证PHP正确的找到对应的文件。
5.1 绝对路径
- 从磁盘的根目录开始(本地绝对路径) Windows:
盘符:C/路径/PHP文件
、Linux:/路径/PHP文件
- 从网站根目录开始(网站角度路径) / : 相对于网站主机名字对应的路径。 eg:localhost/index.php --> E:/server/apache/htdocs/index.php
5.2相对路径
从当前文件夹所在目录开始的路径
./
:表示当前文件夹、../
:上级目录(当前文件夹的上一次文件夹)
<?php
//简单相对路径加载
include'file.php';
include'./file.php';
//复杂相对路径加载
include'../htdocs/file.php';
//绝对路径
include'E:/.../.../.../file.php';
5.3绝对路径与相对路径的区别
- 绝对路径的效率相对较低,但是绝对安全 (路径不会出错
- 相对路径的效率相对较高,但是容易出错 (相对路径可能会出错
六、文件嵌套包含
一个文件包含另外一个文件,这个被包含的文件又包含另一个文件。
嵌套包含的时候很容易出现相对路径出错的问题:相对路径会因为文件的包含而改变。
原因:windows下面的每一个文件夹都有.和//的文件
个人认为:比较不难搞的用相对路径,如果比较复杂的就用绝对路径。(建议熟读./
与../
的含义。
举例: (其中./
表示的当前文件夹是会变的。
![文件包含嵌套出错.PNG](https://i.loli.net/2020/12/19/JhPoUWO1efzDZ7d.png)