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 给出警告和致命错误的主要内容,如果未能解决你的问题,请参考以下文章
Joomla3.6致命错误:require_once():需要打开失败
Joomla3.6致命错误:require_once():需要打开失败