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

image

发现,找不到 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大型项目开发,可能会很容易遇到。欢迎讨论!

posted @ 2015-12-03 19:36  襄阳老兵  阅读(10291)  评论(0编辑  收藏  举报