【问题标题】:Is APC compatible with PHP 5.4 or PHP 5.5?APC 是否与 PHP 5.4 或 PHP 5.5 兼容?
【发布时间】:2012-03-25 13:59:15
【问题描述】:

APC 似乎没有更新为与 php 5.4 版本一致(我希望他们会像最初计划的那样将 APC 包含在 PHP 核心中)。

对于当前的 APC 是否适用于 php 5.4+,我似乎找不到任何明确的答案。我设法找到了 php 5.4 的 Ubuntu 包,但 php-apc 包不会安装。

【问题讨论】:

  • 我认为您正在执行 apt-get 安装。您是否尝试过 pecl 安装?
  • 是的,这确实有效。谢谢你。事实证明,APC 在 5.4 中运行良好,尤其是在使用新的特征功能时。
  • @Darragh [只是让你知道] 这方面有巨额赏金,你可能想回答一下。
  • 不,不是。它的最后一个版本是在 2012 年,并且与较新版本的 PHP 不兼容

标签: php installation apc


【解决方案1】:

Zend OPCache 包含在 PHP 5.5 中

2013 年 3 月 21 日,PHP 5.5 beta 1 was released including "Zend OPCache" - 看起来这将是未来 APC 的替代品,因为它包含在 PHP 核心中,并且必须维护每个新版本。

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

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

适用于 PHP 5.4+ 的 APC 仍被标记为测试版

这意味着开发人员认为它完全稳定。尽管许多人在使用当前 SVN 版本时完全没有遇到任何问题,但仍然有一些人在某些配置下或在高负载下遇到边缘情况的奇怪报告。

与您想在生产环境中使用的所有内容一样,请确保您在开发或预生产环境中彻底测试任何版本(测试版稳定版)首先 .这包括负载测试!

从 3.1.13 版本开始,对 SVN 存储库的提交速度有所放缓,bug list 没有那么多最近添加的内容。随心所欲。

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

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

敦促任何具有 C/gdb 技能和一些空闲时间的人掩盖bug list 并查看他们是否可以解决任何问题,或者改进我们都依赖的这个免费开源产品

存在替代解决方案,维基百科提供了list of PHP accelerators

2013 年 2 月 13 日,Zeev Suraski announcedZend Optimizer+ source code 的可用性。

在下一个主要版本(5.5之后的版本)中已经有了相当多的lengthy discussion about integrating Zend Optimizer+ into the PHP core。如果是这种情况,人们可能希望提前熟悉 Zend Optimizer+。


不要使用 APC 3.1.14

APC 3.1.14 has been removed from PECL 下载是因为一些严重的内存问题已被发现但尚未追查。

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

2013-01-02
APC 3.1.14 可用adding PHP 5.5 compatibility, in addition to resolving a fair number of other bugs

仍然是测试版


2012-09-03
APC 3.1.13 可用,fixing a number of segfaults


2012-08-16:
APC 3.1.12 tag 已创建,但仍标记为 beta,可在 APC PECL pagechangelog 上使用。

很多这次修复了 bin_dump 相关的错误。


2012-07-19:
APC 3.1.11 tag 已创建,但仍标记为 beta,可在 APC PECL pagechangelog 上使用。我一直在关注相关的邮件列表,他们仍在积极致力于修复 APC 错误,但它是一个复杂的模块,似乎没有多少人能胜任这项任务。此版本修复了包含文件时令人讨厌的 stat=0 错误。


2012-04-11:
今天创建了一个APC 3.1.10 tag,并在APC PECL page 上放置了一个3.1.10 的测试版

changelog 声明:

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

【讨论】:

【解决方案2】:

从 PHP 5.4.7 和 APC 3.1.13 开始(甚至是 2012 年 9 月 19 日的 APC SVN 主干),虽然它是“兼容的”,但它在负载较重的服务器上不稳定,特别是如果您是使用 PHP-FPM 和 $GLOBALS。一些关于 APC 的开发者讨论谈到了unresolved fringe cases

我在被问到这个问题 6 个月后才回答这个问题,因为这个问题仍然很普遍,遇到这个问题而没有像我这样的答案是什么让我飞跃到带有 APC 的 PHP 5.4 并被烧毁。希望这能帮助人们避免一些痛苦。

【讨论】:

    【解决方案3】:

    似乎“可能”的错误已在主干的最新版本中得到修复。我现在可以使用 PHP 5.4.0。

    svn cohttp://svn.php.net/repository/pecl/apc/trunk/apc-trunk

    cd apc-trunk

    php化

    ./配置

    制作

    进行安装

    【讨论】:

    【解决方案4】:

    不,APC 1.3.9(到目前为止,甚至是 svn 主干)与 php 5.4.0 不兼容,我知道是因为我花了几个小时试图让它工作(测试了各种 svn /php.ini 设置/编译器标志/你的名字)。

    这太荒谬了,APC 是最受欢迎的 PHP 扩展之一,您会期望在经历了 8 个 PHP 5.4 RC 的几周后,他们会有时间让 APC 与它一起工作。

    可怜。

    【讨论】:

    • 也许这就是为什么 APC 没有像最初计划的那样包含在 PHP 5.4 中。当我测试它时它似乎可以工作,但是,我只测试了特性,而不是任何其他 php 5.4 功能。
    • 似乎唯一可行的 php 5.4 缓存/字节码编译器是 Zend 自己的 zend 服务器包。 PHP 5.4 让我有点兴奋,但没有 APC 或 XCache 什么的,它没用。这已经是 PHP 的故事多年了。。一直在等待,等待。。我开始认真考虑使用其他语言。只是不确定是什么。。
    • 没错,segfault 错误早在去年 12 月就被报告了,3 个月后它仍然没有修复,如果它甚至在最常见的情况。 [Bug #60462 启用 APC 时的段错误 - 提交时间:2011-12-07] bugs.php.net/bug.php?id=60462&edit=1
    【解决方案5】:

    好吧,我最近几天一直在尝试,但我无法让操作码缓存器与 php 5.4 一起使用。 Xcache 不会编译,并且 apc 在缓存时无法识别某些类。 我认为这就是 Simon 所说的错误。

    我听说主干中有一些修复,但我也尝试了最新的主干源,但同样的错误不断出现。 我认为没有操作码缓存器的 php(目前没有可用的缓存器)不值得生产。希望 apc 的人能尽快解决这个问题。

    更新!!!

    Xcache 2.0.0-rc1 已发布并与 php 5.4 兼容。享受吧!

    【讨论】:

      【解决方案6】:

      我找到了apcuhttp://windows.php.net/downloads/pecl/releases/apcu/

      也许这是 Windows 上 x64 的 apc。它(4.0.1 版)适用于我的应用程序。

      【讨论】:

        【解决方案7】:

        我正在使用 AMPPS 和 PHP 版本 5.5.19。自 PHP 5.5 发布以来的一段时间以来,APC 被 PHP 5.5 及更高版本中包含的 Zend OPCache 取代。现在,要启用“APC”(当前为“OPcache”),您所要做的就是编辑您的 php.ini。在 [XDebug] 部分之前添加流线:

        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
        
        ...
        

        请注意,我们需要有 两个实例

        zend_extension =

        一个在 [OPcache] 和一个在 [XDebug] 部分。在您的 xampp/ampps/easyPHP 服务器安装中,通常不会默认提供 Xdebug。您可能会发现自己需要下载 Xdebug 扩展。您可以通过使用为您的 php.ini 定义正确的 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 框架,并且消除了为您的 PHP 和 Xdebug 安装和启用 APC 的建议消息。

        给那些运行 symfony 2 并从 "web/config.php" 中删除警告消息的人的消息,但是从命令行 "php app/check.php" 运行时仍然遇到问题。如果发生这种情况,这意味着您的控制台正在使用不同的 php.ini 文件。更改您的系统 PATH 变量 - 使其指向正确的 php 目录(您有 php.exe 文件并由本地服务器使用的位置)。

        如果您需要更深入的解释,请在下面的评论中告诉我。问候。

        【讨论】:

        • 我强烈建议把这个答案的说明和上面的答案合并,这样每个想要实现 OpCache 的人都知道该怎么做。
        • 如果你注释掉 xdebug "zend_extension" 你会把它关掉——没有必要。添加带有“zend_extension”的 [OPcache] 部分不会与来自 [XDebug] 部分的相同参数发生冲突。这些部分的顺序也并不重要。
        • 注:[来源:php.net/manual/en/opcache.installation.php]如果你想在Xdebug中使用OPcache,你必须在Xdebug之前加载OPcache。
        【解决方案8】:

        似乎还有一些问题需要解决。查看bugs,您或许能够找出解决您特定问题的方法。

        几个小时前我处理了一个这样的错误,结果证明使用 SVN 中继中的 APC 是可行的方法。希望这会有所帮助!

        【讨论】:

        • 到目前为止,它似乎工作正常。这是在带有来自launchpad.net/~ondrej/+archive/php5 的 PHP 5.4 包的 Ubuntu 10.04(交钥匙 LAMP 设备)上。但如果出现问题,我会检查错误列表。谢谢!
        【解决方案9】:

        我发现您需要清除每个页面请求上的操作码缓存,否则实现接口的类将无法加载。这是从最新的 svn 主干、Apache 2.4.1、PHP 5.4.0 编译而来的。

        【讨论】:

        • @michiel-thalen 你说对了,这就是我在谈论的问题。真的很遗憾......尽管即使在每次加载时重置操作码,我仍然看到性能略有提升。用户缓存仍然按预期工作(到目前为止在我的测试中)。
        【解决方案10】:

        APC - 不推荐
        我个人没有在 PHP 5.4 或 PHP 5.5 上使用 APC,但是最新的稳定 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,它也能提高性能。

        【讨论】:

          【解决方案11】:

          Zend OPCache 包含在 PHP 5.5 中,名称为 php_opcache.dll,位于 php/ext 目录中。 为了激活它:

          • php.ini 配置文件中添加 php_opcahe.dll 文件作为 zend 扩展。
          • 使用格式 zend_extension = path/to/php/ext/php_opcache.dll
          • php.ini 配置中将 zend_extension 放在 xDebug zend_extension 之前。
          • 保存您的 php.ini 配置文件并重新启动您的服务器。

          【讨论】:

            【解决方案12】:

            APC 自 1 月 2 日起有一个新版本:3.1.14,它解决了一些错误: http://pecl.php.net/package/APC

            但是,到目前为止,我一直在 dotdeb 存储库中运行带有 APC 3.1.13 的 PHP 5.4.x,没有任何问题,所以对我来说,我会说它是稳定的。 dotdeb 还通知我,他们将在 PHP 的下一个版本(预计为 5.4.11)中包含更新的 APC。

            【讨论】:

            • 如果您使用的是 APC 3.1.14,我建议您暂时恢复到 APC 3.1.13。已发现一些与内存相关的严重错误,这些错误导致 3.1.14 版本被从下载部分中删除。
            • 确实,我发现 dotdeb 为 PHP 5.4.11 发布的包最初包含 APC 3.1.14,但为了避免这些错误,它已被还原。
            【解决方案13】:

            我们正在使用 PHP 5.4.26 和 APC 3.1.9 试验内存释放错误(apache segfault)。 PHP 5.4.X 上的 APC 存在一个未解决的错误:https://bugs.php.net/bug.php?id=61934

            我建议不要在 PHP > 5.3 上使用这个插件。

            【讨论】:

              【解决方案14】:

              在 XAMPP 版本 5.6.3 (PHP 5.6.3) 中,您在 ini.php 中所要做的就是:

              [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
              
              [XDebug]
              
              zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
              xdebug.max_nesting_level = 200
              xdebug.profiler_append = 1
              xdebug.profiler_enable = 1
              xdebug.profiler_enable_trigger = 0
              ;xdebug.profiler_output_dir = "C:\xampp\tmp"
              ;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
              ;xdebug.remote_enable = 0
              ;xdebug.remote_handler = "dbgp"
              ;xdebug.remote_host = "127.0.0.1"
              ;xdebug.trace_output_dir = "C:\xampp\tmp"
              

              symfony2 框架的配置。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多