【问题标题】:APC opcode cache breaks applicationAPC 操作码缓存中断应用程序
【发布时间】:2013-03-06 10:51:55
【问题描述】:

我使用 composer 安装 Zend Framework 2 和其他库。每次在同一路径中重新安装应用程序后,我都必须手动清除 APC(版本 3.1.13)操作码缓存(使用 PHP 5.4.8),否则会出现类似的错误

PHP Fatal error:  Interface 'Zend\\Mvc\\ApplicationInterface' not found

PHP Fatal error:  include(): Cannot redeclare class zend\\eventmanager\\eventscapableinterface

每次安装应用程序后,失败的类都会不断变化。我有apc.stat=1,所以操作码缓存应该注意到新部署的php文件并自动重新编译它们,如果我之前在同一路径上部署了应用程序。

我已经在 Github 上与作曲家开发人员讨论了这个问题,并在此处发布了我的 APC 设置:https://github.com/composer/composer/issues/1662。我们同意这看起来更像是一个 APC 问题。

【问题讨论】:

  • 我想我可以使用这里有点复杂的解决方案自动清除 APC 操作码缓存:stackoverflow.com/a/3580939/94289。但我希望有一些更简单的解决方法。
  • touch 你所有更新的文件,所以他们有一个新的时间戳,apc 是相当愚蠢的。
  • 我在邮件列表的某处看到 APC 和 PHP5.4 存在问题,遗憾的是我找不到它,看看到底是怎么说的。
  • 这个问题有帮助吗? PHP with APC: Fatal errors: Cannot redeclare class ... 一个建议是尝试更改 apc.include_once_override = 0
  • 感谢您的建议! @SimonHampel 我已经有apc.include_once_override = 0,请参阅here。 @ZdenekMachek 我会尝试,但由于我在重新安装时删除了整个供应商文件夹(包含 Zend 框架)然后再次安装内容(来自作曲家缓存),我认为文件时间戳应该自动更新..

标签: php zend-framework deployment apc composer-php


【解决方案1】:

我认为这是include_path 设置了两次。当include_path 调用两次时,它会使 APC 读取和解析感到困惑。确保您的 ZEND 项目没有在 include_path 上被调用两次。

另一个检查你是否正确配置了 ini 设置或手动输入了 ini 设置数据:

apc.include_once_override = 0
apc.canonicalize = 0
apc.stat = 0

同时这个问题由于更新已经解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2010-11-10
    相关资源
    最近更新 更多