****dirname(__FILE__) 绝对路径问题二

此篇文章请在上一篇"dirname(__FILE__) 绝对路径问题一"的基础上阅读

一 问题描述

上一篇"dirname(__FILE__) 绝对路径问题一"中的代码在本地windows环境中运行正常,但是提交到linux环境中却报错,报错内容是"Notice:invalid [default store dir]   /data/web/atskernel/trunk/api/zmxy../../public/zmxytmp/",即没有找到zmxytmp目录。

二 分析问题

**经调试代码 发现问题的报错位置


$defaultStoreDir = realpath($this->defaultStoreDir)
代码执行后,返回false,赋值给$defaultStoreDir,这样if便会执行else中的语句
trigger_error("invalid [default store dir]: " . $this->defaultStoreDir);
即文章开始提到的报错。

**将报错原因精简 进一步解决问题  代码如下:


代码执行realpath()后,返回false,

realpath()函数,执行成功,返回其绝对路径""/data/web/atskernel/trunk/public/zmxytmp",失败时返回 FALSE,比如说文件不存在的话。详见手册http://php.net/manual/zh/function.realpath.php

**根据报错内容进一步分析问题

   报错原因:在linux环境中,"/data/web/atskernel/trunk/api/zmxy../../public/zmxytmp/",找不到文件

   其中"/data/web/atskernel/trunk/api/zmxy"指的是dirname(__FILE__)解析的当前文件路径zmxy,

"../../public/zmxytmp/"指的是在当前文件路径zmxy目录中跳转到zmxytmp目录下需要走的相对路径,既然是两个路径拼接,就需要用连接符"/"连接两者,即变为"/data/web/atskernel/trunk/api/zmxy/../../public/zmxytmp/";

    在linux环境中,执行命令 cd /data/web/atskernel/trunk/api/zmxy/../../public/zmxytmp/ 提示文件不存在,

执行 cd /data/web/atskernel/trunk/api/zmxy/跳转到zmxy目录下,然后通过cd ../   这样一步一步调试发现,我的代码中多了一个"../",然后改为 cd /data/web/atskernel/trunk/api/zmxy/../public/zmxytmp/成功找到文件,代码也运行成功,

为了兼容linux和windows的"/",将"/"替换为DIRECTORY_SEPARATOR

即将代码中的文件路径修改为dirname(__FILE__).DIRECTORY_SEPARATOR.'../public/zmxytmp/ZmopSdk.php'即可
 
二  总结
1 cd等同于realpath
2 使用dirname(__FILE)进行路径切换


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值