今天在練習寫程式時,發現的問題,當處理路徑時,如果呼叫到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
留言列表