以前看了,很多框架,基本上很少使用相对路径包含。而一般很多做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大型项目开发,可能会很容易遇到。欢迎讨论!

暂无相关文章!

最新文章

  1. JAVA基础研究
  2. ssh默认端口更改后,如何正常使用git?
  3. [转]Java 8:不要再用循环了
  4. Extjs各版本的下载链接
  5. ubuntu使用github
  6. PHP删除HTMl标签
  7. 获取鼠标点击相对于Canva位置的2种方法
  8. struts2基本介绍
  9. PyQt中对RadioButton分组
  10. 终于等到你: 图形化开源爬虫Hawk 3发布!
  11. 小tips:node起一个简单服务,打开本地项目或文件浏览
  12. vivado源文件和仿真文件的建立
  13. docker 简单介绍及基础命令运用
  14. 002_pip安装失败
  15. JavaScript数组去重—ES6的两种方式
  16. shell 判断目录是否存在
  17. vue实例-转载
  18. LR报错Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host &quot;XXX.XXX.com&quot; failed解决方法
  19. tf.nn.nce_loss
  20. 非mapreduce生成Hfile,然后导入hbase当中

热门文章

  1. [No0000A0]批处理命令学习之:常用的特殊符号
  2. 【repost】浏览器内核、渲染引擎、js引擎
  3. [网站性能3]SqlServer中Profiler的使用
  4. Activity的生命周期
  5. CentOS利用nginx和php-fpm搭建owncloud私有云
  6. ios学习资源
  7. hibernate主键生成策略
  8. 很不错的Intent用法 适用于正在开发的伙伴。自己看到了,也分享给大家吧。
  9. C++中重定义的问题——问题的实质是声明和定义的关系以及分离式编译的原理
  10. centos在线安装svn