2012-05-01 42 views
11

Khi sử dụng PHP include, làm cách nào tôi có thể tìm ra tệp nào đang gọi số include? Tóm lại, tên tệp của phụ huynh là gì?Nhận tên tệp của tệp chạy PHP bao gồm

+0

Câu hỏi hay hơn là tại sao bạn cần biết điều này? Có lẽ có một cách tốt hơn để làm rõ ràng những gì bạn đang cố gắng hoàn thành. – Zimzat

Trả lời

11

Cách dễ dàng là gán một biến trong tệp gốc (trước khi đưa vào), sau đó tham chiếu biến đó trong tệp được bao gồm.

file phụ huynh:

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

Bao gồm File:

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

Bạn cũng có thể lộn xộn xung quanh với get_included_files() hoặc debug_backtrace() và tìm sự kiện này khi nào và nơi các tập tin có bao gồm, nhưng điều đó có thể hơi lộn xộn và phức tạp.

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

Tôi nghĩ điều này sẽ cho kết quả phù hợp khi có một phụ huynh duy nhất.

Do đó, tôi có nghĩa là tình huống mà phụ huynh không phải là một tệp bắt buộc hoặc tệp được bao gồm.

9

câu trả lời muộn, nhưng ...

tôi kiểm tra tên tập tin mẹ chạy bằng cách sử dụng:

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

Điều này sẽ được đánh giá cao hơn vì điều này mang lại câu trả lời đúng mà không cần phải chỉnh sửa các tệp vùng chứa cho bao gồm. Tôi có một bao gồm cần tên của tập tin container của nó và điều này chắc chắn nhịp đập thay đổi '$ var' giá trị trong hơn 100 trang khác như các câu trả lời khác đề nghị. – Martin

+1

** TRẢ LỜI ĐÁNH GIÁ CAO **! 'SCRIPT_NAME' trả về tệp đầu tiên nhất. và 'REQUEST_URI' đã hết hạn! họ sẽ không giúp đỡ trong bất kỳ CMS nào. Sử dụng 'debug_backtrace()' hoặc 'get_included_files()' –

+0

@ T.Todua các vòng loại này hợp lệ nhưng cũng nằm ngoài phạm vi của câu hỏi này (và câu trả lời). '$ _SERVER ['SCRIPT_NAME']' là giá trị cần thiết ở đây. – Martin

0

Trong tập tin phụ huynh, thêm dòng này trước khi đưa file trẻ:

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

Và sau đó trong tệp con, hãy đọc biến phiên:

$parent_file = $_SESSION['parent_file'] 
Các vấn đề liên quan