PHP函数set_include_path的一点疑问
天蓬老师
天蓬老师 2017-04-10 14:24:25
[PHP讨论组]

set_include_path(get_include_path() . P_S . '.' . P_S . $siteConf['baseDir']);
set_include_path(get_include_path() . P_S . '.' . P_S . $siteConf['libDir']);
set_include_path(get_include_path() . P_S . '.' . P_S . $siteConf['baseDir'] . 'app');

代码如上,P_S即PATH_SEPARATOR

问题:
为什么每个路径前都要加'.'这个呢?

我查了下手册,在评论中有这么一个,这说明加它还是有必要的,但是原因还是未知....

joel at pittet dot ca17-Nov-2010 02:46

Seems set_include_path wasn't working for me.

The problem was i didn't have .: in my include_path
Which seemed to stop the set_include_path().

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
天蓬老师

"."表示当前目录,":"是两个不同的include path值的分隔符。

include_path中不包含".",PHP碰到include($file), require($file)语句时就在当前目录(如果访问的是/var/www/html/my_app/index.php,当前目录就是/www/html/my_app/)寻找$file,直接去其它include_path中寻找。

include_path中加不加"."要看你会不会用相对路径包含当前目录下的文件,PHP引擎并不强求。

真机测试

测试表明,不管是改ini,还是在代码里调set_include_path(),都可以不带"."
图1:ini中设置include_path

图2:ini中不设置include_path,代码中调用set_include_path()

图3:ini中设置include_path,代码中调用set_include_path()

图4:ini中设置include_path(包含当前目录),代码中调用set_include_path()

此外,如果代码中不调用set_include_path(),ini中也不设置include_path,直接echo get_ include_path(),会输出"."

还有,第一次测试的时候,先set_include_path("/var"),再echo get_include_path(),居然什么都没输出,但我再也没能重现这个现象,不确定是不是当时test.php属于root用sudo的缘故(理论上讲不是,但就是没能重现)

延伸阅读

想了解include的更多详情,你可以看我前两周写的一篇文章《细说PHP类库自动加载》:http://weibo.com/1779910713/zg59ehZCd,第二页,第一段。

黄舟

这货估计是直接 set_include_path("/some/path"); 于是在 include(当前目录下的文件) 的时候出错了。

这就类似于在linux下执行当前目录下的文件不用上 ./ 会出错一样。

如果你用了get_include_path() 去拼的话就不需要这样了。你可以把get_include_path()的值echo出来看看,里头已经包含了 "."

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号