2011-10-11 10 views
9

PHP用のNuSoapクラスを使用してSOAP Webサービスを呼び出すコードを開発しました。主にPHP 5のネイティブクラスではなく、NuSoapを使用しています。なぜなら、このコードが共有Webサーバーにインストールされている場合、追加の前提条件を追加したくないからです。コードは、私のマシン上で正常に動作します:NuSoapを使用するとローカルマシンでは動作しますがサーバーでは動作しません

require DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php'; 
$client = new nusoap_client('http://www.nbnws.net/ws_3_5/GatewayWebService?wsdl', true); 
$query1 = '<TaxonReportingCategoryListRequest xmlns="http://www.nbnws.net/TaxonReportingCategory" registrationKey="'.$key.'"></TaxonReportingCategoryListRequest>'; 
$response = $client->call('GetTaxonReportingCategoryList', $query1); 

私は、仮想サーバー上でこれを置くのではなくローカルで実行し、最後の行は、ちょうどそのPHPの爆弾うち約10秒間ハングする場合。例外は発生せず、PHPエラーもありません(try..catchとset_error_handlerを使って試してみました)。

私の最初の反応は、サーバー上で実行されているファイアウォールが送信要求をブロックしている可能性がありましたが、他の場所でcUrlを正常に使用していて、ここでファイアウォールが動作していないと確信しています。 $ client-> use_curlを呼び出すとNuSoap呼び出しに何の違いもありませんが、それでも動作しません。

これがなぜ起こっているのか、ご意見をいただければ幸いです。

+0

ほとんどの場合、memory_limitの設定はlocalhostとserverで異なり、サーバはメモリを使い果たします。 –

+0

提案していただきありがとうございます。メモリの上限を96Mに上げましたが、これは$ client-> setGlobalDebugLevel(0)とも呼ばれる場合にのみ有効です。デバッグをオフにしても64Mで十分ではありませんでした。私はちょうどチェックして、Webサービスは〜2MBのデータで応答しています。この場合、メモリ使用量が非常に高いことは奇妙に思えます。 – Johnvb

+0

私も同様の問題が発生しています。私は、nuSOAPが処理する256MB以上のメモリを占有したいというWebサービスからの5MBのデータ応答を持っています。 – Travis

答えて

0

あなたはWWW-データが

DOCROOT.'modules/nbn_species_dict_sync/lib/nusoap.php' ? 

それとも、別のディレクトリにnusoapコピーしようとすることができますに(許可)にアクセスしていることを確認してくださいことはできますか?

または、rootユーザーとしてコマンドプロンプトから実行することはできますか?

ところで、どのようなエラー/警告が表示されていますか?

2

Linuxで実行していると仮定してトラブルシューティングの問題が解決しない場合は、straceを使用してシステムコールを監視できます。コールは非常にわかりにくく見えることがありますが、システムが何を呼び出すかを見ることができます。

strace -p processid 

それとも、終了し、出力ファイルにダンプする実行開始からスクリプトをトレースする場合:

strace -o trace.txt myscript.php 

Here is a good strace tutorial

関連する問題