PHP require和include 路径问题
2015-12-09 11:55
603 查看
摘要:在学习ThinkPHP源码的时候,涉及到多个文件嵌套包含的问题,这时文件路径应该怎么确定?将在这里记录。
写在前面:我这里的所有路径(均是服务器绝对路径表示)说明如下:
apache服务器根目录: /home/pi/www/
项目文件根目录: /home/pi/www/mvcTest/2Test/
项目入口文件: /home/pi/www/mvcTest/2Test/index.php
要包含的下一个文件: /home/pi/www/mvcTest/2Test/Framework/Framework.php
再嵌套包含的文件: /home/pi/www/mvcTest/2Test/Framework/Common/function.php
问题在于PHP对于include require文件的解释是这样的:
这就意味着,当index.php被调用的时候,下面两个被引用的文件内容,都被复制到了index.php一个文件里面。
所以:当嵌套的文件里面还需要include/require操作,使用相对路径的话,那么,参考的路径其实是入口文件所在的目录,而不是当前文件所在的目录。
绝对路径的使用比较简单,不容易混淆出错,下面提供一种技巧。
这种东西不用去考虑了,使用上面两种正规方法就够了,不用管这个东西了。
<完>
首先
本文主要参考这篇文章。他讲的很详细,但是对于实用主义者来说,用不了那么多东西,我来讲的简单一些。写在前面:我这里的所有路径(均是服务器绝对路径表示)说明如下:
apache服务器根目录: /home/pi/www/
项目文件根目录: /home/pi/www/mvcTest/2Test/
项目入口文件: /home/pi/www/mvcTest/2Test/index.php
要包含的下一个文件: /home/pi/www/mvcTest/2Test/Framework/Framework.php
再嵌套包含的文件: /home/pi/www/mvcTest/2Test/Framework/Common/function.php
相对路径
相对路径以 ./ 开始(还有 ../ 用的很少),意思是以当前文件所在目录作为参考目录,但是这里有个误区,如果嵌套包含,就会出问题。问题在于PHP对于include require文件的解释是这样的:
include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。
这就意味着,当index.php被调用的时候,下面两个被引用的文件内容,都被复制到了index.php一个文件里面。
所以:当嵌套的文件里面还需要include/require操作,使用相对路径的话,那么,参考的路径其实是入口文件所在的目录,而不是当前文件所在的目录。
绝对路径
绝对路径是使用服务器(机器)文件系统的绝对路径,与apache服务器的根目录没有关系。绝对路径的使用比较简单,不容易混淆出错,下面提供一种技巧。
使用dirname(__FILE__);函数可以获取当前文件所在的绝对路径,然后就可以不用管当前文件的入口文件在哪,使用获取到的路径,再拼接一下字符串就OK了。
未确定路径
即路径前面即不是 ./ 也不是 /这种东西不用去考虑了,使用上面两种正规方法就够了,不用管这个东西了。
<完>
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- kindeditor 批量上传 上传失败 thinkphp swfupload session
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)