Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用include_once()时出现PHP警告_Php - Fatal编程技术网

使用include_once()时出现PHP警告

使用include_once()时出现PHP警告,php,Php,当我尝试在php中使用include_包含一个文件时,它会显示如下警告 警告:include_once(1)[function.include once]:无法打开流:第2行的/var/www/test/content_box.php中没有这样的文件或目录 实际上,这个文件在我的目录中。我正在使用ubuntu(OS) 我们如何防止出现此警告?对于php文件来说,这是一个非常不寻常的名称-一个位数1。 你确定你有这样一个文件吗?注意:我下面的答案很受欢迎,但我没有正确回答这个问题。这不是关于抑制警

当我尝试在php中使用include_包含一个文件时,它会显示如下警告

警告:include_once(1)[function.include once]:无法打开流:第2行的/var/www/test/content_box.php中没有这样的文件或目录

实际上,这个文件在我的目录中。我正在使用ubuntu(OS)
我们如何防止出现此警告?

对于php文件来说,这是一个非常不寻常的名称-一个位数
1
。 你确定你有这样一个文件吗?

注意:我下面的答案很受欢迎,但我没有正确回答这个问题。这不是关于抑制警告,而是关于修复导致警告的错误。我将把它留给子孙后代


防止警告的正确方法是先检查第一个警告是否存在,如果不存在,不要尝试包含它

if (file_exists($includefile)) {
  include_once($includefile);
}
(显然,用包含的文件替换$includefile)

快速而肮脏的方法是用@expression抑制警告,我不推荐这样做

@include_once($includefile);
请注意,当以这种方式抑制警告时,PHP的错误处理代码仍在运行,但PHP的error_reporting ini值暂时更改为忽略它。根据经验,这不是一个好主意,因为它可以掩盖其他错误


正如其他人所指出的,“1”对于PHP文件来说是一个不寻常的文件名,但我假设您有这样做的特定原因。

显然,这里的问题是PHP找不到您试图包含的文件。为了减少对当前路径的混淆,我通常将其设置为如下绝对路径:

// inc.php is in the same directory:
include (dirname(__FILE__) . "/inc.php");

// inc.php is in a subdirectory
include (dirname(__FILE__) . "/folder/inc.php");

// inc.php is in a parent directory
include (dirname(dirname(__FILE__)) . "inc.php");
include ( ('header.php') or die('Include file not found.') );

这可能有点过头了,但您可以肯定知道PHP在哪里查找您的文件。

您可能正在尝试这样的语句:

include('header.php') or die('Include file not found.');
在这种情况下,发生的是运算符优先级,它是这样计算的:

// inc.php is in the same directory:
include (dirname(__FILE__) . "/inc.php");

// inc.php is in a subdirectory
include (dirname(__FILE__) . "/folder/inc.php");

// inc.php is in a parent directory
include (dirname(dirname(__FILE__)) . "inc.php");
include ( ('header.php') or die('Include file not found.') );
由于字符串
'header.php'
的计算结果不为false,因此在此上下文中将其转换为
1

可以通过重新排列括号来解决此问题:

(include 'header.php') or die('Include file not found.');

请注意,
include
是一个关键字而不是函数调用,因此其参数不需要括号。

(1)?那是什么?至少把扩展放在上面[include_once('1.php');当然,“防止警告”是指如何正确地包含文件,不是吗?@Ben它更可能是某个函数的布尔结果,被抛到一根弦上:)@OP-你应该听听这里的榴弹上校:^第一个是要讨论的,但第二个是可怕的,这就是为什么我用它作为不该做的例子。你到底在跟谁说话?我可以向您保证,我确实理解PHP错误处理。你为什么表现得好像我在说“这是个好主意”?我从来没有这样说过。使用@可以掩盖代码中的其他错误,这就是为什么不应该使用它。我不知道也许我在这里喂巨魔是个错误。如果你能告诉我你认为我的答案哪里错了,我会改正的。如果你只是贬低我而不指出细节,那么我什么也做不了。@Schraspel上校:我的意思是你似乎误读了他的原话。短语“快速而肮脏的方式”的前四个词在逻辑上对后面的词至关重要。有很强英语语法能力的人会意识到这一点,并且通常会得出结论,对于任何可能采用另一种方法的情况,这“不是”一个建议。也许问题不在于语法,而在于习语理解。“快而脏”通常被认为是不受欢迎的,除非你绝望。@Spraspel上校:OP说“阻止这个警告”。这是不明确的:这可能意味着目标是解决产生警告的问题,或者是让警告本身保持沉默@托马斯鲁特回答了这两种可能的解释,并警告说,压制警告不是一个好主意。从更广泛的意义上讲,在某些情况下,让警告静音是很有用的,因此让人们知道这种语言功能是很好的,但重要的是要确保它没有被误用。如果你有PHP5.3,也可以使用
\uuuu DIR\uuu