我目前在自动加载方面遇到很多问题。我目前正在使用多个目录来分割我的应用程序,我知道它可以更高效地构建,但是现在我只是想让自动加载器工作。
我的目录结构如下:
HTML
我尝试了不同的自动加载器,包括psr-0,但是我似乎无法正确实现它。例如我正在使用:
spl_autoload_register( function ($className) {
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($className, '\\')) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
require $fileName;
});
在我的index.php文件中,我包含了自动加载器:
require_once('/var/www/html/core/init.php');
我已将名称空间添加到会话类
namespace classes;
然后我调用会话类
if(!classes\session::exist('ip')){
但是我一直收到类似的错误:
require(session.php):无法打开流:第34行/var/www/html/core/init.php中没有此类文件或目录
我的目录结构错了吗?或者我没有正确使用psr-0?我坚持自己能做的事情。感谢。
编辑: 我现在可以在同一目录中实例化文件EG / classes /,但是当我在不同的目录中调用一个类时,而不是查找正确的文件夹 /var/www/html/app/fb_link.php ,它在 /var/www/html/classes/app/fb_link.php 中查找,然后当然因为没有文件而抛出错误。这可以解决吗?
答案 0 :(得分:0)
您的自动加载器功能返回" classes / session.php" for" classes \ session"。这意味着" / var / www / html /"必须在你的包含路径中。尝试添加:
set_include_path(implode(PATH_SEPARATOR, array(
'/var/www/html/',
get_include_path(),
)));
或更改自动加载器功能以包含完整文件路径:
require '/var/www/html/' . $fileName;
请告诉我这是否有帮助。