php 尝试加载具有绝对路径的类在宿主上不起作用

ct3nt3jp  于 2022-12-02  发布在  PHP
关注(0)|答案(1)|浏览(107)

我已经创建了下一个类来自动加载其他类:

declare(strict_types=1);

namespace Framework;

if (!defined('DS')) {
    define('DS', DIRECTORY_SEPARATOR);
}
if (!defined('BD')) {
    define('BD', dirname(__DIR__));
}

use Exception;

class Autoloader
{
    private static ?Autoloader $instance = null;

    public static function getInstance(): Autoloader
    {
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }

        return self::$instance;
    }

    public function __construct()
    {
        spl_autoload_register([$this, 'autoload'], true, true);
        
    }

    public function autoload($class): void
    {
        try {
            $newclass = str_replace('\\', '/', $class);
            $parts = explode(DS, $newclass);
            $filename = BD . DS . implode(DS, $parts) . '.php';
            if (file_exists($filename)) {
                require_once $filename;
            } else {
                throw new Exception('Class File not Found: ' . $filename);
            }
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
}

Autoloader::getInstance();

这是我的项目的目录和文件结构:

+project
|
+public (root)
|    +----index.php (.htaccess entry point)
|
+FrameWork
     +----App
     |    +----ClDetector.php
     |    +----Core.php
     +----Autoloader.php

当我尝试加载ClDetector.php时,测试成功。

稍后,当我尝试加载Core.php时,我得到错误:

但服务器上存在这两个文件:

我在linux服务器上得到这个错误;在windows 11上本地主机工作得很好,我不知道发生了什么...或者如何解决这个问题...

ExceptionHandler
File: /home/vol1_1/epizy.com/epiz_33082351/htdocs/FrameWork/Autoloader.php

Line: 54 Level: Not Set

Description: Class File not Found: /home/vol1_1/epizy.com/epiz_33082351/htdocs/Framework/App/Core.php

BackTrace Log:

Magic Call Method: (Framework\Autoloader)->autoload()
/home/vol1_1/epizy.com/epiz_33082351/htdocs/public/index.php 16 calling Method: spl_autoload_call()
5t7ly7z5

5t7ly7z51#

是否尝试将目录从FrameWork重命名为Framework
小写的w

相关问题