自动加载问题[编辑]

时间:2015-12-21 11:45:11

标签: php session autoloader

我目前在自动加载方面遇到很多问题。我目前正在使用多个目录来分割我的应用程序,我知道它可以更高效地构建,但是现在我只是想让自动加载器工作。

我的目录结构如下:

HTML

    • 的config.php
    • db.php中
    • register.php
    • reset.php
    • session.php文件
    • SM_handler.php
    • smtp_handler.php
    • validate.php
  • 应用
    • fb_link.php
    • SRC
      • Facebook图书馆
  • phpmailer库
    • init.php(我的自动加载器所在的位置)
  • index.php

我尝试了不同的自动加载器,包括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 中查找,然后当然因为没有文件而抛出错误。这可以解决吗?

1 个答案:

答案 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;

请告诉我这是否有帮助。