操作码(APC/XCache),Zend,Doctrine和Autoloaders

Chr*_*ams 7 doctrine zend-framework apc opcode xcache

我试图使用APC或XCache作为操作码来缓存我的php页面.我正在使用它与Zend和Doctrine,它与自动加载器有问题.

如果我尝试使用APC,我会得到以下结果:

Fatal error: spl_autoload() [<a href='function.spl-autoload'>function.spl-autoload</a>]: 
  Class Doctrine_Event could not be loaded in 
  C:\\[mydir]\\library\\doctrine\\Doctrine\\Record.php on line 777
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用XCache,我会得到以下内容:

PHP Fatal error: Cannot redeclare class Zend_Registry in 
  C:\\[mydir]\\library\\zendframework\\Zend\\Registry.php on line 0
Run Code Online (Sandbox Code Playgroud)

我正在Windows机器上运行Zend 1.9.1,Doctrine 1.1.

我的引导程序如下:

set_include_path(dirname(__FILE__).'/../library/zendframework'
. PATH_SEPARATOR . dirname(__FILE__).'/../library/doctrine'.....

require 'Zend/Loader/Autoloader.php';

$loader = Zend_Loader_Autoloader::getInstance();
$loader->suppressNotFoundWarnings(false);
$loader->setFallbackAutoloader(true);
Run Code Online (Sandbox Code Playgroud)

从我所读到的,使用APC或xcache几乎是性能必须的,但我似乎无法让它工作.有任何想法吗?

Ben*_*mer 10

你可以Zend_Session::writeClose(true);在index.php的末尾添加一个" ".
这将在必要的对象(Zend_Loader等)被破坏之前将会话写入持久状态.

更好:将其注册为关机功能.
因此,它会即使您使用被执行exit(),die()或者fatal erroroccures:

register_shutdown_function(array('Zend_Session', 'writeClose'), true);
Run Code Online (Sandbox Code Playgroud)