2012-05-01 23 views
11

Quando si utilizza il codice PHP include, come posso sapere quale file sta chiamando il numero include? In breve, qual è il nome file del file principale?Ottieni nome file del file che ha eseguito PHP include

+0

Una domanda migliore è perché hai bisogno di sapere questo? Forse c'è un modo migliore di fare esplicitamente ciò che stai cercando di realizzare. – Zimzat

risposta

11

Un modo semplice è assegnare una variabile nel file principale (prima dell'inclusione), quindi fare riferimento a tale variabile nel file incluso.

Parent File:

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

Incluso File:

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

Si potrebbe anche pasticciare con get_included_files() o debug_backtrace() e trovare l'evento quando e dove ha ottenuto il file incluso, ma può diventare un po 'complicato e complicato.

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

Penso che questo dovrebbe dare il risultato giusto quando c'è un genitore single.

Con ciò intendo la situazione in cui il genitore non è un file obbligatorio o incluso.

9

risposta tardi, ma ...

ho verificare il nome del file in esecuzione padre utilizzando:

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

Questo dovrebbe essere più votato in quanto fornisce la risposta corretta senza la necessità di modificare i file contenitore per un inclusivo. Ho una inclusione che aveva bisogno del nome del suo file contenitore e questo sicuro battendo i valori di '$ var' su 100+ altre pagine come suggeriscono le altre risposte. – Martin

+1

** RISPOSTA ALTAMENTE ERRATA **! 'SCRIPT_NAME' restituisce il primo file. e 'REQUEST_URI' è fuori discussione! non aiuteranno in alcun CMS. Usa 'debug_backtrace()' o 'get_included_files()' –

+0

@ T.Todua questi qualificatori sono validi ma sono ben al di fuori dello scopo di questa domanda (e risposta). '$ _SERVER ['SCRIPT_NAME']' è il valore necessario qui. – Martin

0

Nel file principale, aggiungere questa riga prima di includere il file secondario:

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

E poi nel file figlio, leggere la variabile di sessione:

$parent_file = $_SESSION['parent_file']