APC是否兼容PHP 5.4或PHP 5.5?

103

看起来APC没有更新以适应php 5.4版本的发布(我希望他们像最初计划的那样将APC包含在PHP核心中)。

我找不到确切的答案,无法确定当前版本的APC是否与php 5.4+兼容。 我设法找到了适用于php 5.4的Ubuntu软件包,但是php-apc软件包无法安装。


2
你正在执行apt-get安装,我猜是吗?你尝试过pecl安装吗? - Darragh Enright
是的,这确实有效。谢谢你。事实证明,在使用新的traits功能时,APC与5.4很好地配合。 - Greywire
1
@Darragh 【只是提醒一下】这个问题有很高的赏金,你可能想要回答一下。 - oxygen
1
不是的。它的最后一个版本发布于2012年,肯定与较新版本的PHP不兼容。 - Abadis
14个回答

164

Zend OPCache已包含在PHP 5.5中

在2013年3月21日,PHP 5.5 beta 1发布并包含 "Zend OPCache" - 这似乎坚定地成为APC的替代品,因为它被包含在PHP内核中,并且必须为每个新版本进行维护。

我个人建议那些依赖APC的opcode缓存的人使用即将推出的内置opcode缓存来测试他们的代码,并反馈任何遇到的问题,以确保稳定的最终版本。

我不知道这对于APC的未来意味着什么。

PHP 5.4+的APC仍被标记为beta

这意味着开发人员认为它并非完全稳定。虽然许多人在当前的SVN版本中完全没有问题,但仍有某些配置或在重负载下的少数人报告边缘情况。

请先在开发或预生产环境中彻底测试任何版本(beta或stable),就像您想要在生产环境中使用的所有内容一样。这包括负载测试!
从3.1.13版本开始,对SVN存储库的提交已经有所减少,并且bug list没有太多最近的新增内容。你可以根据自己的理解来看待这个情况。

在2012年12月10日21:05,Rasmus Lerdorf写道:

APC现在已经到了5.4的点上,我认为它没有比5.3更多的边缘情况了。两者都不完美,但对于大多数站点来说已经足够接近了。

如果你具备C / gdb技能并且有一些空闲时间,我们建议您仔细查看错误列表,看看是否可以修复任何问题或改进我们所有依赖的免费开源产品

还有其他解决方案,维基百科提供了PHP加速器列表

2013年2月13日,Zeev Suraski宣布Zend Optimizer+源代码的可用性。

在下一次主要版本(5.5 之后的版本)中,关于将 Zend Optimizer+ 整合到 PHP 核心中进行了相当长时间的讨论。如果确实如此,人们可能希望提前熟悉 Zend Optimizer+。


不要使用APC 3.1.14

由于发现了一些严重的内存问题,但尚未跟踪到,因此APC 3.1.14已从PECL下载中删除

如果您已经在使用3.1.14,则可能希望降级,直到3.1.15发布。请记住,这仍然是测试版。如果您使用它,您将自担风险。

2013-01-02:
APC 3.1.14可用除解决其他许多错误外,还添加了PHP 5.5兼容性。

仍然是测试版


2012年9月3日:
APC 3.1.13已发布,修复了一些段错误


2012年08月16日:
已创建一个APC 3.1.12标签,但仍被标记为测试版,可在APC PECL页面变更日志中找到。
这次修复了很多与bin_dump相关的错误。
2012-07-19: 创建了APC 3.1.11标签,但仍被标记为beta,可以在APC PECL页面changelog上找到。我一直在关注相关的邮件列表,他们仍在积极修复APC的bug,但这是一个复杂的模块,没有多少人能胜任。此版本修复了在包含文件时出现的严重stat=0错误。

2012年04月11日:
今天创建了一个APC 3.1.10标签,并在APC PECL页面上发布了3.1.10的beta版本。

changelog指出:

  • 添加PHP 5.4支持(Dmitry, Anatoliy, Pierre)
  • 修复错误#22679:为常量修复apc_bin_dump。使用IS_CONSTANT_TYPE_MASK处理所有常量,包括未限定的常量(而不是~IS_CONSTANT_INDEX检查)
  • 修复错误#23822,php在apache重新启动时崩溃

1
"只需键入“pecl install apc-3.1.10”,然后我必须重新编译PHP,以便更新libphp5.so。" - targnation
自2012年10月以来一直在Ubuntu 12上通过Apt-get使用它。干净而稳定! - JustinP
请查看与Zend OpCache和APC相关的文章https://blogs.oracle.com/opal/entry/using_php_5_5_s以及此线程https://bugs.php.net/bug.php?id=64625。 - riotera

10

截至PHP 5.4.7和APC 3.1.13(甚至是2012年9月19日的APC SVN trunk),尽管它“兼容”,但在负载较重的服务器上不稳定,特别是如果您正在使用PHP-FPM和$GLOBALS。一些关于APC的开发者讨论未解决的边缘案例

我回答这个问题是因为问题仍然普遍存在,并且在没有像我这样的答案的情况下遇到这个线程会使我跳到带有APC的PHP 5.4并被烧伤。希望这可以帮助人们避免一些痛苦。


6
"我看起来这个bug“可能”已经在最新版本的trunk中修复了。我现在使用PHP 5.4.0已经可以正常工作了。
svn co http://svn.php.net/repository/pecl/apc/trunk/ apc-trunk
cd apc-trunk phpize ./configure make make install"

apc 已不再位于 svn.php.net/repository/pecl。该仓库已转换为 Git,现在可以在 http://git.php.net/?p=pecl/caching/apc.git 上浏览。 - Dereckson

5
在过去的几天里,我一直在尝试使用opcode缓存器来与php 5.4一起工作,但是Xcache无法编译,而apc在缓存某些类时无法识别。我认为这就是Simon所说的错误。
我听说主线代码库中有一些修复措施,但我也尝试了最新的代码库源代码,但是同样的错误一直出现。我认为没有opcode缓存器的php(目前没有可用的)不适合生产环境。希望apc的人能尽快解决这个问题。
更新!!! Xcache 2.0.0-rc1已经发布,并且与php 5.4兼容。享受吧!

5
不,APC 1.3.9版本(现在即使是svn主干版本)不兼容php 5.4.0。我知道这一点是因为我花了很多时间尝试让它工作(测试了各种svn / php.ini设置/编译器标志/等等)。
这太荒谬了,APC是最受欢迎的PHP扩展之一,你期望在8个PHP 5.4 RC经过数周后他们有时间让APC和它一起工作。
可悲。

也许这就是为什么 APC 没有像最初计划的那样包含在 PHP 5.4 中。当我测试它时,似乎是可以工作的,但是我只测试了 traits,而没有测试其他任何 PHP 5.4 的特性。 - Greywire
2
似乎唯一可行的PHP 5.4缓存/字节码编译器是Zend自己的Zend Server软件包。没有APC或XCache等东西,PHP 5.4让我感到有些兴奋,但它毫无用处。这已经是PHP多年来的故事了...总是等待,等待...我开始认真考虑学习其他语言了...只是不确定是什么语言... - Greywire
真的,这个段错误的 bug 在去年 12 月就已经报告了,3 个月后它仍然没有被修复,如果在最常见的情况下甚至不能正常工作,发布一个“重大升级”的意义是什么?[Bug #60462 当启用 APC 时段错误 - 提交日期:2011-12-07] https://bugs.php.net/bug.php?id=60462&edit=1 - JohnSmith

4

4
我正在使用PHP版本为5.5.19的AMPPS。自从PHP 5.5发布以来,APC已被替换为Zend OPCache,后者包含在PHP 5.5及以上版本中。现在,您只需要编辑php.ini文件,在[XDebug]部分之前添加以下行即可启用"APC"(目前是"OPcache"): php.ini
...

[OPcache]

zend_extension=php_opcache.dll

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=24
opcache.max_accelerated_files=4000
opcache.revalidate_freq=3
opcache.fast_shutdown=1

...

请注意,我们需要在[OPcache]和[XDebug]部分各有两个实例

zend_extension =

Xdebug通常不是xampp/ampps/easyPHP服务器安装的默认选项。您可能会发现自己需要下载Xdebug扩展程序。您可以使用在线应用程序轻松地定义适合您php版本的正确Xdebug,并访问http://xdebug.org/wizard.php并按照简单的说明操作。一旦您已经为您的php版本下载了正确的Xdebug版本,请编辑[XDebug]部分中的zend_extension链接。

...

[XDebug]
zend_extension = "C:\Program Files (x86)\Ampps\php\ext\php_xdebug-2.2.6-5.5-vc11.dll"
......

请注意!您需要在php.ini文件中在XDebug之前添加OPcache部分!!!如果您按照我的指示正确操作,您的php.ini文件应该有两个zend_extension实例(一个在OPcache部分,一个在Xdebug部分)。
这对于Symfony2框架非常有效,并且消除了安装和启用APC以及PHP和Xdebug的建议信息。
对于那些运行symfony 2并从“web / config.php”中删除警告消息,但仍然在从命令行“php app / check.php”运行时遇到问题的人们,我要说一句话。如果出现这种情况,则意味着您的控制台正在使用不同的php.ini文件。更改系统PATH变量-使其指向正确的php目录(其中包含您的php.exe文件,并且由本地服务器使用)。
如果您需要更深入的解释,请在下面的评论中让我知道。问候。

1
我强烈建议将这个答案的说明与最佳答案合并,这样每个想要实施OpCache的人都能准确地知道如何操作。 - Joe
如果你注释掉xdebug的"zend_extension",就可以关闭它 - 这是不必要的。 添加[OPcache]部分并使用"zend_extension"不会与[XDebug]部分的相同参数发生冲突。此外,这些部分的顺序并不真正重要。 - Marek
注意:[来源:http://php.net/manual/en/opcache.installation.php] 如果您想要使用OPcache和» Xdebug一起使用,您必须在Xdebug之前加载OPcache。 - DevWL

3
我发现您需要在每个页面请求时清除opcode缓存,否则实现接口的类将无法加载。这是从最新的svn trunk编译的,使用的是Apache 2.4.1和PHP 5.4.0版本。

@michiel-thalen,你说得很对,那就是我所指的问题。真是太遗憾了...尽管每次加载时重置操作码,我仍然看到了轻微的性能提升。在我的测试中,用户缓存仍然按预期工作。 - Simon

3
有一些问题似乎还没有解决。请查看错误列表,或许你能找到解决特定问题的方法。
我几个小时前处理了一个类似的错误,结果发现使用来自SVN trunk的APC是正确的方式。希望这能帮到你!

目前为止,它似乎正常工作。这是在Ubuntu 10.04上(turnkey LAMP应用程序)使用来自https://launchpad.net/~ondrej/+archive/php5的PHP 5.4软件包。但是,如果有什么问题,我会检查错误列表。谢谢! - Greywire

2

APC - 不建议使用
个人认为在PHP 5.4或PHP 5.5上不应使用最新的稳定版本APC,因为它与PHP 5.4不兼容。最新的beta APC可以用于5.4,但据说仍存在与APC相关的负面问题。

如果您使用PHP 5.5
只需使用Zend Opcache即可。它已经预装好了,所以问题最少。

如果您使用PHP 5.4
我推荐使用XCache。它完全兼容PHP 5.4和5.5,并且正在积极开发中。最后一个稳定版本是在3.5个月前发布的(2013年10月10日)。即使您使用fastcgi,它也可以提高性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接