2011-06-22 24 views
1

我在各种包括文件顶部验证码:PHP require_once尝试包括第二次我的生产服务器上只

require_once("functions.php"); 

有时候,我需要包括我的几个包括文件生成一个页面,在我的本地服务器上这工作正常,因为上面的代码告诉它只包含functions.php一次(因此它不会尝试声明两次函数)。

当我上传到我的生产服务器,突然它试图包含的functions.php第二次,造成了严重错误,试图重新声明功能的第二次。

有什么在我的PHP配置我的生产服务器上会导致require_once不同的行为?

回答

3

您可以使用下面的代码:

require_once(realpath(dirname(__FILE__) . '/functions.php')); 

和如果functions.php位于根目录中的另一个目录中,则在functions.php之前修改路径位置。 功能的真实路径(目录名(FILE)需要根文件夹的路径所以,你应该在你的index.php的功能和修改,如果你的任何目录function.php如:

require_once (realpath(dirname(__FILE__) . '/your_directory_name/functions.php')); 

享受! !

+0

由于网站结构的变化,我有一个旧版本的functions.php在另一个目录中。我认为,因为我没有指定像这样PHP的绝对路径,所以它选择了两次。无论如何我已经删除了重复,但我不知道这些功能,所以谢谢! – Dan

+0

以上功能采用根文件夹路径。所以你应该在你的index.php中包含你的函数,并且修改你的funciton.php在任何目录中,例如:require_once(realpath(dirname(__ FILE__)。'/your_directory_name/functions.php')); –

0

老实说,我想不出任何会导致此行为,如果我知道一点关于你的网站是如何构成的,我可以提供一些关于如何以不同的方式构建它,这会不会发生一些建议。

的东西,我在我的网站做的是有这种设​​置的:

global.php < - 东西,如配置数据库,包括随机函数

的header.php <文件 - 基本的HTML头文件,global.php在这里是required_once。

然后在所有其他文件,只需要头文件,你应该没有冲突。如果你正在使用一个特定的框架(CakePHP,Kohana),那么这肯定会改变一些事情......就像我说的,没有足够的信息立即开始。

+0

感谢您的想法!事实证明,我在另一个目录(旧的)中有另一个同名的文件,并且因为我没有指定文件的绝对路径,所以PHP在某些情况下都选择了。我通过删除旧文件解决了这个问题,但我相信绝对路径上的其他答案会起作用... thx再次! – Dan

0

也许错误处理级别设置不同的2台服务器上?

如果我没有记错的话,require_once只会在多次调用时返回true。

没有与此结构可能有些怪异的结果:

加载(即使是假的)与include_once两次的文件,返回值将是真实的。

实施例:

<?php 
    var_dump(include_once 'fakefile.ext'); // bool(false) 
    var_dump(include_once 'fakefile.ext'); // bool(true) 
?> 

这是因为根据PHP中文件已被包含一次(即使它不存在)。

不确定这与require_once是否相同,但很可能是因为文档引用了include_once以表示此构造的预期行为。

0

如果您正在包含包含类的文件,您可能希望尝试使用__autoload,它应该防止多个包含/要求运行,并且阻止您列出一系列包含/要求。

+0

我没有听说过这个MC - 我会检查出来的!谢谢 – Dan

2

是否有可能你有重复的文件名为functions.php? 您的示例代表相对位置,是否有可能加载了两次?

也许要从函数文件中调试它将是 echo __FILE__

+0

感谢理查德 - 事实证明,我有另一个目录中的文件的第二个副本,由于网站结构的变化(我没有删除旧文件)。我不知道为什么它不是我的本地服务器上的问题,但我认为这是因为我没有指定绝对路径。 – Dan

2

检查你的路径设置,如果函数名是常见的,那很可能是另一个具有相同名字的文件正在被加载。除了呼应提到__FILE__值,只是尝试命名它,你知道的东西是独特的和/或使用像

绝对路径require_once dirname(__FILE__).'/functions.php';

+0

由于网站结构的变化,我有一个旧版的functions.php在另一个目录中浮动。我认为,因为我没有指定像这样PHP的绝对路径,所以它选择了两次。无论如何我已经删除了重复,但我不知道这些功能,所以谢谢! – Dan

相关问题