get_included_files

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

get_included_files返回包含或需要文件的名称数组

说明

get_included_files(): array

获取使用 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

参见

添加注释

用户贡献的注释 7 个注释

23
keystorm :at: gmail dotcom
19 年前
从 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,则当前脚本正在被包含或需要。
14
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 来修改其内部全局变量。
5
D
4 年前
现有文档可能没有清楚地说明返回的列表包含嵌套的包含文件。

也就是说,如果 A.php 包含 B.php,而 B.php 包含 C.php,则从 A.php 内部调用 get_included_files() 时返回的结果将包含 'C.php'。
4
RPaseur at NationalPres dot org
18 年前
正如经常发生的那样,YMMV。我尝试了 __FILE__ 和 SCRIPT_FILENAME 比较,发现以下内容

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

作为替代方案

count(get_included_files());

当脚本是独立的时返回 1,而当脚本被包含时总是大于 1。
3
donikuntoro at integraasp dot com
12 年前
此函数旨在执行对已包含文件的过滤

<?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。
0
Aurelien Marchand
2 年前
这是一种模拟 Python 的 '__name__ = "__main__"' 的好方法

<?php
if(get_included_files()[0] === __FILE__) doStuff();
?>
-16
indigohaze at gmail dot com
17 年前
文档中没有提到的一点是,如果一个文件被远程包含,并且你在包含本身中执行 get_included_files(),它*不会*返回包含它的文档。

例如
test2.php (服务器 192.168.1.14)
<?php

include("http://192.168.1.11/test/test3.php");

?>

test3.php (服务器 192.168.1.11)

<?php

$files
= get_included_files();

print_r($files);
?>

返回

Array ( [0] => /var/www/localhost/htdocs/test/test3.php )

这意味着您可以使用 get_included_files() 来帮助拦截和阻止针对您代码的 XSS 式攻击。
To Top