当我使用时:
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';
答案 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();
}