首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP自包含循环(概念)

PHP自包含循环(概念)
EN

Stack Overflow用户
提问于 2016-08-03 20:45:51
回答 1查看 309关注 0票数 0

我有好奇心。如果PHP脚本包括自己,会发生什么?

我之所以问这个问题,是因为我有一个php文件,它为我的站点的所有<head>标记生成内容。其中包括站点的404 error page head标记。

如果直接访问生成这些head标记的php文件,则通过包含404 error page“假装”不存在,后者将404 status发送回客户端。

这就是文件系统的样子:

代码语言:javascript
复制
/
  .htaccess <- (apache 404 handling)
  404.php <- 404 error page
  head.php <- '<head>' generator
  ...

404.php包含:

代码语言:javascript
复制
<?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包含:

代码语言:javascript
复制
<?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

会发生这种事吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-03 20:48:22

是的,确实如此。

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

include.php

代码语言:javascript
复制
<?php
    if(!isset($s)){
        $s = 0;
    }
    if($s<10){
        include "include.php";
        $s++;
    }
?>
test

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

无论是这个脚本还是PHP脚本都不能直接包含它自己。它必须通过包括包含原始脚本的单独脚本来做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38753303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档