close

今天在練習寫程式時,發現的問題,當處理路徑時,如果呼叫到PHP內建的  dirname(__DIR__) function, 後續如果要接subfolder延續下去,

Windows : dirname(__DIR__)  = >  C: work 

Example. 1  $path = dirname(__DIR__) .  '/subfolder/subfolder2/file.ext';

Turns into  C: \work\subfolder\subfolder2\file.ext;

 

Linux : dirname(__DIR__) = > /var

Example. 2  $path = dirname(__DIR__) .  '/subfolder/subfolder2/file.ext';

Turns into /var

 

那應該要使用哪一種呢? 是forward slash(Windows) 還是 backword slash(Linux),

 

雖然說在PHP當中,已經把  /  包裝的相當好了,但是假設你先取得dirname(__DIR__)則會造成上述的問題,

因此假如你有在處理路徑問題,像是正則表達式或者是搜尋類型,則可以先使用StackOverflow裡面的Bob Ray提到的方式。

$path = str_replace('\\', '/',$path) ;    將 \  全部替換成  / 

這樣就可以統一格式,解決 dirname(__DIR__)  可能拿到  \  (windows 的路徑符號)   

又可以順利的去處理搜尋比對的問題。

 

 

 

而且後續PHP會自動幫你把 / 轉為相對應的OS系統的路徑符號!!  

 

附註:  StackOverflow StanE的回答

覺得蠻有趣的,順便翻成中文做個紀錄

1.在某些情況下,你可能會使用到DIRECTORY_SEPARATOR

2.通常OS系統也會支援辨識 /  \  ,但是有可能第三方支援的軟體並不支援

3.某些OS系統可能不是使用 / \當作區別符號,可能是其他的符號。  (小弟只有用過M$ 和 Linux 所以這部份就不清楚了)

另外使用DIRECTORY_SEPARATOR 在Filesystem,而不要把URL搞混了

 

 

https://stackoverflow.com/questions/26881333/when-to-use-directory-separator-in-php-code

arrow
arrow
    文章標籤
    php OS filesystem filepath
    全站熱搜
    創作者介紹
    創作者 蕭瑞文 的頭像
    蕭瑞文

    Neil的部落格

    蕭瑞文 發表在 痞客邦 留言(0) 人氣()