PHP 站点相对包含,路径的问题解决方法(include,require)
以前看了,很多框架,基本上很少使用相对路径包含。而一般很多做php web站点,喜欢用相对路径。 认为这样,无论目录放到那里。 只要跟另外目录关系一致。那么就不会出现问题。如果一个站点,一般都认为,如果用根目录,经常会改变网站地址,觉得很不方便。其实,我们从各大常见框架里面会发现,基本上都是采用是绝对路径方法。
相对路径带来问题
我们有如下结构的目录。
<web>(网站根目录)
├<a>文件夹
│ │
│ └a.php
├<b>文件夹
│ │
│ └b.php
└test.php
如果b.php 包含a.php (include(“../a/a.php”)) ,然后test.php 包含b.php (include(“b/b.php”)) ,我们发现很奇怪问题。
首先访问:b.php 可以正常访问, 然后访问test.php
发现,找不到 a.php了。 这里注意一个问题是:php 默认相对路径都是以,被访问页面所在路径为准的。无论一个入口页面,里面包含多少文件,相对路径,都是以这个页面为准。
如果访问test.php 根路径是:test.php,如果访问b.php 相对路径都以b.php 所在路径为准。刚刚页面test.php 包含了b.php,b.php包含了a.php. 所有包含都以test.php 为准的。
估计刚刚开始php学习朋友,经常遇到这个问题,而且发现经常出现一大堆警告影响大家学习的兴趣。
使用绝对路径方法
各大开源框架基本上采用绝对路径方法,这样可以避免相对路径因为包含访问文件变了。基准路径变化,让包含出现错误了。 所以,我们看看常见方法。
首先将网站基准订到一个固定文件。一般可以用下面方法实现。如:根目录下面有个config.php文件。
<?php
define(‘Root_Path’,dirname(__FILE__));
__FILE__ 至的是当前脚本路径,在那个脚步php里面调用该变量,它的值就是该脚步的绝对路径。
然后,任何其它页面,在做包含时候,只需要包含了该config.php后。
<?php
包含config.php…..
include(Root_Path.”/文件路径”);即可
使用绝对路径好处
使用解决路径好处除了可以在大型项目中,包含时候更准确定位到文件,不易产生错误外。还有另外一个好处,包含文件,性能会得到很大提升。
如果给一个相对位置包含,php查找该文件,一般会在set_include_path 函数,设置的所有路径里面去搜索。 我们知道,要一个一个去尝试,列举目录,然后查找文件。这直接会消耗大的IO。 也会消耗很多性能。 如果我们用绝对包含,直接就可以准确判断出,文件是否存在。不会去set_include_path设置目录去查找了。
以上问题,对于刚刚接触到php大型项目开发,可能会很容易遇到。欢迎讨论!
暂无相关文章!
最新文章
- JAVA基础研究
- ssh默认端口更改后,如何正常使用git?
- [转]Java 8:不要再用循环了
- Extjs各版本的下载链接
- ubuntu使用github
- PHP删除HTMl标签
- 获取鼠标点击相对于Canva位置的2种方法
- struts2基本介绍
- PyQt中对RadioButton分组
- 终于等到你: 图形化开源爬虫Hawk 3发布!
- 小tips:node起一个简单服务,打开本地项目或文件浏览
- vivado源文件和仿真文件的建立
- docker 简单介绍及基础命令运用
- 002_pip安装失败
- JavaScript数组去重—ES6的两种方式
- shell 判断目录是否存在
- vue实例-转载
- LR报错Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host ";XXX.XXX.com"; failed解决方法
- tf.nn.nce_loss
- 非mapreduce生成Hfile,然后导入hbase当中