使用include_once()时的PHP警告

Aad*_*adi 5 php

当我尝试在php中使用include_once包含一个文件时显示警告:include_once(1)[function.include-once]:无法打开流:/var/www/test/content_box.php中没有这样的文件或目录在线2.实际文件在我的目录中.我正在使用ubuntu(OS)我们如何防止此警告.如果有人知道请帮助我

tho*_*ter 15

注意:我的答案结果证明很受欢迎,但我没有真正回答这个问题.这不是关于抑制警告,而是关于修复导致警告的错误.我会留在这里为后代.


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

if (file_exists($includefile)) {
  include_once($includefile);
}
Run Code Online (Sandbox Code Playgroud)

(显然用您包含的文件替换$ includefile)

建议快速而肮脏的方法是使用@表达式来抑制警告.

@include_once($includefile);
Run Code Online (Sandbox Code Playgroud)

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

正如其他人所指出的那样,"1"是PHP文件的一个不寻常的文件名,但我认为你有一个特定的理由这样做.

  • @col.弹片:OP说"防止这个警告".这是模棱两可的:它可能意味着目标是解决创建警告的问题,或者是为了使警告本身无声.@thomasrutter回答了两种可能的解释,但需要注意的是,警告不是一个好主意.从更广泛的意义上讲,在某些情况下,静音警告是有用的,因此让人们了解这种语言功能是很好的,但重要的是要确保它不会被误用. (3认同)
  • 第一个是讨论,但第二个是可怕的 (2认同)
  • 你到底跟谁说话?我可以向你保证,我确实理解PHP错误处理.为什么你表现得好像我声称@是个好主意?我从来没有声称过.使用@可以掩盖代码中的其他错误,这就是您不应该使用它的原因.我不知道也许我犯了在这里喂养巨魔的错误.如果你能告诉我你认为我的答案错在哪里,我会解决它.如果你只是在没有指出具体细节的情况下贬低我,那么我什么也做不了. (2认同)
  • @col.弹片:我的观点是你似乎误读了他原来的陈述."快速而肮脏的方式"这一短语的前四个单词在逻辑上对后续单词至关重要.拥有强大的英语语法技巧的人会意识到这一点,并且通常会得出结论,对于任何可能采用其他方法的情况,这都是"**NOT**".也许问题不在于成语理解那么多的语法.除非你绝望,否则"快速和肮脏"通常被认为是不受欢迎的. (2认同)

nic*_*ckf 8

显然,这里的问题是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");
Run Code Online (Sandbox Code Playgroud)

它可能有点超过顶部,但您可以确定知道PHP在哪里寻找您的文件.

  • 如果你有PHP 5.3,请使用`__DIR__`. (2认同)