2009-08-23 3 views

risposta

13
print $_SERVER["SCRIPT_FILENAME"]; 
+3

Questa non è la risposta corretta ... – Neo

+1

Funziona solo nel contesto di un contenitore Web. –

1

Non penso che tu possa farlo: il 01 La costante magicaindica in quale file è scritta; e questo è tutto.

Se si desidera sapere quale script PHP è stato inizialmente chiamato (quale URL è stato richiesto, ad esempio), si potrebbe avere più fortuna guardando il superglobale $_SERVER: contiene molte informazioni, tra cui alcune che ti aiuteranno (come SCRIPT_FILENAME o ;-) ;-)

17

La risposta scelta funziona solo in ambienti che impostano variabili server e in particolare non funzioneranno da uno script CLI. Inoltre, non determina il genitore, ma solo il file di script più in alto.

Si può fare quasi la stessa cosa da uno script CLI guardando $ argv [0], ma questo non fornisce il percorso completo.

La soluzione ambiente indipendente utilizza debug_backtrace:

function get_topmost_script() { 
    $backtrace = debug_backtrace(
     defined("DEBUG_BACKTRACE_IGNORE_ARGS") 
     ? DEBUG_BACKTRACE_IGNORE_ARGS 
     : FALSE); 
    $top_frame = array_pop($backtrace); 
    return $top_frame['file']; 
} 
+1

Probabilmente qui deve essere "array_shift" invece di "array_pop" – FDisk

+0

No, usando 'array_shift()' si farà in modo che la funzione restituisca il nome del file di script che contiene 'get_topmost_script()', cioè '__FILE__'. – danorton

0

dritto alla soluzione:

Script principale:

echo $_SERVER['SCRIPT_FILENAME']; 

Bambino Script (file incluso nello script genitore):

echo __FILE__; 

Fare un file chiamato "parent.php" con un contenuto:

include('child.php'); 

Fai un file chiamato "child.php" con un contenuto:

echo "My Parent is at: " . $_SERVER['SCRIPT_FILENAME'] . "<br>"; 
echo "I'm at: " . __FILE__; 

Si ottiene l'idea ...

0

Devi usare basename($_SERVER["SCRIPT_FILENAME"]) o, se ti piace solo lo script nam, puoi usare basename($_SERVER["SCRIPT_FILENAME"], '.php').