2012-05-01 32 views
11

Al usar PHP include, ¿cómo puedo averiguar qué archivo llama al include? En resumen, ¿cuál es el nombre de archivo del padre?Obtener el nombre del archivo que ejecutó PHP incluye

+0

Una mejor pregunta es ¿por qué necesitas saber esto? Tal vez haya una mejor manera de hacer explícitamente lo que estás tratando de lograr. – Zimzat

Respuesta

11

Una manera fácil es asignar una variable en el archivo principal (antes del inclue), luego hacer referencia a esa variable en el archivo incluido.

archivo principal:

$myvar_not_replicated = __FILE__; // Make sure nothing else is going to overwrite 
include 'other_file.php'; 

archivo incluido:

if (isset($myvar_not_replicated)) echo "{$myvar_not_replicated} included me"; 
else echo "Unknown file included me"; 

Usted también podría perder el tiempo con get_included_files() o debug_backtrace() y encontrar el evento cuando y donde el archivo se llevó incluido, pero puede ser un poco complicado y complicado.

9
$fileList = get_included_files(); 
$topMost = $fileList[0]; 
if ($topMost == __FILE__) echo 'no parents'; 
else echo "parent is $topMost"; 

Creo que esto debería dar el resultado correcto cuando hay una madre soltera.

Con esto me refiero a la situación en la que el padre no es un archivo requerido o incluido.

9

respuesta tardía, pero ...

puedo comprobar el funcionamiento de nombre de archivo de los padres mediante el uso de:

$_SERVER["SCRIPT_NAME"] // or 
$_SERVER["REQUEST_URI"] // (with query string) 
+1

Esto debería tener una calificación más alta ya que da la respuesta correcta sin necesidad de editar los archivos contenedores para una inclusión. Tengo una inclusión que necesitaba el nombre de su archivo de contenedor y esto seguramente supera los valores '$ var' en más de 100 páginas, como sugieren las otras respuestas. – Martin

+1

** RESPUESTA ALTAMENTE INCORRECTA **! 'SCRIPT_NAME' devuelve el primer archivo. ¡Y 'REQUEST_URI' está fuera de duda! no ayudarán en ningún CMS. Use 'debug_backtrace()' o 'get_included_files()' –

+0

@ T.Todua estos calificadores son válidos, pero están fuera del alcance de esta pregunta (y respuesta). '$ _SERVER ['SCRIPT_NAME']' es el valor que se necesita aquí. – Martin

0

En el archivo principal, añada esta línea antes de incluir el archivo secundario:

$_SESSION['parent_file'] = $_SERVER['PHP_SELF']; 

Y luego en el archivo secundario, lea la variable de sesión:

$parent_file = $_SESSION['parent_file'] 
Cuestiones relacionadas