关于PHP中的路径问题
来源:互联网 发布:软件培训价格 编辑:程序博客网 时间:2024/06/05 16:26
1、使用绝对路径包含文件
在每次对文件的包含中,都使用系统绝对路径进行包含,比如 require('/var/www/html/inc/test.inc');的方式,在所有文件中都这样包含就可以避免多级包含出现的问题,但是这中方式不灵活,系统可移植性极差,建议不采用。
2、在一个公用文件中定义公用文件的列表,将各个公用文件的完整路径定义为变量或者宏,系统中各个文件采用相对路径的方式包含此公用文件,然后使用变量包含需要包含的文件,这样可以实现统一维护一个文件即可,但是这种方式感觉仍然不是很爽,移植起来修改的地方仍然较多。
3、将所有的程序放到一个目录下,这样所有的包含调用都使用当前路径,就避免了路径问题,这种方式在很多开源的论坛程序中较多采用,但是这样的结构对比较大型和复杂的系统应用存在明显的不足。
4、修改php.ini文件,在php.ini中设置 include_path项,将所有的公用文件和需要进行调用包含的文件路径写进这个设置项里,这样在程序中无论当前文件在什么路径,均采用当前路径的方式进行包含,这个和PHP的PEAR安装和调用方式一样,这中方式实现简单,移植性强,建议采用。
5、最后一种方式,也是采用公用文件定义路径的方式,这也是我常使用的方式,在我的应用中定义一个path.php文件,在文件中定义当前应用的全局路径变量 $ROOT_PATH,所有的应用文件都调用和包含path.php文件,这个文件可以放到php.ini的include_path设置的目录下,也可以放到系统根 /下,也可以放到任何地方,只要的相对固定的,建议放到include_path定义的目录下,path.php文件根据当前访问的页面相对的PHP_SELF值取得路径信息,然后通过计算的方式得出到网站相对根目录的相对路径,下面是我的path.php文件的计算$ROOT_PATH值的方式:
/**
* 获取当前文件同指定网站相对根目录的目录层数 $ROOT_PATH
* $ROOT_PATH 变量值末尾包含了路径的"/"符号,在引用时不要再加"/"
* example: $ROOT_PATH."images/logo.gif"
*/
$_self_path = ($_SERVER['PHP_SELF'] == "" )? $_SERVER['REQUEST_URI'] : $PHP_SELF;
$_path_array = explode("/",$_self_path);
$_path_count = count($_path_array);
$ROOT_PATH = "";
for ($i=0;$i<$_path_count-2;$i++)
{
$ROOT_PATH = '../'.$ROOT_PATH;
}
这个$ROOT_PATH可以在系统任何地方使用,只需要在后面跟上目标文件相对网站目录根的相对路径即可,比如 $ROOT_PATH.'/images/test.gif'
两者前者使用相对路径后者使用绝对路径
如果包含只有一层 那么两种方法效果是一样的 绝对路径 执行效率应该稍为高些
如果在包含的文件下再包含那么效果就不一样了 相对路径会以最后包含的文件为参照物寻找路径
绝对路经就不存在这个问题
下面做个实验
<?php
# /url.php
echo $_SERVER['DOCUMENT_ROOT']."<br>"; //获得服务器文档根
echo $_SERVER['PHP_SELF']."<br>"; //获得执行该代码的文件服务器绝对路径
echo __FILE__."<br>"; //获得文件的文件系统绝对路径
echo dirname(__FILE__); //获得文件所在的文件夹路径
require ("./ch/1.php");
?>
<?php
# /ch/1.php
echo "<br> 我是 1 </br>";
$thisPath = dirname(__FILE__);
echo "我要包含文件2";
include ("./2.php"); //路径错误
include ($thisPath."/2.php"); //路径正确
?>
<?
# /ch/2.php
echo "<br>我是 2 </br>";
?>
当项目的目录层次超过两层并且需要出现文件的多层嵌套的时候 使用绝对地址定位文件位置就非常重要了。
一般我的做法是在一个全局配置文件中 存储 各种必须文件夹的绝对路径.
- 关于PHP中的路径问题
- 关于PHP中的路径问题
- php中的路径问题
- PHP 关于路径的问题
- 关于image中的路径问题?
- php magento关于图片路径引用问题
- php 关于一些路径问题,实测
- php中的路径问题与set_include_path
- 关于File类中的路径问题。/,\\,\
- 关于JS中的系统路径的问题
- 关于PHP路径
- PHP网站开发中关于包含路径问题的解决方案
- php学习(三)关于身份验证、以及require路径问题
- php的exec命令中关于空格路径的问题
- 关于java和web项目中的相对路径问题
- 关于Eclipse中的 Source Folder导致的路径问题
- 关于Eclipse中的 Source Folder导致的路径问题
- 关于java和web项目中的相对路径问题
- GNU tar的用法
- C++必看书籍 自我修炼ing
- asp.net入门
- 去年这时候又辞退了一个老油条,不知道他现在是否在开公司了,可以对比一下混工资的水平
- 《三字经》
- 关于PHP中的路径问题
- [转]hibernate中update与saveOrUpdate的区别
- 蛙蛙推荐:蛙蛙教你发明一种新语言之一--词法分析和语法分析
- [文摘20091116]一生必看的88本书
- Spring核心技术之Ioc和AOP
- 编译内核2.6.30遇到的问题与解决办法
- Delphi程序员理想的辅助软件
- wuti
- 问题