Windows PHP dirname root

遇到奇怪的问题,在 Windows 环境下,你猜 dirname(‘/’) 返回虾米?

string(1) “\”

Linux 下呢?

string(1) “/”

换个参数,dirname(‘/home/leakon/sofav.php’),如果你认为上面的不同,是因为 Windows 的目录分隔符是反斜线 “\”,那下面的结果如何解释?

Windows: string(12) “/home/leakon”

Linux: string(12) “/home/leakon”

再换参数,dirname(‘D:\Leakon\Code\sofav.php’)

Windows: string(14) “D:\Leakon\Code”

Linux: string(1) “.”

奇怪吧,为什么有这么大区别呢?

现在还不太清楚,提供一下我的测试环境:

Windows 下存在 D:\Leakon\Code\sofav.php 这个文件,Linux 下存在 /home/leakon/sofav.php。

等搞明白回来顶,看到的,用到的,留心记一下吧。

顺便说下,这个问题,是用单元测试发现的。

我知道很多开发者都懂单元测试,我也知道很多开发者并没有切身去实践单元测试。

Tags: ,

2 comments

  1. 1,”在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。 ”
    2, “dirname() 被修正为 POSIX 兼容,本质上就意味着如果在 path 中没有斜线,则返回一个点(’.’),表示当前目录。”

    这些似乎可以解释后面2种情况

  2. 哦,对啊,你提醒了我,研究一下 POSIX 兼容,也许能回答以上的问题,谢谢~

Leave a Reply

Your email address will not be published.

*