繁体   English   中英

致命错误:未捕获的错误:找不到类“App\Config”

[英]Fatal error: Uncaught Error: Class 'App\Config' not found

我已经构建了一个自定义 MVC 框架。 本地工作正常,当我尝试让它在实时共享托管服务器上工作时,我会收到此错误:

浏览器中的错误消息:

致命错误:未捕获的错误:在 /www/htdocs/user/project/public/index.php:19 中找不到类 'App\Config' 堆栈跟踪:在 /www/htdocs/user/project/ 中抛出 #0 {main}第 19 行的 public/index.php

Composer.json 文件:

{
  "require": {
    "filp/whoops": "^2.3",
    "phpmailer/phpmailer": "^6.0"
  },
  "autoload": {
    "psr-4": {
      "Core\\": "core/",
      "App\\": "app/"
    }
  }
}

我的文件夹和文件结构:(整个项目在文件夹内:“项目”)

在此处输入图像描述

索引.php 文件

    <?php

/**
 * Front controller
 */

use App\Config;

/**
 * Composer autoloading
 */

require dirname(__DIR__) . '/vendor/autoload.php';

/**
 * Whoops Error and Exception handling
 */

if (Config::SHOW_ERRORS == true){
    $whoops = new \Whoops\Run;
    $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
    $whoops->register();
}

/**
 * Sessions
 */

session_start();

/**
 * Routing
 */

$router = new Core\Router();

// Add the routes
$router->add('', ['controller' => 'Home', 'action' => 'index']);

配置.php 文件:

<?php

/**
 * Application configuration
 */

namespace App;

class Config {

    /**
     * Database host
     * @var string
     */

    const DB_HOST = 'localhost';

    /**
     * Mail SMTP Port
     * @var int
     */

    const SMTP_PORT = '2525';
}

我部署到服务器的方法:

  1. 压缩本地文件并导出 mysql 数据库
  2. 上传 zip 到服务器 -> 解压
  3. 将数据库上传到 phpmyadmin
  4. 在配置文件中更改数据库凭据
  5. 运行composer install (我也试过: composer install --no-dev
  6. 完毕

我现在已经重复了这个过程几次,但它仍然无法正常工作

就我而言,问题是由在 Windows 中使用符号链接引起的。 我正在使用 WAMP 和 PHP 框架 CodeIgniter(版本 4.2.1)。 某些版本的 CodeIgniter 有这个问题。

可能的原因:

我认为原因是使用了 PHP 函数 file_exists。 在某些情况下,当路径包含带有某些字符的符号链接时,该函数会返回 FALSE。 或者问题在于清理文件名。

可能的解决方案:

  1. 请 CodeIgniter 的开发人员解决此问题。 我现在等不及了。
  2. 覆盖出现问题的框架的功能。 我花了太多时间来弄清楚这一点。
  3. 使用没有问题的旧版本 CodeIgniter。 当然,这还有其他缺点。
  4. 不要使用符号链接。 呸!
  5. 确保符号链接不包含任何“特殊”字符。

解决方案 5 对我来说是最简单的。 我必须删除符号链接名称中的方括号 (),这解决了问题。

也许这对其他人有帮助。

我刚刚尝试做同样的事情,它似乎工作,检查这个:

/index.php

<?php

require dirname(__DIR__) . '/vendor/autoload.php'; // It must be called first

use App\Config;

echo Config::get('test');
// Result: test

/App/Config.php

namespace App;

class Config 
{
    public function get($str)
    {   
        return $str;
    }
}

这是区分大小写的问题 - 您的自动加载规则使用app作为目录名称,但这实际上是App 这可能适用于不区分大小写的文件系统 (Windows),但不适用于区分大小写的文件系统 (Linux)。 您应该将自动加载规则修复为:

{
  "require": {
    "filp/whoops": "^2.3",
    "phpmailer/phpmailer": "^6.0"
  },
  "autoload": {
    "psr-4": {
      "Core\\": "Core/",
      "App\\": "App/"
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM