有关include和@include的任何建议

时间:2012-03-18 20:05:30

标签: php

当我使用时:

include "../common/common_functions.php";
include "../common/functions.php";
include '../../common/global_functions.php';

我的浏览器给了我很多警告,但是当我使用时:

@include "../common/common_functions.php";
@include "../common/functions.php";
@include '../../common/global_functions.php';

它正在运作。我知道它们之间有什么区别,但是有没有其他解释因为文件存在并且它与@一起使用但我知道使用它并不好!有什么建议可能是其他原因吗?

它给了我这个错误:

Warning: include(../../common/constants.php) [function.include]: failed to open stream: No such file or directory in /var/www/ebelejnik/trunk/src/www/root/teadmin/common/common_functions.php on line 4
Warning: include() [function.include]: Failed opening '../../common/constants.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/ebelejnik/trunk/src/www/root/teadmin/common/common_functions.php on line 4

我理解为什么它会给我这些错误。因为我创建了subdir,我的文件系统如下所示:

/root /common /teadmin /common /admin_pages

当我从/teadmin/common调用/teadmin/admin_pages中的文件时,它会开始执行它,但是它会调用来自/root/common的多个文件而无法找到它们,因为我使用了类似的路径这样:

include '../common/constants.php';

当我这样做的时候:

include '../../common/constants.php';

这是来自common_functions.php中的文件/root/teadmin/common/。它是从/root/teadmin/admin_pages/开始的第二种方式,但在我调用时/root/teadmin/给出了一个错误。这样做是否有问题:

include '../common/constants.php';
@include '../../common/constants.php';

4 个答案:

答案 0 :(得分:3)

@是php中的错误抑制运算符

http://php.net/manual/en/language.operators.errorcontrol.php

错误很好,这是php与你沟通的方式。他们可能值得研究。也许您正在使用已弃用的功能,您也应该发布错误。

答案 1 :(得分:1)

您需要记住,使用浏览器请求的脚本路径计算..,而不是当前include d脚本。

您可以使用以下命令构建相对于当前脚本的路径:

include __DIR__ . "/../common/common_functions.php";

或早期的PHP版本:

include dirname(__FILE__) . "/../common/common_functions.php";

答案 2 :(得分:0)

如果怀疑相对路径如何工作以及PHP如何将工作目录设置为调用的脚本,那么将所有路径设为绝对路径:

include "$_SERVER[DOCUMENT_ROOT]/common/constants.php";
include "$_SERVER[DOCUMENT_ROOT]/common/functions.php";

它们与“Web服务器根目录”相关。 (注意,缺少数组键引号在双引号上下文中有效,并且仅在那里。)

答案 3 :(得分:-2)

@是一个沉默运算符。这隐藏了所有警告,因此您可以发出一些警告:

if (!@include('some_file.php')){
    echo 'There is a problem with script';
    exit();
}