У меня возникают существенные проблемы с автоматической загрузкой в настоящее время. В настоящее время я использую несколько каталогов, которые сегментируют мое приложение, которое, как я знаю, может быть структурировано более эффективно, однако на данный момент я просто пытаюсь заставить автозагрузчик работать.Проблемы с автозагрузкой [EDIT]
Моя структура каталогов выглядит следующим образом:
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
Ive пробовал разные autloaders включая 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, я в том числе autloader:
require_once('/var/www/html/core/init.php');
и я добавил пространство имен класса сеанса
namespace classes;
Я тогда называть класс сессионного
if(!classes\session::exist('ip')){
Тем не менее, я продолжаю получать такие же ошибки:
требуется (сеанс.php): не удалось открыть поток: нет такого файла или каталога в /var/www/html/core/init.php в строке 34
Является ли моя структура каталогов неправильной? Или я не правильно использую psr-0? Я придерживаюсь того, что я могу сделать. Благодарю.
EDIT: теперь я могу создать экземпляр файлы в том же каталоге, EG/классы /, однако, когда я называю класс в другом каталоге, вместо того, чтобы искать нужную папку /вар/WWW/HTML/приложение/fb_link .php, он выглядит в /var/www/html/classes/app/fb_link.php, который затем, конечно же, выдает ошибку, поскольку файл не существует. Разве это разрешимо?
У вас есть каталог html в вашем пути включения? Что возвращает get_include_path()? –
Каталог html - это каталог, на котором указывает сайт, поэтому я не думал, что это потребуется? Что касается пространств имен, я не думал, что вам нужно включить root? – Juakali92
В настоящее время я использую автозагрузчик 'AURA'. Он обрабатывает как каталоги PSR-0, так и PSR-4. Я использую бутстрап 'application', который его использует. Я вручную кодировал пути, которые использует автозагрузчик, поэтому я это понимаю. Я также использовал автозагрузчик 'symfony'. Оба отлично работают. [auraphp/Aura.Autoload ] (https://github.com/auraphp/Aura.Autoload) –