【问题标题】:APC Fatal: Missing class informationAPC 致命:缺少类信息
【发布时间】:2013-03-07 18:08:17
【问题描述】:

根据this PHP bug report,错误消息是由于在 if 语句中嵌套了一个类并静态声明了它。

我只在一个地方声明了一个类,但我用 if 保护了它:

if (!class_exists('myClass', false)) {
    class myClass{

(尝试做一些类似于 C++ 预处理器指令/条件包含的事情。)

这是为了防止由于多个编码器不正确地包含它而导致失败(require 而不是 require_once)。在这一点上,我唯一的其他选择是注释掉 if 并在应用程序中搜索包含,然后将它们全部设为“require_once”。

那么,有没有其他人遇到过这个错误,除了将所有要求更改为 require_once 之外,还有其他方法可以解决吗? (这个软件由多个程序员维护,所以我希望它不会失败。)

  • 此错误仅偶尔(随机)发生,当它发生时,我必须在类文件中添加/删除一个空格并重新保存以修复错误。

附带说明,我们安装 APC 的主要原因是为了支持 IE 9 及更低版本的文件上传进度。因此,如果我们可以只启用这些部分,我们可以禁用导致此问题的任何功能。 (不确定这是否可能。)

更新:重新保存文件显然没有效果。看起来它有一种“超时”。当错误发生时,我只需要等待一段时间让它消失。

【问题讨论】:

    标签: php class apc fatal-error


    【解决方案1】:

    似乎这可能是由autoloading 类以及在类本身中包含类依赖关系引起的。

    在我们升级到 PHP 5.3 之前,我们无法选择使用 PHP 的自动加载功能。因此,我们必须在类文件中包含类依赖项。 例如:

    <?php
    require "parent_class.php";
    
    if (!class_exists('this_class')) {
        class this_class extends parent_class {
    

    当我们升级到 PHP 5.3 时,我们实现了类自动加载功能。这可能是“静态”和“动态”类声明(根据问题中的 PHP Bug)的发生方式。 - 在实际的类文件中静态声明,在自动加载器中动态声明。

    我检查并删除了类依赖项的所有包含/要求。这样就解决了问题。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多