За последние 24 часа нас посетили 17719 программистов и 1280 роботов. Сейчас ищут 1389 программистов ...

Не работает __autoload

Тема в разделе "Прочие вопросы по PHP", создана пользователем Rim, 20 фев 2012.

  1. Rim

    Rim Активный пользователь

    С нами с:
    28 дек 2010
    Сообщения:
    53
    Симпатии:
    0
    Вот проблемма:
    на локалхосте - работает а на сервере нет.
    index.php
    Код (Text):
    1.  
    2. function __autoload($class_name){
    3.     $class_name = $class_name.'.php';
    4.    
    5.     if (file_exists(APP_PATH.$class_name)) {
    6.         require_once APP_PATH.$class_name;
    7.     }
    8.     elseif(file_exists(SYS_PATH.$class_name)){
    9.         require_once SYS_PATH.$class_name;
    10.     }
    11. }
    12.  
    13. $s = new System();
    14. $s->run();
    Вот первый скрипт (в данный момент System.php) подгружается а следующие - нет!

    Решение проблеммы не нашел...
    Пробывал через spl_autoload_register(), но результата мне не принесло
     
  2. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    Предположу что проблема в путях. Как ты константы определяешь?
     
  3. Rim

    Rim Активный пользователь

    С нами с:
    28 дек 2010
    Сообщения:
    53
    Симпатии:
    0
    пример константы:
    Код (Text):
    1. define("APP_PATH",dirname(__FILE__).DIRECTORY_SEPARATOR."site".DIRECTORY_SEPARATOR);
     
  4. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    значение покажи, что в итоге в ней находится
     
  5. Rim

    Rim Активный пользователь

    С нами с:
    28 дек 2010
    Сообщения:
    53
    Симпатии:
    0
    Тоисть?
    В ней находятся классы, к примеру тот же System.php
     
  6. Rim

    Rim Активный пользователь

    С нами с:
    28 дек 2010
    Сообщения:
    53
    Симпатии:
    0
  7. Rim

    Rim Активный пользователь

    С нами с:
    28 дек 2010
    Сообщения:
    53
    Симпатии:
    0
  8. Rim

    Rim Активный пользователь

    С нами с:
    28 дек 2010
    Сообщения:
    53
    Симпатии:
    0
    Исправил сам!
    Незнаю чё ето было, но вот так заработало:
    Код (Text):
    1.  
    2. spl_autoload_register('autoload');
    3. function autoload($class_name){
    4.     $class_name = str_replace('_',DIRECTORY_SEPARATOR,$class_name).'.php';
    5.  
    6.     if (file_exists(APP_PATH.$class_name)) {
    7.         @include_once(APP_PATH.$class_name);
    8.     }
    9.     elseif(file_exists(SYS_PATH.$class_name)){
    10.         @include_once(SYS_PATH.$class_name);
    11.     }
    12.     else{
    13.         die('Error!!!');
    14.     }
    15. }
     
  9. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    include_once медленнее require_once, делал все скрипты 1 разовые скрипты :) все на рекуире и на инклуде, заметил, что рекуер оказался быстрее примерно в 3-5 раз.
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Я вобще не заметил разницы между инклудами и реквайром
     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Бывает, что не видно, тоже заметил, но когда увидел факт, что действительно оно есть и быстрее, по этому и сказал))
     
  12. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Rim
    Было такое однажды. Проблема была из-за того (наверно), что в подключаемой сторонней либе уже использовался __autoload(), и второй (мой который) не обрабатывался. Через spl_autoload_register() тогда и сделал костыль.
     
  13. RazArt

    RazArt Активный пользователь

    С нами с:
    26 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Просто нужно было сразу вывести "APP_PATH.$class_name" и проверить путь..