目录
1 文件包含
- 应用背景:程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某个函数时,直接调用此文件,无需多次编写,这种调用文件的过程称为文件包含。
- 普适性:机会所有脚本语言都会提供文件包含功能,本文主要以PHP语言为例进行介绍。
2 PHP文件包含语句简介与测试
2.1 包含语句简介
函数 | 用法差异 |
---|---|
include() | 文件包含失败时,会产生警告,脚本继续运行 |
include_once() | 与include()功能相同,文件只会被包含一次 |
require() | 文件包含失败时,会产生错误,直接结束脚本运行 |
require_once() | 与require()功能相同,文件只会被执行一次 |
2.2 语句功能测试
2.2.1 测试环境
- 本文实验基于WAMP环境进行测试,环境部署过程参考文章《win2008R2SP1+WAMP环境部署》。
- 在该环境网站根目录下,新建文件夹test,在test文件夹下新建以下文件进行实验。
- 直接使用win2008系统上的浏览器来访问不同函数的执行效果。
2.2.2 被包含文件
新建txt文件,输入以下内容,并重命名为inc.php。
<?php
echo "this is inc.php";
?>
2.2.3 include()函数功能测试
- 新建txt文件,输入以下内容,并重命名为include.php。
<?php
echo "<h1>This is include.php!</h1>";
include "./inc.php";
?>
- 浏览器通过URL访问
127.0.0.1/test/include.php
网页,显示如下,可以看到包含语句成功执行。
- 修改include.php文件为以下内容,这是include函数的两种使用方式。
<?php
include ("./inc.php");
echo "<h1>This is include.php!</h1>";
include "./inc.php";
?>
- 浏览器访问
127.0.0.1/test/include.php
该网页,显示如下,可以看到两个语句均成功执行,且执行效果一致;同时也可以看出脚本文件是从上到下依次执行的。
2.2.4 include_once()函数功能测试
- 新建txt文件,输入以下内容,并重命名为include_once.php。
<?php
include_once ("./inc.php");
echo "<h1>This is include_once.php!</h1>";
include_once "./inc.php";
?>
- 浏览器使用URL访问
127.0.0.1/test/include_once.php
网页,显示如下,可以看到包含语句成功执行,但是只执行了一遍。
2.2.5 require()函数功能测试
- 新建txt文件,输入以下内容,并重命名为require.php。
<?php
echo "<h1>This is require.php!</h1>";
require "./inc.php";
?>
-
浏览器通过URL访问
127.0.0.1/test/require.php
网页,显示如下,可以看到包含语句成功执行。
-
修改require.php文件为以下内容,这是require函数的两种使用方式。
<?php
require ("./inc.php");
echo "<h1>This is require.php!</h1>";
require "./inc.php";
?>
- 浏览器访问
127.0.0.1/test/require.php
该网页,显示如下,可以看到两个语句均成功执行,且执行效果一致;同时也可以看出脚本文件是从上到下依次执行的。截至到此,还未展示require函数与include函数的区别。
2.2.6 require_once()函数功能测试
- 新建txt文件,输入以下内容,并重命名为require_once.php。
<?php
require_once ("./inc.php");
echo "<h1>This is require_once.php!</h1>";
require_once "./inc.php";
?>
- 浏览器使用URL访问
127.0.0.1/test/require_once.php
网页,显示如下,可以看到包含语句成功执行,但是只执行了一遍。
2.2.7 测试include函数与require函数的差异
- 修改include.php文件为以下内容,这是include函数的两种使用方式。
<?php
include ("./inc.php");
echo "<h1>This is include.php!</h1>";
include "./inc1.php";
include "./inc.php";
?>
- 浏览器访问
127.0.0.1/test/include.php
该网页,显示如下,可以看到第一和第三个包含语句成功执行,但是第二个报出警告,警告没有终止脚本执行。
- 修改require.php文件为以下内容,这是require函数的两种使用方式。
<?php
require ("./inc.php");
echo "<h1>This is require.php!</h1>";
require "./inc1.php";
require "./inc.php";
?>
- 浏览器访问
127.0.0.1/test/require.php
该网页,显示如下,可以看到第一个包含语句成功执行,第二个执行出错,报错致命错误,程序终止,导致第三个包含语句没有执行。
3 PHP相关配置
3.1 配置文件
PHP的配置文件php.ini中,有allow_url_fopen和allow_url_include两个参数对包含文件功能进行控制。
3.2 allow_url_fopen
- 默认值为
On
。 - 本选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件。默认的封装协议提供用 ftp 和 http 协议来访问远程文件,一些扩展库例如 zlib 可能会注册更多的封装协议。
3.3 allow_url_include
- 默认值为
Off
,开启这个设置项需要先开启 allow_url_fopen 。 - 该选项自 PHP 7.4.0 起废弃。
- 此选项允许以下函数使用具有 URL 感知的 fopen 包装器:include、include_once、require、require_once。
4 总结
- 掌握4种文件包含函数的使用方法;
- 了解PHP配置文件对文件包含功能的限制。