phpfog上spl_autoload的奇怪行为

时间:2011-06-23 19:40:22

标签: php autoload

我只是想在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。'核心'。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 :(得分:0)

我设法解决了这个问题:

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 problem