1

ここで非常に興味深い(そして厄介な)問題があります。なんらかの理由で、PHP メソッドReflectionClass::getDocComment()が本番環境で false を返しています (もちろん、実際にはクラスにブロック コメントがありますが...)。

Doctrine AnnotationReader / DocParser が失敗する原因:

(Doctrine\Common\Annotations\AnnotationReader.php:143)

public function getClassAnnotations(ReflectionClass $class)
    {
        $this->parser->setTarget(Target::TARGET_CLASS);
        $this->parser->setImports($this->getImports($class));
        $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class));

        return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName());
    }

私は周りを見回しましたが、この問題についてはあまり見たことがありません。そのため、ローカル環境では発生しないのに、なぜ本番サーバーで発生するのか疑問に思っています。

  • PHP設定のせいでしょうか??
  • 一部の読み取り/書き込み/ファイル アクセス権 (chown など) が原因でしょうか??
  • キャッシング構成が原因でしょうか??

私はアイデアが不足していると言わなければなりません。

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

2

Ok。これは、バイトコードをキャッシュするときにすべてのコメントを削除する eAccelerator の奇妙な動作に関連しているように見えました...

http://wildlyinaccurate.com/eaccelerator-and-doctrine-2/

(再)Doctrineチームからbeberleiを引用:

docblock を削除するためのこの時期尚早な最適化は元に戻す必要があります。Docblock は PHP トークンであり、言語の一部であるため、そのように使用する必要があります。これに対するあなたの立場を修正してください。さもなければ、プロジェクトはデフォルトで eAccelerator を使用しないことを提案しなければなりません。

解決策は、eAccelerator を無効にするか、オプションを使用して再構成することです。

--with-eaccelerator-doc-comment-inclusion

(出典: https://eaccelerator.net/ticket/229 )

于 2012-04-07T04:10:19.453 に答える