编 写:袁 亮 时 间:2015-12-01 说 明:php文件包含路径问题 一、解决什么问题 1、在某些项目代码中,会出现包含出错问题 2、多次include的时候,会发现不知道包含的到底是哪个文件 3、某些项目代码中,找不到对应include进来的文件 二、前置知识:3种路径 1、绝对路径 linux下,以/开头的路径 window下以盘符开头的,比如c:/ 2、相对路径 以.或者..开头的路径 3、不确定路径 非上述两种情况的都是 三、包含路径include_path 1、这是一个目录列表 2、在php查找文件的时候起作用,主要是以下这些函数 include,require,fopen,file,readfile,file_get_contents 3、查找文件的时候,会根据include_path中的目录列表一个个去找,找到之后中止返回 4、功能类似系统中的环境变量 5、可以通过php.ini或者php代码中进行设置(也可以通过php函数读取) 6、默认值是. 代表当前工作目录(简单来说就是访问的第一个php文件所在的目录) 四、查找要包含哪个文件 1、包含的是绝对路径的文件 与include_path无关,直接引用绝对路径所对应的文件 2、包含的是相对路径的文件 跳过include_path,根据工作路径拼接上相对路径,查找文件,如果有则包含,没有则报错 ps:工作路径即访问的第一个php文件所在的目录 3、包含的是不确定路径的文件 3.1 逐个使用include_path中的目录跟不确定路径拼接查找文件,找到则退出 3.2 如果没有找到,则根据包含语句include所在的文件的目录,拼接上不确定路径查找文件 3.3 如果还是没有,则报错 五、解决方案 1、项目的一个公共文件,通过__FILE__,或者__DIR__(php 5.3后),结合dirname来计算获取项目根目录 2、所有文件包含,均通过项目根目录进行拼接,得到绝对路径,再包含 3、使用不确定路径包含文件 3.1 使用不确定路径,包含当前目录或当前目录的子目录下的文件 3.2 这种方法性能较差,因为必然是经过多次查找才能得到 3.3 而且在项目工作目录出现同名文件,则会出现包含到错误文件的情况 3.4 常见于sdk包,一般情况下少用 参考文档: 1、PHP中require和include路径问题详解 http://www.cnblogs.com/rainman/p/4177302.html 2、PHP手册 http://php.net/manual/zh/ini.core.php#ini.include-path http://php.net/manual/zh/function.set-include-path.php