2

少しエラーが発生し、どこから始めるべきかの手がかりが見つかりません...

[11-Oct-2012 22:01:45] PHP の致命的なエラー: 行 545 の /var/www/web1/html/inc/ProjectCache.php の非オブジェクトに対するメンバー関数 getVariableIndices() の呼び出し

非常に単純に聞こえますが、コードは次のとおりです(行番号付き)

525 $itemData = $queryItems->fetchRows();
525 foreach ($questionData as $qData) {
526     $qp = QuestionPack::createWithData($qData, $itemData);
<snip>
538     $question = $qp->createGenerator(null);
539     if (!is_object($question)) {
540         trigger_error('Could not initialize generator ...', E_USER_WARNING);
541         continue;
542     }
543             
544     // Question variables
545     $vix = $question->getVariableIndices();
<snip>
597     $question->destroy();
598 }

メソッド createGenerator() は常にオブジェクトを返す必要があります。デバッグ上の理由から、後続の IF ステートメントを追加しました - 私の考えが完全に間違っているかどうかはわかりません...

destroy メソッドは、一部のインスタンス変数 (他のオブジェクトへの参照) を null に設定するため、ガベージ コレクターは循環参照に固執しません。

この問題は、生産システム (Debian、PHP 5.3.3-7+squeeze14) 上の約 10.000 プロジェクトのうちの 1 つだけで発生します。同じスクリプトとデータベースからの同じデータを使用して、Windows 開発者システム (PHP 5.3.1) に複製できませんでした。

スクリプトがこのステートメントに到達する前に、何百、何千ものメソッド呼び出しが行われることに注意してください (この実行中にキャッシュが初期化されるため、処理時間は約 14 秒です)。

現時点での私の最良の説明は、PHP スクリプトのメガバイトのどこかで、バッファ オーバーフローをトリガーするか、ガベージ コレクターを誤解させて、オブジェクトがまだ使用されているにもかかわらず解放されるということです。ただし、エラーは常に同じプロジェクトで、常に同じ行でトリガーされます (前に他のデバッグ コードを配置すると、このステートメントで移動します)。これは、私の考えでは非常に珍しいように思えます。

Web サーバーを再起動しても (もちろん) 役に立ちませんでした。以前のキャッシュ ファイルを削除しても、問題は解決しませんでした。これは私が立ち往生しているところです。他の誰かがこれがおかしいと思いますか? どこから始めればよいか考えている人はいますか??

ありがとう

バーニンレオ

4

1 に答える 1

1

php.ini に zend.enable_gc = Off を追加してガベージ コレクターを無効にすることで、php 5.3.2 の同様の奇妙な問題を修正したと思います。(そしてもちろん、Apacheまたはphpを解析しているアプリケーションサーバーを再起動します)

それでもうまくいかない場合は、動作中のサーバーの phpinfo() を問題のあるサーバーと比較することをお勧めします。できれば、Linux と Linux、または Windows と Windows を比較します。たぶん、構成の何かがあなたに飛び出します。

また、エラー レベルを上げて通知を含めます。

最後に、それが何であるかを確認するオブジェクトではない場合、$question で gettype と get_class を使用します。 http://www.php.net/manual/en/function.gettype.php http://www.php.net/manual/en/function.get-class.php

エラーが発生したときに、おそらく debug_backtrace も呼び出します。 http://php.net/manual/en/function.debug-backtrace.php

幸運を!

于 2012-10-11T22:16:03.317 に答える