文字

get_included_files

(PHP 4, PHP 5, PHP 7)

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

说明

array get_included_files ( void )

返回所有被 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 配置指令所包含的文件不会包含在返回的数组里。

参见

  • include - include
  • include_once - include_once
  • require - require
  • require_once - require_once
  • get_required_files() - 别名 get_included_files

用户评论:

[#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.

上一篇: 下一篇: