- 我使用的是Codeigniter 2.1.0。
- 我使用
require_once APPPATH . "/libraries/aws_sdk/sdk.class.php";
这种运作良好,包括亚马逊Web服务SDK在一个自定义模式。然而,当CI以后决定它需要加载它的数据库缓存类,它调用(通过CI_DB_driver :: _ cache_init):PHP AWS SDK自动加载器与Codeigniter冲突
if (! class_exists('CI_DB_Cache'))
{
if (! @include(BASEPATH.'database/DB_cache.php'))
{
return $this->cache_off();
}
}
这触发了AWS SDK的自动加载(具体方法为CFLoader::autoloader
)。
我能解决这个问题,告诉class_exists
不会自动加载,因为它似乎DB_cache.php包含无论如何,如果class_exists
返回false:
if (! class_exists('CI_DB_Cache', false))
{
if (! @include(BASEPATH.'database/DB_cache.php'))
{
return $this->cache_off();
}
}
这个肮脏的修复工作,但显然只有解决眼前的问题。一般来说,确保CodeIgniter不会与其他库自动加载混淆的最佳方法是什么?
请注意:有关使用spl_autoload_register
- 我读过的点点滴滴。似乎Codeigniter不使用这个,我不知道我应该如何安全地实现它。我会找到一个如何以及在哪里实施这个最有用的实例(当然,这是解决方案)。
- 看来,AWS SDK已经使用
spl_autoload_register
:spl_autoload_register(array('CFLoader', 'autoloader'));