2013-02-01 134 views
6

我正在寫一個PHP類,我希望它是跨平臺兼容的。我需要展開一個路徑來查找特定的文件夾名稱。我爲分隔符選擇了什麼?該路徑在UNIX上包含'/',在Windows上包含'\'。UNIX/Windows上的斜槓和反斜槓的一致性

在這個特殊的例子中,我想獲取存儲包含文件的目錄名稱。我用這個:

private function find_lib_dir() { 
    $array_path = explode('/', __DIR__); 
    return $array_path[count($array_path)-1]; 
} 

在此情況下(一般多),我能做些什麼,以確保它將在Windows和UNIX工作?

謝謝!

回答

8

您可以使用DIRECTORY_SEPARATOR如下:

$array_path = explode(DIRECTORY_SEPARATOR, __DIR__); 
+0

請注意,這隻適用於系統返回的路徑;用戶提供的路徑可能會在Windows上使用正斜槓,這不適用於此。 –

2

使用basename()dirname()進行路徑操作,而不是自己解析它。

0

您應該使用DIRECTORY_SEPARATOR不斷

0

我會做這樣的事情:

private function find_lib_dir() { 
    // convert windows backslashes into forward slashes 
    $dir = str_replace("\\", "/", __DIR__); 

    $array_path = explode('/', $dir); 
    return $array_path[count($array_path)-1]; 
} 

爲了您的具體的例子,你可以這樣做其他答案提供了什麼。不過,如果你正在構建字符串喜歡自己:

__DIR__ . '/path/to/dir'; 

,然後嘗試爆炸,那麼你將會對UNIX的問題VS Windows系統。在這種情況下,最好(imo)將所有反斜槓替換爲正斜槓(這兩個系統都支持)。然後基於正斜槓進行爆炸。

+0

爲什麼downvote?這個解決方案與最高投票答案完全相同。唯一的區別是該解決方案解決了路徑來自不是由操作系統生成的地方的問題。 – Supericy