За последние 24 часа нас посетил 22251 программист и 1058 роботов. Сейчас ищет 641 программист ...

Ошибка “Fatal error: Class '…' not found”

Тема в разделе "PHP для новичков", создана пользователем AlexPunto, 10 ноя 2016.

  1. AlexPunto

    AlexPunto Новичок

    С нами с:
    10 ноя 2016
    Сообщения:
    6
    Симпатии:
    0
    Есть autoload.php:

    Код (Text):
    1. <?php
    2.  
    3. spl_autoload_register(function($class)
    4. {
    5.     $path = __DIR__ .'/'. str_replace('\\','/', $class).'.php';
    6.     require $path;
    7. });
    Код index.php в корневой директории:

    Код (Text):
    1. <?php
    2.  
    3. session_start();
    4.  
    5. require_once __DIR__ .'/autoload.php';
    6.  
    7. $parts = explode('/', $_SERVER['REQUEST_URI']);
    8.  
    9. $ctrlRequest =!empty($parts[1])? $parts[1]:'Index';
    10. $ctrlClassName ='\App\Controllers\\'. $ctrlRequest;
    11. $ctrl =new $ctrlClassName;
    12.  
    13. $actRequest =!empty($parts[2])? $parts[2]:'Default';
    14. $actMethodName ='action'. $actRequest;
    15.  
    16. try{
    17.  
    18.     $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):
    1. <?php
    2.  
    3. namespace App\Controllers;
    4.  
    5.  
    6. use App\Controller;
    7. use App\Model\Photo;
    8. use App\Model\User;
    9. use App\Model\Autorisation;
    10.  
    11.  
    12. class Index
    13.     extends Controller
    14. {
    15.  
    16.     public function actionDefault()
    17.     {
    18.         if (($_SESSION['login'] == 'admin')) {
    19.             $_SESSION['id'] = '1';
    20.         }
    21.  
    22.         $this->view->display(__DIR__ . '/../../Views/form_login.php');
    23.  
    24.         $photos = Photo::findLast5();
    25.         $this->view->images = $photos;
    26.         $this->view->display(__DIR__ . '/../../Views/index.php');
    27.  
    28.         $this->actionShowUsers();
    29.     }
    30.  
    31.     public function actionShowUsers()
    32.     {
    33.         $users = User::findUsers();
    34.         $this->view->users = $users;
    35.         $this->view->display(__DIR__ . '/../../Views/users_show.php');
    36.     }
    Главная страница отображается нормально, а при любом переходе ошибка. Почему не находит путь?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    может прав нет.
     
  3. AlexPunto

    AlexPunto Новичок

    С нами с:
    10 ноя 2016
    Сообщения:
    6
    Симпатии:
    0
    Выставил полные права ко всем файлам, не помогло.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ну проверяй путь точно, чтобы не относительно, а руками пропиши полный путь к папке, где классы искать. Потом сравни с тем, что получается через __DIR__, может они разные выходят.
     
  5. AlexPunto

    AlexPunto Новичок

    С нами с:
    10 ноя 2016
    Сообщения:
    6
    Симпатии:
    0
    Причина оказалась в .htaccess

    Код (Text):
    1. RewriteEngine On
    2.  
    3. RewriteCond %{REQUEST_FILENAME} !-f
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5. RewriteCond %{REQUEST_FILENAME} !-l
    6. RewriteRule ^(.*)$ index.php [QSA]
    Теперь осталось только правильно его настроить. Буду благодарен советам по его настройке.
     
  6. AlexPunto

    AlexPunto Новичок

    С нами с:
    10 ноя 2016
    Сообщения:
    6
    Симпатии:
    0
    Точнее даже, проблема была с регистром букв. Про флаг NC я знаю, но можно ли каким-либо образом применить его на все вложенные директории, кроме создания отдельного .htaccess? Или остается только писать скрипт, который перелопачивает всё под нижний регистр?
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    при чем тут регистр?
     
  8. AlexPunto

    AlexPunto Новичок

    С нами с:
    10 ноя 2016
    Сообщения:
    6
    Симпатии:
    0
    ->
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    а как связаны регистр пути к файлу класса и .htaccess?
     
  10. AlexPunto

    AlexPunto Новичок

    С нами с:
    10 ноя 2016
    Сообщения:
    6
    Симпатии:
    0
    В моем случае никак. ->
    .htaccess может только помочь, если настроить его на изменение регистра. А к чему вопрос?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    я всё ещё не вижу связи. ладно. видимо это какой-то костыль, который очень любят начинающие. Я просто не могу представить ситуации, когда .htaccess связан с регистром названий файлов в автоподключалке классов.