我有好奇心。如果PHP脚本包括自己,会发生什么?
我之所以问这个问题,是因为我有一个php文件,它为我的站点的所有<head>标记生成内容。其中包括站点的404 error page head标记。
如果直接访问生成这些head标记的php文件,则通过包含404 error page“假装”不存在,后者将404 status发送回客户端。
这就是文件系统的样子:
/
.htaccess <- (apache 404 handling)
404.php <- 404 error page
head.php <- '<head>' generator
...404.php包含:
<?php
header("HTTP/1.0 404 Not Found");
?>
<html>
<head>
<?php
$key = true;
include dirname(__FILE__) . "/head.php";
?>
</head>
<body>
lul. dead.
</body>
</html>head.php包含:
<?php
if(isset($key) && $key===true){
//code to generate <head> content
}else{
include dirname(__FILE__) . "/404.php";
}
?>$key告诉head.php,它是由另一个php文件包含的,而不是通过URL请求的。
因此,总而言之,如果我直接从我的web浏览器请求head.php (不是通过php includes访问它,只是通过http请求),它应该:
(a)意识到请求不是来自另一个php文件的include,那么
(b)包括404.php
(c)在line 2 of 404.php上发送404 status,然后,
(d)包括head.php。
因此,head.php最终将包括head.php。
会发生这种事吗?
发布于 2016-08-03 20:48:22
是的,确实如此。
注意:然而,可能会发生内部服务器错误。例如:
include.php
<?php
if(!isset($s)){
$s = 0;
}
if($s<10){
include "include.php";
$s++;
}
?>
test此脚本生成内部服务器错误。在错误发生之前,我没有检查文件可以自我包含多少次,但很明显,10次(或超过)次数足以导致错误。
无论是这个脚本还是PHP脚本都不能直接包含它自己。它必须通过包括包含原始脚本的单独脚本来做到这一点。
https://stackoverflow.com/questions/38753303
复制相似问题