0

我的问题是绝对路径和一般路径。我写道这是 000webhost 因为它可能是特定于主机的问题,所以在这里。

与任何主机一样,该主机public_html在根目录中有一个文件夹。我已将图像、CSS、JS 文件放在该文件夹中。此外,还有一个index.php和一个install.php。该应用程序的其余部分位于public_html (../public_html)名为app. 我constant.php在根中创建了一个值,我在其中创建了ABSOLUTE_PATH一个值为 的常量dirname(__FILE__) . '/app/'spl_autoload_register()使用该常量来加载类,但它不起作用。

现在,您可能认为我做错了什么,但是在spl_autoload调用之前,我必须加载目录Autoload.php中的类app/libs/。另外,我加载User.php它也在app/libs目录中,它们都工作正常。

所以,我的问题是,为什么ABSOLUTE_PATH使用Autoload.phpandUser.php而不是在spl_autoload_register. 这是目录树...

root
    --- app
        --- libs
            - Autoload.php
            - User.php
    --- public_html
        -index.php
        -install.php
    - constants.php

就是这样。重复。在 install.php 中,使用此路径加载 Autoload.php 有效

ABSOLUTE_PATH . libs/Autoload.php
ABSOLUTE_PATH . libs/User.php

但在 Autoload.php 中,这样的东西不起作用

ABSOLUTE_PATH . libs/Bootstrap.php

我知道这是另一个“路径”问题,没有多少人想看到它,但我已经尝试解决它 3 天了,如果我不这样做,我将无法继续我的申请。

预先感谢您的所有答案

编辑:我以为我不必发布Autoload课程,但在这里......

class Autoload
{

    public function classAutoloader($class) {
        $container = '';
        $delim = explode('_', $class);

        $file =  ABSOLUTE_PATH . implode('/', $delim) . '.php';

        if(!is_readable($file)) {
            return false;
        }

        include_once $file;
    }
}

这行代码

$delim = explode('_', $class);

是因为类的全名是Libs_Bootstrap如此拆分字符串为 ABSOLUTE_PATH/libs/Bootstrap.php。请注意,绝对路径常量是constants.php在根中的 which 中生成的。

4

1 回答 1

0

我解决了这个问题。这是非常基本的,非常令人沮丧,因为我因此而失去了几天。问题出在文件名上。我在不区分大小写的 Windows 上进行开发,但将我的文件放在区分大小写的 Linux 上。因此,Libs_Bootstrap 位于名为 bootstrap.php 的文件中,但调用了文件 Bootstrap.php。这是非常基本的。每日一课:始终使用区分大小写的文件。

生活的一般教训:学习 Linux

于 2013-11-08T10:22:22.703 回答