文件包含
文件包含:在一个PHP脚本中,去将另外一个文件(PHP)包含进来,去合作完成一件事情。
文件包含的作用
- 文件包含的意义:
-
要么使用被包含文件中的内容,实现代码的共享(重用):向上包含(索要) 向上包含:在当前脚本要用某个代码之前包含别的文件
-
要么自己有东西可以给别的文件使用,实现代码的共享(重用):向下包含(给予) 向下包含:在自己有某个东西的时候,需要别的脚本来显示(自己代码写完之后包含其他文件)
最大的作用:分工协作,每个脚本做的事情不一样,因此可以使用协作方式,让多个脚本共同完成一件事情。
文件包含四种形式
在PHP中文件的包含有四种形式(两种大形式)
Include:包含文件
Include_once:系统会自动判断文件包含过程中,是否已经包含过(一个文件最多被包含一次)
Require:与include相同
Require_once:以include_once相同
包含基本语法
include ‘文件名字’;
include(‘文件名字’); //文件名字:路径问题
向上包含(索要):是先包含文件,后使用文件中的内容(向上包含) 向下包含(给予):先准备内容,然后包含另外的文件,在另外的文件中,使用当前的内容
简单例子:test.php中引入temp.php , 两文件位于同一文件夹下:
temp.php
echo '<a href="/index.asp">首页</a> -
<a href="/html/index.asp">HTML 教程</a> -
<a href="/css/index.asp">CSS 教程</a> -
<a href="/js/index.asp">JavaScript 教程</a> -
<a href="/php/index.asp">PHP 教程</a>';
test.php
echo 'dddddd<br>';
include 'temp.php';
效果:
dddddd
首页 - HTML 教程 - CSS 教程 - JavaScript 教程 - PHP 教程
文件包含
- PHP代码的执行流程
- 读取代码文件(PHP程序)
- 编译:将PHP代码转换成字节码(生成 opcode)
- zendengine 来解析 opcode,按照字节码进行逻辑运算;
- 转换成对应的 HTML 代码
文件加载原理
- 在文件加载(include 或者 require)的时候,系统会自动的将被包含文件中的代码相当于嵌入到当前文件中;
- 加载位置:在哪加载,对应的文件中的代码嵌入的位置就是对应的 include 位置
- 在 PHP 中被包含的文件是单独进行编译的
总结:PHP文件在编译过程中有错误,则不执行;但是如果是从外部引入的PHP文件中有错误, 系统会在从上往下执行到该 include 文件所在语句时停止执行。
include 和 require 区别
可以完全理解为Android中的 include
- include 和 include_once 的区别:
include 系统会碰到一次,执行一次;如果对统一个文件进行多次加载,那么系统会执行多次; include_once 只会执行一次;
- 还是上面 temp.php 和 test.php
include 'temp.php';
echo '<br>';
include 'temp.php';
include_once'temp.php';
include_once'temp.php';
效果:
首页 - HTML 教程 - CSS 教程 - JavaScript 教程 - PHP 教程
首页 - HTML 教程 - CSS 教程 - JavaScript 教程 - PHP 教程
其中这两次输出都是由 include 执行的。
require 和 include的区别:本质都是包含文件,唯一的区别在于包含不到文件的时候,报错的形式不一样 include 的错误级别比较轻:不会阻止代码执行
文件加载路径
绝对路径
从磁盘的根目录开始(本地绝对路径)
Windows:盘符C:/路径/PHP文件
Linux:/路径/PHP文件
从网站根目录开始(网络绝对路径)
/:相对于网站主机名字对应的路径
Localhost/index.php -> E:/server/apache/htdocs/index.php
相对路径
从当前文件所在目录开始的路径
)或 ./ 👉表示当前文件夹
../ 👉上级目录(当前文件夹的上一层文件夹)
🌰
//绝对路径
include_once 'E:/server/apache/htdocs/include1.php';
//相对路径加载
//include_once 'include1.php'; //默认当前文件本身
//include_once './include1.php';
//复杂相对路径
//include_once '../htdocs/include1.php';
echo $a;
绝对路径和相对路径的加载区别
- 绝对路径相对效率偏低,但是相对安全(路径不会出问题)
- 相对路径相对效率高些,但是容易出错(相对路径会发生改变)
文件嵌套包含
嵌套包含的时候就很容易出现相对路径出错的问题:相对路径会因为文件的包含而改变(./和../):windows下面,每一个文件夹下都有.和..的文件夹。