2009-10-01 31 views
27

我從笨下面的代碼index.php__FILE__是什麼意思?

我的理解是,

如果在$system_folder字符串的位置(在這種情況下CIcore_1_7_1)爲false, 如果realpath函數存在和/(?)是不是false, $system_folder被分配給(?)/$system_folder。 否則$system_folder被分配給$system_folder,用/代替\\

Q1。 realpath函數的含義是什麼? Q2302。這是什麼意思?

@realpath(dirname(__FILE__)) 

Q3。我對嗎?我有任何誤解嗎?

Q4。你需要什麼樣的情況下面?

str_replace("\\", "/", $system_folder) 

$system_folder = "CIcore_1_7_1"; 

/* 
|--------------------------------------------------------------- 
| SET THE SERVER PATH 
|--------------------------------------------------------------- 
| 
| Let's attempt to determine the full-server path to the "system" 
| folder in order to reduce the possibility of path problems. 
| Note: We only attempt this if the user hasn't specified a 
| full server path. 
| 
*/ 

if (strpos($system_folder, '/') === FALSE) 
{ 
    if (function_exists('realpath') AND @realpath(dirname(__FILE__)) !== FALSE) 
    { 
     $system_folder = realpath(dirname(__FILE__)).'/'.$system_folder; 
    } 
} 
else 
{ 
    // Swap directory separators to Unix style for consistency 
    $system_folder = str_replace("\\", "/", $system_folder); 
} 

回答

32
  1. realpath()功能爲您提供文件系統路徑,與任何符號鏈接並解決了目錄遍歷(如../../)。 dirname()函數爲您提供目錄,而不是其中的文件。

  2. __FILE__是一個神奇的恆定,讓你的文件系統路徑到當前的PHP文件(就是那個__FILE__是,不是它的,如果它包括一個一個包含。

  3. 聽起來是正確的。

  4. 這是從Windows風格轉換(\)路徑爲Unix類型(/)。

+0

爲什麼有兩個\ s,而不是一個\? – shin 2009-10-02 10:03:04

+1

因爲\是轉義字符 - 在一個字符串中加上一個引號,所以你可以使用「this is \」一個引號「,所以要放一個反斜線,你需要兩個:」這是一個反斜槓「 – Greg 2009-10-02 10:06:02

8

__FILE__僅僅是當前文件的名稱。 realpath(dirname(__FILE__))獲取文件所在目錄的名稱 - 本質上是安裝該應用程序的目錄。而@是PHP非常愚蠢的抑制錯誤的方式。

+1

完美的解釋。謝謝。 – Jonny 2014-04-01 18:28:21

+0

不正確的,因爲PHP 4.01'__FILE__' **一路線**返回絕對路徑。 http://php.net/manual/en/language.constants.predefined.php – iantonuk 2017-11-12 04:37:50

5
__FILE__ 

的 文件的完整路徑和文件名。如果在包含內部使用,則會返回包含文件的名稱 。 自PHP 4.0.2,FILE總是 包含 符號連接解決,而在老年 版本中,它包含在某些情況下相對路徑 絕對路徑。


string dirname (string $path ) 

給出一個包含有指向一個文件的全路徑的字符串,該函數將返回 目錄的名稱。


str_replace("\\", "/", $system_folder) 

你需要用它來在不同的操作系統之間的路徑分隔符來consisten。 Windows使用\和* nix使用/,你使用/。