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.
get_included_files
(PHP 4, PHP 5)
get_included_files — include または require で読み込まれたファイルの名前を配列として返す
説明
array get_included_files
( void
)
この関数は、 include、include_once、 require あるいは require_once によりスクリプトにロードされたすべてのファイルの名前を取得します。
返り値
すべてのファイル名を含む配列を返します。
最初にコールされたスクリプトは "include されたファイル" という扱いに なります。そのため、 include やその仲間たちにより 読み込まれたファイルの一覧に含めて表示されます。
複数回読み込まれているファイルも、 返される配列には一度しかあらわれません。
変更履歴
| バージョン | 説明 |
|---|---|
| 4.0.1 | PHP 4.0.1および以前のバージョンにおいて、 get_included_files() は読み込まれるファイルが拡張子 .php となることを仮定しており、他の拡張子のファイルは返されませんでした。 get_included_files() により返される配列は 連想配列であり、 include および include_once で読み込まれたファイルのみが一覧に含まれていました。 |
例
例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
注意
注意:
設定ディレクティブ auto_prepend_file で読み込まれたファイルは、返される配列には含まれません。
参考
- include - include
- include_once - include_once
- require - require
- require_once - require_once
- get_required_files() - get_included_files のエイリアス
donikuntoro at integraasp dot com
29-Aug-2011 12:32
cleggypdc at gmail dot com
23-Jun-2008 06:47
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
29-May-2008 10:57
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
04-Jul-2007 05:27
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
28-Aug-2006 07:30
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
08-Mar-2006 05:04
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
07-Sep-2004 11:08
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.
