Есть autoload.php: Код (Text): <?php spl_autoload_register(function($class) { $path = __DIR__ .'/'. str_replace('\\','/', $class).'.php'; require $path; }); Код index.php в корневой директории: Код (Text): <?php session_start(); require_once __DIR__ .'/autoload.php'; $parts = explode('/', $_SERVER['REQUEST_URI']); $ctrlRequest =!empty($parts[1])? $parts[1]:'Index'; $ctrlClassName ='\App\Controllers\\'. $ctrlRequest; $ctrl =new $ctrlClassName; $actRequest =!empty($parts[2])? $parts[2]:'Default'; $actMethodName ='action'. $actRequest; try{ $ctrl->$actMethodName(); На локалке всё прекрасно работает, а при переносе на домен ошибка после перехода по гиперссылкам: Fatal error: Uncaught Error: Class '\App\Controllers\views' not found in /var/www/u0225581/data/www/my-site.ru/index.php:11 Stack trace: #0 {main} thrown in /var/www/u0225581/data/www/my-site.ru/index.php on line 11 После добавления echo DIR в autoload, получаю на главной странице (главная страница на домене отображается нормально): /var/www/u02255811/data/www/my-site.ru/var/www/u02255811/data/www/my-site.ru/var/www/u02255811/data/www/my-site.ru На любой другой странице: /var/www/u02255811/data/www/my-site.ru Путь до файла в котором определены классы: my-site.ru/App/Controllers/Index.php Код (Text): <?php namespace App\Controllers; use App\Controller; use App\Model\Photo; use App\Model\User; use App\Model\Autorisation; class Index extends Controller { public function actionDefault() { if (($_SESSION['login'] == 'admin')) { $_SESSION['id'] = '1'; } $this->view->display(__DIR__ . '/../../Views/form_login.php'); $photos = Photo::findLast5(); $this->view->images = $photos; $this->view->display(__DIR__ . '/../../Views/index.php'); $this->actionShowUsers(); } public function actionShowUsers() { $users = User::findUsers(); $this->view->users = $users; $this->view->display(__DIR__ . '/../../Views/users_show.php'); } Главная страница отображается нормально, а при любом переходе ошибка. Почему не находит путь?
ну проверяй путь точно, чтобы не относительно, а руками пропиши полный путь к папке, где классы искать. Потом сравни с тем, что получается через __DIR__, может они разные выходят.
Причина оказалась в .htaccess Код (Text): RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.*)$ index.php [QSA] Теперь осталось только правильно его настроить. Буду благодарен советам по его настройке.
Точнее даже, проблема была с регистром букв. Про флаг NC я знаю, но можно ли каким-либо образом применить его на все вложенные директории, кроме создания отдельного .htaccess? Или остается только писать скрипт, который перелопачивает всё под нижний регистр?
В моем случае никак. -> .htaccess может только помочь, если настроить его на изменение регистра. А к чему вопрос?
я всё ещё не вижу связи. ладно. видимо это какой-то костыль, который очень любят начинающие. Я просто не могу представить ситуации, когда .htaccess связан с регистром названий файлов в автоподключалке классов.