require_once 给出警告和致命错误

Posted

技术标签:

【中文标题】require_once 给出警告和致命错误【英文标题】:require_once giving warning and fatal error 【发布时间】:2013-11-11 08:13:12 【问题描述】:
public_html > config.php 

public_html > A > test_file.php

在 test_file.php 代码中

require_once("../config.php");

工作正常。 在dreamweaver中显示动态相关的文件(config.php)

public_html > includes > classes > allclasses.php

在 allclasses.php 代码中

require_once("../../config.php");

在dreamweaver中显示动态相关的文件(config.php)

当我在 test_file.php 中包含 allclasses.php 时

require_once("../config.php");
require_once("../includes/classes/allclasses.php");

在dreamweaver 中显示动态相关的文件(config.php、allclasses.php)

test_file.php 停止工作并在浏览器显示

Warning: require_once(../../config.php) [function.require-once]: 
failed to open stream: No such file or directory in .....\public_html\includes\classes\allclasses.php on line 11

使用 xampp 作为开发服务器。

【问题讨论】:

文件物理在那里:\public_html\includes\classes\allclasses.php 测试文件位于 public_html\A\test_file.php 【参考方案1】:

在包含内部包含时,最好使用绝对路径。所以你可以使用__DIR____FILE__ 常量来做到这一点,就像在test_file.php 中这样:

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

或者只是

require_once(realpath(__DIR__ . '/../config.php'));

【讨论】:

仍然错误警告:require_once(C:\xampp\htdocs\site\public_html\includes\classes../../config.php) [function.require-once]:无法打开流: __DIR__../config.php 之间没有斜线 好吧,这是一个不同的问题。你能发布整个错误信息吗? 警告:require_once(C:\xampp\htdocs\site\public_html\A) [function.require-once]:无法打开流:C:\xampp\htdocs\site\ 中的权限被拒绝public_html\includes\classes\allclasses.php 在第 11 行 看,C:\xampp\htdocs\site\public_html\A 是一个目录。您将无法包含目录。【参考方案2】:

使用绝对 url 路径而不是相对 url 路径。

试试这个:

require_once($_SERVER["DOCUMENT_ROOT"]."/config.php");

【讨论】:

【参考方案3】:

除非你调用类似chdir() 的东西,否则所有的 require/include 调用都是相对于被调用的 PHP 文件的目录(这里是 test_file.php)。这就是 allclasses.php 中的 require_once("../../config.php") 引发错误的原因。

在您的情况下,最简单的解决方法是从 allclasses.php 中删除 require_once("../../config.php"),如果它没有其他影响的话。

我建议使用 front controller,以确保调用的 PHP 脚本始终是同一个文件(并且 include/require 始终针对同一个目录),并且只做config.php 文件的所有包含一次。

【讨论】:

allclasses.php 很重要。 您的意思是从 allclasses.php 调用 config.php 对您很重要?为什么? 也许你可以确保当 allclasses.php 被调用时,config.php 总是已经包含在内(应该是前端控制器的情况,否则去雅各布森的答案)

以上是关于require_once 给出警告和致命错误的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:require_once():

Joomla3.6致命错误:require_once():需要打开失败

Joomla3.6致命错误:require_once():需要打开失败

致命错误:require_once() [function.require]:无法打开所需的 global.php

PHP代码重用与函数编写

require_once 致命错误(再一次)