©
Ce document utilise Manuel du site Web PHP chinois Libérer
(PHP 4, PHP 5, PHP 7)
get_included_files — 返回被 include 和 require 文件名的 array
返回所有被 include 、 include_once 、 require 和 require_once 的文件名。
返回所有文件名称的 array。
脚本最初被称为”被包含的文件“,所以脚本自身也会和 include 系列函数引用的脚本列在一起。
被多次 include 和 require 的文件在返回的 array 里只会列出一次。
版本 | 说明 |
---|---|
4.0.1 | 在 PHP 4.0.1 和之前的版本,本函数会假设所有被 required 的文件以 .php 结尾; 其他扩展名结尾的文件不会被返回。 get_included_files() 返回的 array 仅仅列出被 include 和 include_once 所包含的文件。 |
Example #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" ;
}
?>
以上例程会输出:
abc.php test1.php test2.php test3.php test4.php
Note:
使用 auto_prepend_file 配置指令所包含的文件不会包含在返回的数组里。
[#1] zweibieren at yahoo dot com [2015-06-08 11:52:05]
In 5.4.37, list entries are the full pathname to the script.
/home/physpics/physpics.com/test/xxxDefiner.php
[#2] donikuntoro at integraasp dot com [2011-08-29 03:32:41]
This function aims to perform filtering of files that have been included :
<?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;
}
}
?>
Usage :
<?php
$toBeInclude = array('/data/your_include_files_1.php',
'/data/your_include_files_2.php',
'/data/your_include_files_3.php',
);
setIncludeFiles($toBeInclude);
?>
Return false if something goes wrong.
[#3] yarco dot w at gmail dot com [2007-07-03 20:27:04]
If you have a MAIN php script which you don't want to be included by other scripts, you could use this function. For example:
main.php:
<?php
function blockit()
{
$buf = get_included_files();
return $buf[0] != __FILE__;
}
blockit() and exit("You can not include a MAIN file as a part of your script.");
print "OK";
?>
So other script couldn't include main.php to modify its internal global vars.
[#4] indigohaze at gmail dot com [2006-08-28 10:30:58]
Something that's not noted in the docs, if a file is included remotely and you do a get_included_files() in the include itself it will *not* return the document that included it.
ie:
test2.php (server 192.168.1.14):
<?php
include("http://192.168.1.11/test/test3.php");
?>
test3.php (server 192.168.1.11):
<?php
$files = get_included_files();
print_r($files);
?>
returns:
Array ( [0] => /var/www/localhost/htdocs/test/test3.php )
Which means you can use get_included_files() to help intercept and prevent XSS-style attacks against your code.
[#5] RPaseur at NationalPres dot org [2006-03-08 08:04:40]
As is often the case, YMMV. I tried the __FILE__ and SCRIPT_FILENAME comparison and found this:
SCRIPT_FILENAME: /var/www/cgi-bin/php441
__FILE__: /raid/home/natpresch/natpresch/RAY_included.php
As an alternative:
count(get_included_files());
Gives one when the script is standalone and always more than one when the script is included.
[#6] keystorm :at: gmail dotcom [2004-09-07 14:08:55]
As of PHP5, this function seems to return an array with the first index being the script all subsequent scripts are included to.
If index.php includes b.php and c.php and calls get_included_files(), the returned array looks as follows:
index.php
a.php
b.php
while in PHP<5 the array would be:
a.php
b.php
If you want to know which is the script that is including current script you can use $_SERVER['SCRIPT_FILENAME'] or any other similar server global.
If you also want to ensure current script is being included and not run independently you should evaluate following expression:
__FILE__ != $_SERVER['SCRIPT_FILENAME']
If this expression returns TRUE, current script is being included or required.