2009-10-01 25 views
27

Ho il seguente codice da Codeigniter index.phpChe cosa significa __FILE__?

mia comprensione è che,

Se / della posizione stringa $system_folder (in questo caso CIcore_1_7_1) è false, e se realpath la funzione esiste e (?) È non false, $system_folder è assegnato a (?) /$system_folder. else $system_folder viene assegnato a $system_folder con la sostituzione di \\ con /.

Q1. Cosa significa funzione realpath?

Q2. Cosa significa questo?

@realpath(dirname(__FILE__)) 

Q3. Ho ragione? Ho qualche malinteso?

Q4. Che tipo di situazione hai bisogno di quanto segue?

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); 
} 

risposta

32
  1. La funzione realpath() ti dà il percorso del file-system, con tutti i link simbolici e di spostamento di directory (ad esempio ../../) risolto. La funzione dirname() fornisce solo la directory, non il file al suo interno.

  2. __FILE__ è una costante magica che ti dà il percorso del file system al file attuale .php (quella che __FILE__ è, non quello che è incluso per se è un includere.

  3. Suoni circa la destra.

  4. si tratta di tradurre dallo stile di Windows (\) percorsi di stile Unix (/).

+0

Perché ci sono due \ s, invece di uno \? – shin

+1

Poiché \ è il carattere di escape - per inserire una virgoletta all'interno di una stringa si usa "this is \" una citazione ". Quindi per inserire una barra rovesciata sono necessari due di questi:" this is \\ a backslash " – Greg

8

__FILE__ è semplicemente il nome del file corrente. realpath(dirname(__FILE__)) ottiene il nome della directory in cui si trova il file - in sostanza, la directory in cui è installata l'app. E @ è il modo estremamente sciocco di PHP per eliminare gli errori.

+1

perfetta spiegazione. Grazie. – Jonny

+0

non corretto, dal momento che PHP 4.01 '__FILE__' ** una lways ** restituisce il percorso assoluto. http://php.net/manual/en/language.constants.predefined.php – iantonuk

5
__FILE__ 

Il percorso completo e il nome del file . Se utilizzato all'interno di un include, viene restituito il nome del file incluso. Dal PHP 4.0.2, FILE sempre contiene un percorso assoluto con link simbolici risolti mentre nelle vecchie versioni conteneva percorso relativo in alcune circostanze.


string dirname (string $path ) 

Data una stringa contenente il percorso di un file, questa funzione restituisce il nome della directory.


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

avete bisogno di questo per essere consisten in separatori di percorso tra i diversi sistemi operativi. Windows usa \ e * nix usa /, tieni premuto con /.