2012-05-01 7 views
11

Podczas korzystania z PHP include, w jaki sposób mogę się dowiedzieć, który plik nazywa się include? W skrócie, jaka jest nazwa pliku nadrzędnego pliku?Uzyskaj nazwę pliku pliku, który działał PHP to

+0

Lepsze pytanie brzmi: dlaczego musisz to wiedzieć? Być może istnieje lepszy sposób wyraźnego robienia tego, co próbujesz osiągnąć. – Zimzat

Odpowiedz

11

Łatwym sposobem jest przypisanie zmiennej w pliku nadrzędnym (przed skrętką), a następnie odesłanie tej zmiennej do dołączonego pliku.

nadrzędna pliku:

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

wliczony Plik:

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

Można też poeksperymentować z get_included_files() lub debug_backtrace() i znaleźć zdarzenie, kiedy i gdzie plik dostał wliczone w cenę, ale to może stać się trochę kłopotliwe i skomplikowane.

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

Myślę, że powinno to dać właściwy wynik, gdy istnieje jeden rodzic.

Mam tu na myśli sytuację, w której rodzic nie jest wymagany lub dołączony do niego plik.

9

Późne odpowiedź, ale ...

sprawdzić biegu rodzic nazwa pliku za pomocą:

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

To powinno być bardziej wysoko ocenione, ponieważ daje poprawną odpowiedź bez potrzeby edytowania plików kontenera dla załącznika. Mam dodatek, który wymagał nazwy pliku kontenera i to na pewno pobudza zmianę wartości '$ var' na ponad 100 innych stronach, jak sugerują inne odpowiedzi. – Martin

+1

** WYSOCE NIEPRAWIDŁOWA ODPOWIEDŹ **! "SCRIPT_NAME" zwraca pierwszy plik. i "REQUEST_URI" jest wykluczone! nie pomogą w każdym CMS. Użyj 'debug_backtrace()' lub 'get_included_files()' –

+0

@ T.Todua te kwalifikatory są ważne, ale są poza zakresem tego pytania (i odpowiedzi). '$ _SERVER ['SCRIPT_NAME']' to wartość wymagana tutaj. – Martin

0

W pliku nadrzędnego, dodać tę linię przed tym plik dziecko:

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

A następnie w pliku potomnym, przeczytaj zmienną sesji:

$parent_file = $_SESSION['parent_file'] 
Powiązane problemy