2009-10-01 37 views
27

Mam następujący kod z CodeIgniter index.phpCo to jest __FILE__?

moim rozumieniu jest to, że

Jeśli / pozycji strun w $system_folder (w tym przypadku CIcore_1_7_1) jest false, a jeśli realpath funkcja istnieje i (?) Jest nie false, $system_folder jest przypisany do (?) /$system_folder. else $system_folder jest przypisany do $system_folder z zamiarem zastąpienia \\ z /.

Q1. Co oznacza funkcja realpath?

Q2. Co to znaczy?

@realpath(dirname(__FILE__)) 

Q3. Czy mam rację? Czy mam jakieś nieporozumienie?

Q4. Jakiej sytuacji potrzebujesz?

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

Odpowiedz

32
  1. Funkcja realpath() daje ścieżkę w systemie plików, a wszelkie dowiązania symboliczne i ruchami katalogu (np ../../) rozwiązane. Funkcja dirname() udostępnia tylko katalog, a nie plik w nim.

  2. __FILE__ jest magia stała daje ścieżka do bieżącego pliku .php (ten, który __FILE__ znajduje, a nie ten, to jest wliczone przez jeśli to jest to.

  3. Dźwięki o prawo.

  4. jest to tłumaczenie z stylu Windows (\) ścieżki do stylu Unix (/).

+0

Dlaczego są dwa \ s, zamiast jednego \? – shin

+1

Ponieważ \ jest znakiem ucieczki - aby wstawić cytat do napisu, użyjesz "to jest \", cytat ". Aby umieścić odwrotny ukośnik, potrzebujesz dwóch z nich:" to jest \ "ukośnik odwrotny" – Greg

8

__FILE__ to po prostu nazwa bieżącego pliku. realpath(dirname(__FILE__)) pobiera nazwę katalogu, w którym znajduje się plik - w istocie katalog, w którym jest zainstalowana aplikacja. A @ to wyjątkowo głupi sposób na tłumienie błędów.

+1

Idealne wyjaśnienie. Dzięki. – Jonny

+0

Niepoprawna, ponieważ PHP 4.01 '__FILE__' ** lways ** zwraca bezwzględną ścieżkę. http://php.net/manual/en/language.constants.predefined.php – iantonuk

5
__FILE__ 

Pełna ścieżka i nazwa pliku . Jeśli zostanie użyty wewnątrz pliku włączającego, zwrócona zostanie nazwa dołączonego pliku o nazwie . Od PHP 4.0.2 , FILE zawsze zawiera bezwzględną ścieżkę z dowiązania rozwiązane natomiast w starszych wersjach zawierała ścieżkę względną w pewnych okolicznościach.


string dirname (string $path ) 

podanego łańcucha zawierającego ścieżkę do pliku, funkcja ta zwróci nazwa katalogu.


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

Trzeba to być consisten w separatorach ścieżkę między różnymi systemami operacyjnymi. Windows używa \ i * nix używa /, trzymaj za pomocą /.