【问题标题】:How can I prevent to include same file twice in an included file?如何防止在包含的文件中包含两次相同的文件?
【发布时间】:2012-06-08 00:54:26
【问题描述】:

在主要的index.php 文件中,包含header.php。这两个文件都必须插入 session.php, database.php 等才能运行。但是当包含 header.php 时,有两个相同的 require/include 文件,所以有两个相同的函数,查询。这会导致文件出现一些问题。
这个问题的解决方法是什么?

【问题讨论】:

    标签: php include require


    【解决方案1】:

    使用include_once 而不是include

    include_once 语句在脚本执行期间包含并评估指定文件。这是一种类似于 include 语句的行为,唯一的区别是如果文件中的代码已经被包含,它将不会再次被包含。顾名思义,它只会被包含一次。

    http://php.net/manual/en/function.include-once.php

    【讨论】:

    • 这根本不可能,你一定是做错了什么。你能给我们一些代码吗?
    • 乍一看,我在你的代码中找不到任何错误;你能给我们确切的错误吗(如果你没有,请在顶部添加error_reporting(E_ALL);
    • 有趣的是,没有错误。我添加了这两个文件,但浏览器不显示任何内容
    • 您不应该回显 error_reporting(),只需添加行 error_reporting(E_ALL);。 (E_ALL 的6143 is the numeric level)。
    【解决方案2】:

    这是一个很老的问题,但我会回答这个问题,因为如果您正在寻找这个问题的答案,搜索引擎会指向这里。

    您不能相信用户,他们总是使用include_oncerequire_once 函数来加载您的脚本。为避免多次加载相同的脚本,您可以定义特定的常量并验证它是否已定义。

    你的脚本文件(test.php):

    <?php
    if(defined('MY_UNIQUE_SCRIPT')){
        return true;
    }
    
    const MY_UNIQUE_SCRIPT = true;
    
    echo __FILE__.PHP_EOL;
    

    如果你调试它:

    <?php
    //Lets debug it
    include 'test.php';
    include 'test.php';
    require 'test.php';
    require 'test.php';
    include 'test.php';
    

    您的脚本仅加载一次,所有其他包含尝试都将被忽略。

    基于一个示例,您可以实现更适合您需求的类似解决方案。

    【讨论】:

      猜你喜欢
      • 2013-10-25
      • 2012-02-01
      • 1970-01-01
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多