【问题标题】:Fatal error: Class not found even though file is included which contains the class致命错误:即使包含包含该类的文件,也找不到类
【发布时间】:2015-02-10 06:44:00
【问题描述】:

我只是想在本地运行我从服务器复制的网站。 在我的config.php:

define ( 'DB_SERVER', '127.0.0.1' );
define ( 'DB_USERNAME', 'user' );
define ( 'DB_PASSWORD', 'password' );
define ( 'DB_DATABASE', 'database' );

class DB_Class {
    function __construct() {
        $connection = mysql_connect ( DB_SERVER, DB_USERNAME, DB_PASSWORD ) or die ( 'Connection error -> ' . mysql_error () );
        mysql_select_db ( DB_DATABASE, $connection ) or die ( 'Database error -> ' . mysql_error () );
    }
}

在我的user.php

include_once 'config.php';

class User {
    // Database connect
    public function __construct() {
        $db = new DB_Class ();
    }
}

在我的index.php:

session_start ();
include_once ('classes/user.php');
$uobj = new User ();

现在,每当我尝试创建 User 类的对象时,它都会在我尝试的行(在本例中为第 6 行)返回一个 Fatal error: Class 'DB_Class' not found。虽然它在服务器上工作得非常好。

我试图将 User 类扩展为 DB_Class 类,但在我尝试扩展的那一行又出现了同样的错误。

请大家指出问题所在。谢谢。

【问题讨论】:

  • 无论您在哪里实例化 User 对象,都包含 user.php 吗? (外部 user.php 文件)
  • 是的,我猜是用户对象创建成功,但我认为问题出在 user.php 中创建 DB_class 对象的地方。也许是一些权限错误。抱歉,我对此了解不多。
  • 尝试 $db = new \DB_Class ();
  • 如果你使用require_once而不是include_once会发生什么?
  • @Robbert 包含问题是我建议使用require_once 代替诊断的原因——在无法找到的文件上使用require_once 是一个致命错误,因此它应该改变了结果。

标签: php mysql database


【解决方案1】:

您的站点结构似乎是使用名为 classes 的文件夹中的两个类文件设置的。正如link 所暗示的那样,包含中的相对路径很少能顺利进行,因为它是用于所有包含的调用脚本的路径,包括其他包含文件中的那些。除非您在路径中指定了 classes 文件夹,否则 index.php 不会知道 config.php 文件的位置。您应该在您的 user.php 文件中执行此操作。

include_once $_SERVER['DOCUMENT_ROOT'] . '/classes/config.php';

或者使用

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

任何一个都将删除相对链接并允许文件包含在目录结构中的任何位置。

【讨论】:

  • 有一件事我仍然很困惑,如果 php 在我的相对路径中找不到我的文件,为什么它没有给出任何错误?有什么想法吗?
  • 这里你也可以使用directory_separator constant来让你的应用同时兼容windows和linux
  • @semsem 谢谢。它也很有用。
  • include 仅引发警告,因此如果未启用该级别的错误报告,您将看不到它。然而,Require 会抛出一个致命错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2022-07-19
  • 1970-01-01
相关资源
最近更新 更多