- 我使用的是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'));