PHP 选项/信息 函数
在线手册:中文  英文

get_included_files

(PHP 4, PHP 5)

get_included_files返回被 include 和 require 文件名的 array

说明

array get_included_files ( void )

返回所有被 includeinclude_oncerequirerequire_once 的文件名。

返回值

返回所有文件名称的 array。

脚本最初被称为”被包含的文件“,所以脚本自身也会和 include 系列函数引用的脚本列在一起。

被多次 include 和 require 的文件在返回的 array 里只会列出一次。

更新日志

版本 说明
4.0.1 在 PHP 4.0.1 和之前的版本,本函数会假设所有被 required 的文件以 .php 结尾; 其他扩展名结尾的文件不会被返回。 get_included_files() 返回的 array 仅仅列出被 includeinclude_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 配置指令所包含的文件不会包含在返回的数组里。

参见


PHP 选项/信息 函数
在线手册:中文  英文

用户评论:

peter at olds dot co (2012-06-01 22:14:56)

In case anyone is wondering this function can NOT read into other files like get_defined_functions does.
Meaning I have ScriptA.php inside ScriptA.php I require ScriptB.php.
ScriptB.php requires ScriptC.php, ScriptD.php, etc. When I run the results of get_included_files() it will only show me ScriptB.php. Just an FYI.

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.

cleggypdc at gmail dot com (2008-06-23 09:47:59)

If you want to get the relative path of an included file, from within itself use this function. If you ever have a include file thats path may not be static, this can save some time.

<?php
 
function get_current_files_path($file_name)
 {
   
//find the current files directory
   
$includes get_included_files();
   
$path "";
   for (
$i=0$i count($includes); $i++)
   {
     
$path strstr($includes[$i], $file_name);
     if (
$path != false)
     { 
       
$key $i;
       break;
     }
   } 
   
$path str_replace(getcwd(), ""$includes[$key]);
   
$path str_replace("\\""/"$path);
   
$path str_replace($file_name""$path);
   
$path ltrim($path"/");
   
   return 
$path;
 }
?>

sam at consideropen dot com (2008-05-29 13:57:56)

If you want to avoid the filepaths, just wrap get_included_files() inside preg_replace() to get rid of path info:

<?php
$filenames 
preg_replace("/\/.*\//"""get_included_files());
?>

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.

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.

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.

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.

易百教程