2009-12-24 103 views
7

這是define的一個包含路徑的正確方法* nix和Windows設置PHP的正確方法包括* Nix和Windows的路徑

define('INCPATH', realpath(dirname(__FILE__)) . '/'); 

請注意上面包含的尾部正斜槓。對於這兩種操作系統來說,包括/是否需要相同的正斜槓?

EDIT(使用答案修訂版):

據我所知,我下面的代碼是普遍的定義既一個包含/需要路徑的正確方法的* nix和Windows操作系統的。請隨時糾正下面評論中的任何內容。

讓我感到困惑的是我看到的很多例子,它們將back-slashes (\)替換爲forward-slashes(/)。基於下面的一些答案,這是不必要的。

所以最終的正確的代碼(用於純粹的)是:

define('INCPATH', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR); 

該代碼產生以下結果:

*nix: /path/to/the/file/

Windows: C:\Path To\the\file\

的簡要說明,工作我們從內部(__FILE__)出(realpath()):

FILE該文件的完整路徑和文件名。始終包含解析符號鏈接的絕對路徑。

dirname()返回的字符串是路徑刪除了任何尾隨/組件。負責刪除文件名。

realpath()返回成功時的規範化(標準化/標準化)絕對路徑名。結果路徑將沒有符號鏈接,'/./''/../'組件。我認爲這是包括徹底,因爲__FILE__已解決符號鏈接。或者,也許它包括解析相對路徑?無論哪種方式,它似乎鞏固了我們的目標。

回答

7

正斜線將適用於這兩個操作系統,這是要走的路。

我找不到絕對的參考,但它在PHP手冊的幾個地方顯示,如herehere。而且,它適用於我,一個Windows用戶。

最後,你可能會最終指定Windows上的混合路徑,如c:\\apache\\htdocs\\myapp/index.php,,並且這一切都正常。

+0

@Derek,很好的信息 - 謝謝。我會假設我的定義在兩個操作系統上都可以工作。 – Jeff 2009-12-24 21:21:31

+1

我經常想知道爲什麼反斜槓還在使用,因爲它會導致逃生頭痛,正斜槓也會起作用。 – Ether 2009-12-24 21:30:19

2

令很多人感到意外的是,/在Windows和MSDOS上正常工作。在路徑名中,它甚至可以在OpenVMS上運行。

但是,如果您在PHP中爲路徑做某些事情,則數組將比字符串更方便。

$MYPATH = array ('.', '/usr/lib/', '/usr/share/lib');