谈谈PHP中相对路径的问题与绝对路径的使用
问题描述
首先我们先来看一下我们这个例子的目录结构以及这三个文件的内容
a.php
<?php include './c/d.php'
b.php
<?php define('__B', 'this is a test');
c/d.php
<?php include '../b.php'; var_dump(__B);
在c目录下面的d.php文件引用了它的上级目录下的 b.php 文件 单独运行 c/d.php 的时候不会出问题
但是,如果在和b同级目录下的a.php引用c/d.php的话就会出问题了
它报错说的是文件不存在
思考
大概意思就是 a.php 把 c/d.php 引入到 a.php 中后, include '../b.php'
这个路径就是相对于 a.php 来说的了,然后对于 a.php 来说的这个相对路径它是不存在的,所以就出现了这个问题
如果一个文件可能在多个地方被引用的时候使用相对路径就相当容易出问题,然后我们使用绝对路径能够轻松解决这个问题。
使用绝对路径解决问题
如果我们把文件改成如下内容
a.php
<?php include __DIR__.'/../b.php'; var_dump(__B);
b.php
<?php define('__B', 'this is a test');
c/d.php
<?php include __DIR__.'/../b.php'; var_dump(__B);
这样就改成了对文件的绝对路径进行引用了, __DIR__
是php5.3开始中就有的预定义的魔术常量,表示这个文件所在的目录,然后我们利用这个来可以写出绝对路径,在运行a.php和c/d.php的时候都能够正常执行了,如果在php5.3之前都是使用 dirname(__FILE__)
来替代 __DIR___
总结
以上就是关于php中相对路径的问题以及绝对路径的使用的全部内容,希望对大家使用PHP能有所帮助,避免再进入php中相对路径的坑。
相关推荐
-
PHP文件操作之获取目录下文件与计算相对路径的方法
获取目录下文件 1.获取目录下文件,不包括子目录 //获取某目录下所有文件.目录名(不包括子目录下文件.目录名) $handler = opendir($dir); while (($filename = readdir($handler)) !== false) {//务必使用!==,防止目录下出现类似文件名"0"等情况 if ($filename != "." && $filename != "..") { $files[]
-
php计算两个文件相对路径的方法
本文实例讲述了php计算两个文件相对路径的方法.分享给大家供大家参考.具体如下: 一.问题: 写一个php函数算出两个文件的相对路径.例如$a="/a/b/c/d/e.php"; $b="/a/b/12/34/c.php",B相对于A的相对路径是什么? 二.解决方法: <?php /** * 求$b相对于$a的相对路径 * @param string $a * @param string $b * @return string */ function getR
-
php zend 相对路径问题
<?php define ('P_S', PATH_SEPARATOR); define ('ROOT', "../"); set_include_path(ROOT .P_S .'Zend' .P_S .ROOT.get_include_path()); require_once ROOT.'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Db'); Zend_Loader::loadClass('Zend_Config_Ini')
-
php求两个目录的相对路径示例(php获取相对路径)
求两个目录的相对路径,不限制路径深度 复制代码 代码如下: /** * 输出$b相对于$a的相对路径($a) * 不限限制路径深度,没有做什么优化,只是实现功能 */function getPath($a, $b){ $aArr = explode('/', dirname($a)); $bArr = explode('/', dirname($b)); $aLen = count($aArr); $bLen = count($bArr); $len = max($aLen, $bLen); $
-
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
在php命令行下执行.php文件时,执行环境的工作目录(getcwd( ))是php命令程序(php.exe)所在目录,所以如果想在文件内使用相对路径时,要先切换当前的工作目录才行. 小测试程序: 复制代码 代码如下: <?php $oldpath = getcwd(); // 原始工作目录 php.exe所在目录 $path = dirname(__FILE__); chdir($path); // 切换工作目录为当前文件所在目录 $fpath = &quo
-
一道求$b相对于$a的相对路径的php代码
php面试题的题目: $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php'; //计算出 $b 相对于 $a 的相对路径应该是 ../../c/d php面试题的答案: 复制代码 代码如下: function getRelative($a,$b) { $arr = explode("/",$a); $brr = explode("/",$b); $c = count($arr)-2; $d = count($brr)-2; /
-
php 算法之实现相对路径的实例
php 算法之实现相对路径的实例 算出相对路径(相同的目录可以忽略用../ 或者 ./ 表示) 实现代码: class Relatively{ private function __construct(){ } /** * 算出相对路径(相同的目录可以忽略用../ 或者 ./ 表示) * @param Strint $path1 * @param Strint $path2 * @return string */ public static function relaroot($path1,$p
-
PHP利用正则表达式将相对路径转成绝对路径的方法示例
前言 大家应该都有所体会,很多时候在做网络爬虫的时候特别需要将爬虫搜索到的超链接进行处理,统一都改成绝对路径的,所以本文就写了一个正则表达式来对搜索到的链接进行处理.下面话不多说,来看看详细的介绍吧. 通常我们可能会搜索到如下的链接: <!-- 空超链接 --> <a href=""></a> <!-- 空白符 --> <a href=" " rel="external nofollow" &
-
php绝对路径与相对路径之间关系的的分析
php中好像不能像asp那样用"/"表示根目录,代之以$_SERVER['DOCUMENT_ROOT'],其它则相同:../表示向上一层../表示当前层.假如现在a/b/c/s.php要调用根目录下的 /bb/s2.txt,则: $RootDir = $_SERVER['DOCUMENT_ROOT']; $fireDir = "$RootDir/bb/s2.txt"; 或者:"../../../bb/s2.txt"表示向上返回到b再向上到a再向上
-
PHP获取文件相对路径的方法
本文实例讲述了PHP获取文件相对路径的方法.分享给大家供大家参考.具体实现方法如下: <?php $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php'; //../../12/34/c.php echo getRelativelyPath($a,$b); //求$b相对于$a的相对路径 function getRelativelyPath($a,$b){ $a=explode('/',$a); $b=explode('/',$b); var_dump($a
随机推荐
- ibatis简单实现与配置
- java中ZXing 生成、解析二维码图片的小示例
- .Net中的json操作类用法分析
- 详细介绍Python函数中的默认参数
- 基于jquery插件实现常见的幻灯片效果
- 在Python的Django框架中获取单个对象数据的简单方法
- ASPJPEG综合操作的CLASS类
- android中Activity横竖屏切换的那些事
- php+html5基于websocket实现聊天室的方法
- 实现web打印的各种方法介绍及实现代码
- java中把汉字转换成简拼的实现代码
- IE8中动态创建script标签onload无效的解决方法
- 浅谈javascript函数式编程
- insert into … on duplicate key update / replace into 多行数据介绍
- 浅析jQuery EasyUI中的tree使用指南
- jquery弹出框插件jquery.ui.dialog用法分析
- 利用纯js + transition动画实现移动端web轮播图详解
- 详解Webpack DLL用法以及功能
- Java mail 发送邮件的具体实例
- SpringMVC的简单传值(实现代码)