操作码(APC /了XCache),Zend的,主义,和自动加载机
-
21-09-2019 - |
题
我想请使用APC或XCache将作为操作码缓存我的PHP页面。我使用它与Zend和教义和它具有与所述自动装载器中的问题。
如果我试图用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
如果我尝试了XCache我得到以下几点:
PHP Fatal error: Cannot redeclare class Zend_Registry in
C:\\[mydir]\\library\\zendframework\\Zend\\Registry.php on line 0
我在Windows中运行的Zend 1.9.1,学说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);
这是我读过,使用APC或XCache将几乎是必须的性能,但我似乎无法得到它的工作。任何想法?
解决方案
您可以在您的index.php年底建成一个“Zend_Session::writeClose(true);
”。结果
这将在会话写入必要的对象之前持久状态(Zend_Loader来加载等)获得破坏。
<强>更好强>:注册它作为关机功能。结果
所以这将是即使你使用exit()
,die()
或fatal error
occures执行:
register_shutdown_function(array('Zend_Session', 'writeClose'), true);
其他提示
这可能是类似于自定义会话处理和APC缓存的问题。如果您分配了自定义会话处理程序是在PHP RSHUTDOWN注册。这是相同的例程APC使用,并为此在PHP中创建和自定义的会话处理器内部冲突不会关闭所有情况。
所以,你必须确保你在关机时手动关闭自定义会话处理程序
在你的index.php年底把一个"Zend_Session::writeClose(true);"
不这样做,如果你有任何退出的最好方式;调用脚本的任何地方。
这是更好地登记在这种方式关机处理程序:
function shutdown()
{
Zend_Session::writeClose(true);
}
register_shutdown_function('shutdown');
假如把它放在你的index.php文件的顶部,以确保任何其他脚本运行前的关机程序注册。
有别的碴include路径?也许尝试在你的第一个APC的例子,前行权注销包括路径。
在一个XCache将确实是很奇怪。该项目是好看死了,虽然,我不相信它在PHP 5.2 +。尝试eAccelerator在呢?我们有最好的运气吧。
本杰明·克里默,你是一个生命的救星。虽然上面的(原)问题是与会话自动加载的一个特例,关闭会话似乎是这种情况的通用解决方案。的说明虽然:
在你的脚本结束配售Zend_Session::writeClose(true);
可能并不总是削减它,因为你可能有exit;
的,die();
的,等你的代码。在这种情况下,可以使用
register_shutdown_function(array('Zend_Session', 'writeClose'), true);
,或简单地
register_shutdown_function('session_write_close');
如果你不使用Zend公司的会话。