2024 日本 PHP 研討會

get_included_files

(PHP 4, PHP 5, PHP 7, PHP 8)

get_included_files傳回包含已引入或必要檔案名稱的陣列

說明

get_included_files(): 陣列

取得所有已使用 includeinclude_oncerequirerequire_once 引入的檔案名稱。

參數

此函數沒有參數。

回傳值

返回一個包含所有已包含檔案名稱的陣列。

最初被呼叫的腳本也被視為「已包含檔案」,因此它會與被 `include` 及其相關函數所引用的檔案一起列出。

即使多次包含或引入相同的檔案,在返回的陣列中也只會出現一次。

範例

範例 #1 `get_included_files()` 範例

<?php
// 這個檔案是 abc.php

include 'test1.php';
include_once
'test2.php';
require
'test3.php';
require_once
'test4.php';

$included_files = get_included_files();

foreach (
$included_files as $filename) {
echo
"$filename\n";
}

?>

以上範例會輸出:

/path/to/abc.php
/path/to/test1.php
/path/to/test2.php
/path/to/test3.php
/path/to/test4.php

參見

新增註解

使用者貢獻的註解 6 則註解

keystorm :at: gmail dotcom
20 年前
從 PHP5 開始,這個函數似乎會返回一個陣列,其中第一個索引是所有後續腳本被包含到的腳本。
如果 index.php 包含了 b.php 和 c.php 並呼叫 `get_included_files()`,返回的陣列如下所示:

index.php
a.php
b.php

而在 PHP<5 中,陣列會是:

a.php
b.php

如果你想知道哪個腳本包含了目前的腳本,你可以使用 `$_SERVER['SCRIPT_FILENAME']` 或其他類似的伺服器全域變數。

如果你還想確保目前的腳本是被包含而不是獨立運行的,你應該評估以下表達式:

__FILE__ != $_SERVER['SCRIPT_FILENAME']

如果這個表達式返回 TRUE,則表示目前的腳本是被包含或引入的。
yarco dot w at gmail dot com
17 年前
如果你有一個不想被其他腳本包含的主要 PHP 腳本,你可以使用這個函數。例如:

main.php
<?php
function blockit()
{
$buf = get_included_files();
return
$buf[0] != __FILE__;
}

blockit() and exit("您不能將一個主要檔案作為腳本的一部分引入。");

print
"OK";
?>

這樣其他腳本就無法引入 main.php 來修改其內部的全域變數。
D
4 年前
現有的文件可能沒有清楚說明返回的列表也包含巢狀引入的檔案。

也就是說,如果 A.php 引入了 B.php,而 B.php 引入了 C.php,那麼在 A.php 內部呼叫 get_included_files() 時返回的結果將包含 'C.php'。
RPaseur at NationalPres dot org
18 年前
情況通常如此,結果可能有所不同。我嘗試了 __FILE__ 和 SCRIPT_FILENAME 的比較,發現了以下結果

SCRIPT_FILENAME: /var/www/cgi-bin/php441
__FILE__: /raid/home/natpresch/natpresch/RAY_included.php

作為替代方案

count(get_included_files());

當腳本獨立運行時,返回 1;當腳本被引入時,總是返回大於 1 的值。
donikuntoro at integraasp dot com
13 年前
這個函式的目的是對已引入的檔案執行過濾

<?php
function setIncludeFiles($arrayInc = array()){
$incFiles = get_included_files();
if((
count($arrayInc)>0)&&(count($incFiles)>0)){
$aInt = array_intersect($arrayInc,$incFiles);
if(
count($aInt)>0){
return
false;
}elseif(
count($aInt)<1) {
foreach(
$arrayInc as $inc){
if(
is_file($inc))
include(
$inc);
else{
return
false;
}
}
}
}else{
return
false;
}
}
?>

用法

<?php
$toBeInclude
= array('/data/your_include_files_1.php',
'/data/your_include_files_2.php',
'/data/your_include_files_3.php',
);
setIncludeFiles($toBeInclude);
?>

如果出現錯誤,則返回 false。
Aurelien Marchand
2 年前
這是模擬 Python 的 '__name__ = "__main__"' 的好方法

<?php
if(get_included_files()[0] === __FILE__) doStuff();
?>
To Top