Странное поведение для spl_autoload на phpfog - PullRequest
0 голосов
/ 23 июня 2011

Я просто пытаюсь создать свое первое приложение на PHP Fog, но есть фрагмент кода, который не работает должным образом - хотя работает отлично на localhost и других обычных хостах

Я использую модифицированную версию TinyMVC, это код, отвечающий за настройку автозагрузки:

    /* Set include_path for spl_autoload */
    set_include_path(get_include_path()
      . PATH_SEPARATOR . FRAMEWORK_BASEDIR . 'core' . DS
      . PATH_SEPARATOR . FRAMEWORK_BASEDIR . 'libraries' . DS
      . PATH_SEPARATOR . FRAMEWORK_APPLICATION . DS . 'controllers' . DS
      . PATH_SEPARATOR . FRAMEWORK_APPLICATION . DS . 'models' . DS
      );

    /* File extensions to include */ 
    spl_autoload_extensions('.php,.inc');

    /* Setup __autoload */
    $spl_funcs = spl_autoload_functions();
    if($spl_funcs === false)
        spl_autoload_register();
    elseif(!in_array('spl_autoload',$spl_funcs))
        spl_autoload_register('spl_autoload');

По сути, он терпит неудачу при загрузке первого класса, который находится в "FRAMEWORK_BASEDIR. 'Core'. DS" Имя файла класса - "framework_controller.php", а имя класса - "Framework_Controller" (пробовал также в нижнем регистре). Если я включаю класс вручную, он работает, но не работает с автозагрузкой.

Вот сообщение об ошибке, которое я получаю:

Fatal error: spl_autoload(): Class Framework_Controller could not be loaded in /var/fog/apps/app7396/claudiu.phpfogapp.com/application/controllers/home.php on line 12 

Есть идеи, в чем может быть проблема?

1 Ответ

0 голосов
/ 23 июня 2011

Мне удалось разобраться:

function framework_autoload($className, $extList='.inc,.php') {

    $autoload_paths = array (
            FRAMEWORK_BASEDIR . 'core' . DS,
            FRAMEWORK_BASEDIR . 'libraries' . DS,
            FRAMEWORK_APPLICATION . DS . 'controllers' . DS,
            FRAMEWORK_APPLICATION . DS . 'models' . DS
        );

      $ext = explode(',',$extList);
      foreach($ext as $x) {
        foreach ($autoload_paths as $v) {
            $fname = $v . strtolower($className).$x;
            if(@file_exists($fname)) {
                require_once($fname);
                return true;
            }
        }
      }
      return false;
}
spl_autoload_register('framework_autoload');

Благодаря еще одному вопросу на StackOverflow: Проблема spl_autoload

...