如何防止在包含的文件中包含两次相同的文件?

Posted

技术标签:

【中文标题】如何防止在包含的文件中包含两次相同的文件?【英文标题】: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 文件,所以有两个相同的函数,查询。这会导致文件出现一些问题。 这个问题的解决方法是什么?

【问题讨论】:

【参考方案1】:

使用include_once 而不是include

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

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

【讨论】:

这根本不可能,你一定是做错了什么。你能给我们一些代码吗? ***.com/questions/10872629/… 乍一看,我在你的代码中找不到任何错误;你能给我们确切的错误吗(如果你没有,请在顶部添加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';

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

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

【讨论】:

以上是关于如何防止在包含的文件中包含两次相同的文件?的主要内容,如果未能解决你的问题,请参考以下文章

在页面中包含两次的脚本中调用函数

如何防止用户两次上传同一个文件WordPress

我如何包含一个可用于可执行文件和表单的图标?

如何防止在node.js中两次调用相同URL的获取

算法进阶面试题01——KMP算法详解输出含两次原子串的最短串判断T1是否包含T2子树Manacher算法详解使字符串成为最短回文串

需要包含两次预编译头