使用DIRECTORY_SEPARATOR带来的跳转问题

操作系统:windows

浏览器:Firefox 搜狗浏览器

问题描述:在PHP的代码中使用预定义常量DIRECTORY_SEPARATOR来组成链接的href跳转路径。在不同的浏览器下,可能会出现问题


 工作代码如下:


图1-1

                                                                                                                                                    

对于此段跳转代码

搜狗浏览器在当鼠标指针移动到链接上时,左下角显示的地址


点击可以成功跳转

 

但是FF浏览器在其链接地址却是


点击跳转会出错误

所以,盲目使用DIRCTORY_SEPARATOR拼接跳转路径也会出错,DIRECTORY_SEPARATOR在使用时可能也会因浏览器的不同而不同。

 

总结项目中需要用到路径的地方

1.      <a href=””></a> ,<img src=””/> , header(“Location: ”) 这些地方要使用文件系统相对路径(域内跳转)或者绝对URI(跨域跳转)(不过使用绝对URI那么本地调试不好弄),以兼容浏览器的差异

2.      对于reuqire(), include(), require_once(), include_once() 等则要使用文件系统绝对路径(结合__FILE__, __DIR__等),因为如果使用相对路径的话,在此种情况下会出错误。测试代码结构如下:

/test

   |--aa.php

   /--subTest

       |--bb.php

       |--cc.php

   其中aa.php 使用相对路径包含bb.php,bb.php使用相对路径包含cc.php

   直接访问aa.php,会出现找不到cc.php的情况,因为系统是按照aa.php的相对位置去包含cc.php的

   aa.php代码如下

<span style="font-family:Courier New;font-size:12px;"> <?php
<span style="white-space: pre;">	</span>echo 'here is aa.php <br />';
<span style="white-space: pre;">	</span> require './subTest/bb.php';
?></span>

bb.php代码如下

<span style="font-family:Courier New;"><?php
<span style="white-space: pre;">	</span>echo 'here is bb.php <br/>';
<span style="white-space: pre;">	</span>require './cc.php';
?></span>

          

cc.php代码如下

<span style="font-size:14px;"><?php
<span style="white-space:pre">	</span>echo 'here is cc.php';
?></span>


 直接访问bb.php结果如下

      

 图1-3

 

 访问aa.php结果如下:

   

    图1-4

   

3.      不使用预定义常量DIRECTORY_SEPARATOR,而使用’/’恒作为目录分隔符,因为其在linux系统下和windows下是兼容的

4.      不同浏览器下<a>标签的href属性、<img>的src以及header(“Location:XXX”)的XXX部分,以’/’开头,得到的实际路径可能不一样

所以最好采用相对路径(以 './' 或者 '../'开头)

5. 最后要注意的是,虽然DIRECTORY_SEPARATOR不能用在拼接跳转url上,但是对于不同的环境(或操作系统,或浏览器),要在其中将__FILE__或

__DIR__使用explode()将路径分拆为目录(或文件数组)时,则必须使用DIRECTORY_SEPARATORY。使用'/',在Firefox下explode __FILE__和__DIR__会得不到想要的结果,因为Firefox目录分割符貌似是'\'。所以,正确分解方法是explode(DIRECTORY_SEPARATORY, __FILE__)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值