先週、nuSoapライブラリを使用してWebサービスに接続するためのコードを開発しました。コードを本番環境にデプロイしたばかりですが、すぐに、これまでに見たことのないエラーが発生し始めました。新しいsoapclientオブジェクトをインスタンス化しようとしているコード行に問題をさかのぼりました。両方のライブラリに「soapclient」という名前のクラスがあり、本番環境で作成されているクラスは、私が含めているnuSoapライブラリではなく、ネイティブのSoapライブラリからのものであることがわかりました。ネイティブSoap機能を無効にして、nuSoapに厳密に固執するにはどうすればよいですか?
3 に答える
PHP5のリリースではsoapclient
、php_soap拡張機能にクラスが含まれています。NuSOAPは、クラスの名前をに変更しましたnusoap_client
。NuSOAPのコピーが最新のものである場合は、それを使用できるはずです。これによりphp_soap拡張機能が無効になることはありませんが、それ以上競合することなくNuSOAPクラスを使用できるようになります。
ああ、気にしないで。NuSoap 0.7.3(私が使用していた)は、特にこの競合を回避するために、クラス名を「nusoap_client」に変更しました。また、ネイティブSoap拡張機能がロードされていない場合に、そのクラスを「soapclient」でエイリアス化する下位互換性チェックも含まれていました。そのため、開発マシンでそれをキャッチできませんでした。
参照:http ://code.google.com/p/nusoap-for-php5/issues/detail?id = 2
私はあなたを責めません、特にpython Webサービスと比較した場合、PHP用の組み込みのsoapライブラリは完全で完全に恥ずかしいです。
1つのオプションは、コンパイル時に拡張機能を削除することです。
この拡張機能は、PHPが--enable-soapで構成されている場合にのみ使用できます。
もう1つのオプションは、nuSoapでsoap-clientの名前を変更することです。Notepad ++の検索と置換はうまく機能しますが、実際にはこれを行う必要はありません。