php 注销已经require的文件,PHP 返回被 include 和 require 文件名的 array

这篇博客介绍了PHP的get_included_files()函数的用途和用法,包括在文件包含和路径处理中的应用。通过示例展示了如何检查当前脚本是否被直接运行还是被其他脚本包含,以及如何获取相对路径和防止XSS攻击。还提到了该函数在不同PHP版本中的行为差异。
摘要由CSDN通过智能技术生成

用户评论:

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 :

if((count($arrayInc)>0)&&(count($incFiles)>0)){$aInt=array_intersect($arrayInc,$incFiles);

if(count($aInt)>0){

returnfalse;

}elseif(count($aInt)<1) {

foreach($arrayIncas$inc){

if(is_file($inc))

include($inc);

else{

returnfalse;

}

}

}

}else{

returnfalse;

}

}?>

Usage :

$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.

{//find the current files directory$includes=get_included_files();$path="";

for ($i=0;$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:

$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:

{$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):

test3.php (server 192.168.1.11):

$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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值