私は PHP 5.2.6 で NuSOAP を使用していますが、メッセージの最大サイズが 1000 バイトしかないことがわかります (意味のあることを行うのが難しくなっています)。これはエンドポイントの WSDL で設定されていますか、それとも NuSOAP で構成できるものですか?
5 に答える
「1000バイト制限」に関するFUDについて... nusoap_clientソースコードを調べたところ、制限はデバッグ出力に対してのみ有効であることがわかりました。
これは、すべてのデータが処理され、(サイズに関係なく) Web サービスに渡されることを意味しますが、デバッグ ログには最初の 1000 バイト (より正確には文字) のみが表示されます。
コードは次のとおりです。
$this->debug('SOAP message length=' . strlen($soapmsg) . ' contents (max 1000 bytes)=' . substr($soapmsg, 0, 1000));
// send
$return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);
明らかなように、getHTTPBody()
呼び出しでは .xml ファイル全体が使用$soapmsg
され、デバッグ出力のみが最初の 1000 文字に制限されています。これを変更したい場合はsubstr()
、必要に応じて呼び出しを変更するか、単純に置き換えます$soapmsg
(すべてがデバッグ出力にも表示されます)。
これは、実際に送信されるデータの実際の制限とはまったく関係ありません。もちろん、送信できるサイズを実際に制限する他の要因がある可能性があります (たとえば、PHP スクリプトに設定された RAM 制限、HTTP 実装の制限、使用可能な仮想メモリの不足など)。 NuSOAP で送信できるデータの「1000 バイト制限」など。
本番ボックスでは、PHP 5.2.5の組み込みSoap関数をサーバーとして使用し、PHP 4ではNuSoapを使用して、1MBを超えるメッセージを正常に転送しました。
どちらの製品にも制限はないと思いますが、php.iniの設定を確認してください。
max_input_time (defaults to 60)
これは、各スクリプトが入力を解析できる時間です。解析が完了する前に時間が経過すると、スクリプトは実行されません。
補足:可能であれば、SoapClient /SoapServerPHP拡張クラスに移行することをお勧めします。NuSoapは、特にキャッシュに関しては、高負荷の状況ではあまり信頼できないことが証明されています。NuSoapが単にwsdl定義を「忘れて」、none-wsdl-modeで動作しているのを見たことがあります。変...
私は PHP に少し慣れているだけで、NuSOAP パッケージをまったく使用したことがありません。ただし、SOAP メッセージのサイズは、トランスポート メディアによってのみ制限されます。HTTP の場合、ほぼ無制限である必要があります (フォーム POST リクエストでの 16384 バイトの制限は、SOAP によるものではなく、ブラウザの制限によるものです (実際にはもう存在しない可能性がありますが、確かなことはわかりません)。 )。
NuSOAP の作成者/管理者の連絡先を見つけて、直接問い合わせることをお勧めします。WSDL に何かが含まれていない限り (メッセージ本文のサイズ全体を制限する WSDL 仕様は何も思い浮かびません... 個々のパラメーター (XML スキーマ ファセットを介して) であり、本文全体は制限されません)、制限ツールキットにあるようです。
あなたはSOAPメッセージを送信しているのか受信しているのかを言っていません。送信している場合は、NuSOAPがGETではなくPOSTを介して送信していることを確認しています(コードを詳しく調べて確認する必要があります。ドキュメントがまばらであることがわかりました)。受信している場合は、PHP.INIの設定でメモリやデータサイズなどを確認してください。実際、とにかく、メモリ制限を確認してください。NuSOAPは、メモリを大量に消費するIIRCです。
メッセージのサイズは、ハードコードされた値ではなく、PHP のメモリ制限によって制限されると思います。少なくとも、6.5MB の文字列を問題なく送信できました。8MB の文字列を送信しようとすると、nusoap.php 内でメモリ不足の例外が発生しました (私のサーバーには PHP の制限が 64MB あります)。