在大型的Web项目中, include_path是一个模块化设计的根本中的根本(当然,现在也有很多基于autoload的设计, 这个不影响本文的探讨), 但是正是因为include_path, 经
也就有了如下的疑问:
include_path是怎么起作用的?
如果有多个include_path顺序是怎么样的?
什么情况下include_path不起作用?
今天, 我就全面的介绍下这个问题, 先从一个例子开始吧.
如下的目录结构:
在1.php中:
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
ini_set("include_path", ".:path_to_subdir");
require("2.php");
?>
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
require("3.php");
?>
现在, 我的问题来了:
1. 当在root目录下运行1.php, 会得到什么输出?
2. 在subdir下运行上一级目录的1.php, 有会得到什么输出?
3. 当取消include_path中的当前目录path(也就是include_path=”path_to_subdir”), 上面俩个问题又会是什么输出?
PHP中的include_path
PHP在遇到require(_once)/include(_once)的指令的时候, 首先会做如下的判断:
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
要包含的文件路径是绝对路径么?
如果是, 则直接包含, 并结束.
如果不是, 进入另外的逻辑(经过多次调用, 宏展开后进入_php_stream_fopen_with_path)寻找此文件
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
要包含的文件路径是相对路径么(形如./file, ../dir/file, 以下用"目录相对路径代替")?
如果是, 则跳过include_path的作用逻辑, 直接解析相对路径(随后单独介绍)
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
".:path_to_subdir:current_script_dir
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
ini_set("include_path", '');
require("3.php");
?>
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
ini_set("include_path", "/");
require("./subdir/2.php");
?>
复制代码 代码如下:
立即学习“PHP免费学习笔记(深入)”;
require("./3.php");
?>
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号