我的问题是绝对路径和一般路径。我写了这是000webhost,因为它可能是一个特定于主机的问题,所以它就在这里。
与任何主机一样,此主机在根目录中有一个public_html文件夹。我已经把图片,CSS,JS文件放在那个文件夹里了。此外,还有一个index.php和一个install.php。应用程序的其余部分位于public_html (../public_html)之上的名为app的目录中。我在根目录中创建了一个constant.php,在那里我创建了一个值为dirname(__FILE__) . '/app/'的ABSOLUTE_PATH常量。spl_autoload_register()使用这个常量来装入类,但它不起作用。
现在,您可能认为我做错了什么,但是,在调用spl_autoload之前,我必须加载app/libs/目录中的类Autoload.php。另外,我加载了也在app/libs目录中的User.php,它们都工作得很好。
所以,我的问题是,为什么ABSOLUTE_PATH可以与Autoload.php和User.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中设置的。
发布于 2013-11-08 18:22:23
我解决了这个问题。这是非常基本的,这是非常令人沮丧的,因为我失去了因为它的日子。问题出在文件名上。我是在windows上开发的,它不区分大小写,但将我的文件放在区分大小写的linux上。因此,Libs_Bootstrap位于一个名为bootstrap.php的文件中,但文件名为Bootstrap.php。这是非常基础的。今日教训:始终使用区分大小写的文件。
生活的一课:学习Linux
https://stackoverflow.com/questions/19839667
复制相似问题