如何防止在包含的文件中包含两次相同的文件?
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_once
或require_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';
您的脚本仅加载一次,所有其他包含尝试都将被忽略。
基于一个示例,您可以实现更适合您需求的类似解决方案。
【讨论】:
以上是关于如何防止在包含的文件中包含两次相同的文件?的主要内容,如果未能解决你的问题,请参考以下文章
算法进阶面试题01——KMP算法详解输出含两次原子串的最短串判断T1是否包含T2子树Manacher算法详解使字符串成为最短回文串