2009-10-01 12 views
27

he el siguiente código de CodeIgniter index.php¿Qué significa __FILE__?

Mi entendimiento es que,

Si / de posición de la cadena en $system_folder (en este caso CIcore_1_7_1) es false, y si existe realpath función Y (?) Es no false, $system_folder se asigna a (?) /$system_folder. else $system_folder se asigna a $system_folder reemplazando \\ con /.

Q1. ¿Qué significa la función realpath?

Q2. ¿Qué significa esto?

@realpath(dirname(__FILE__)) 

Q3. ¿Estoy en lo cierto? ¿Tengo algún malentendido?

Q4. ¿Qué tipo de situación necesitas para lo siguiente?

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

Respuesta

32
  1. La función realpath() le da la ruta del sistema de archivos, con los enlaces simbólicos y de desplazamiento de directorio (por ejemplo ../../) resuelto. La función dirname() le proporciona solo el directorio, no el archivo dentro de él.

  2. __FILE__ es una constante mágica que proporciona la ruta de sistema de archivos para el archivo actual .php (el que __FILE__ está en, no el que está incluido por si se trata de un include.

  3. suena bastante bien.

  4. Esta es traducir del estilo de Windows (\) rutas a estilo Unix (/).

+0

¿Por qué hay dos \ s, en lugar de uno \? – shin

+1

Porque \ es el carácter de escape: para poner una cita dentro de una cadena, usa "this is \" a quote ". Para poner una barra diagonal inversa necesitas dos de ellas:" this is \\ a backslash " – Greg

8

__FILE__ es simplemente el nombre del archivo actual. realpath(dirname(__FILE__)) recibe el nombre del directorio en el que se encuentra el archivo, en esencia, el directorio en el que está instalada la aplicación. Y @ es la manera extremadamente tonta de PHP de suprimir errores.

+1

explicación perfecta. Gracias. – Jonny

+0

incorrecta, a partir de PHP 4.01 '** __FILE__' una siempre ** devuelve el camino absoluto. http://php.net/manual/en/language.constants.predefined.php – iantonuk

5
__FILE__ 

La ruta completa y el nombre del archivo . Si se usa dentro de un include, se devuelve el nombre del archivo incluido. Desde PHP 4.0.2, ARCHIVO siempre contiene una ruta absoluta con enlaces simbólicos resueltos mientras que en mayores versiones que contenía ruta relativa en algunas circunstancias.


string dirname (string $path ) 

Dada una cadena que contiene una ruta a un archivo, esta función devolverá el nombre del directorio.


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

Esto es necesario para que consisten en separadores de ruta entre diferentes sistemas operativos. Windows usa \ y * nix usa /, usted se queda con /.