3

Windows 7(64ビット)システムでZendServerCEを使用しています。

ZendFramework2.0を使用してWebサイトを開発しています。このWebサイトでは、DOMDocumentを使用して外部Webサイト(URLで指定)を分析します。

このプロジェクトは、ZendFramework1.12とZendServerCE 4(PHP 5.2)で開始しました。ここで、Zend Server CE 5.6.0(apache2.2、PHP 5.3.14、ZF2-Support)をインストールしました。ZF2.0でプロジェクトを再構築します。1つの機能を除いて、すべてが正常に機能します。

DOMDocumentをインスタンス化しようとすると、次のエラーメッセージ(php-error.log)が表示されます。

Fatal error: Class 'Application\Controller\DOMDocument' not found in
_Path_\module\Application\src\Application\Controller\SearchbarController.php on line 81

PHP 5.2(ZF 1.12)およびZend Server CE 4では、この機能は完全に機能しました。しかし今...何も変更せずに、このエラーをスローします。

dom-extensionとxml-extensionはPHP5.3に組み込まれています。phpinfoとphp.iniをチェックして、これらの拡張機能が実行されていることを確認しました。

php-xmlをインストールする必要があることを読みました。しかし、dom、xml、libxmlが実行されています...なぜそれらを再インストールする必要があるのですか?

ZendServerCEをアップグレードした後にDOMDocumentをインスタンス化できなかった理由はわかりません。ZF2.0がこのエラーの考えられる理由である可能性があります。しかし、私はこれを指し示すものを見つけることができません。

4

1 に答える 1

4

つまり、このバグの原因となったのは、名前空間(ZF2で非常に頻繁に使用されるPHP 5.3の機能ですが、ZF 1.xではありません)の導入です。この行で...

$dom = new DOMDocument(...)

...現在インポートされている名前空間のみがZFによってこのクラスに対してチェックされます。DOMDocumentまた、クラスは実際にはグローバル名前空間に属しているため、失敗します。

理由がわかると、解決策は簡単です。クラス名の前にglobal namespace specifier-\記号-を使用します。このような:

$dom = new \DOMDocument(...)
于 2012-11-10T15:56:43.580 に答える