PHP自包含循环(概念)

时间:2016-08-03 20:45:51

标签: php include

我有好奇心。如果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告诉head.php它被另一个php文件包含,而不是通过URL请求。

总而言之,如果我直接从我的网络浏览器请求php includes(不通过include访问它,只需通过http请求),它应该:

(a)意识到请求不是来自其他php文件的404.php,然后是(b)包括{{1} },(c)404 status line 2上发送404.php,然后,(d) 包括head.php

因此,最终head.php将包含head.php

会发生这种情况吗?

1 个答案:

答案 0 :(得分:1)

是的,确实如此。

注意:但是,可能会发生内部服务器错误。例如:

include.php

<?php
    if(!isset($s)){
        $s = 0;
    }
    if($s<10){
        include "include.php";
        $s++;
    }
?>
test

此脚本产生内部服务器错误。我没有检查文件在错误发生之前可以自包含多少次,但显然10次(或者多次)足以导致错误。

要么PHP脚本不能直接包含自身。它必须通过包含一个包含原始脚本

的单独脚本来实现