MagentoのWebサービスへのSOAP接続を作成しようとしていますが、SOAPクライアントクラスのインスタンスを作成しようとするとエラーが発生します。 firefoxでwsdlファイルを問題なく表示でき、phpがapachesログでwsdlのリクエストを行うのを見ることができますが、それでも失敗します。 Nusoapは接続できます。
$proxy = new SoapClient('someaddress?wsdl');
エラーは
<b>Fatal error</b>: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in /home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php:29
Stack trace:
[internal function]: SoapClient->__doRequest('<?xml version="...', 'http://cornishw...', 'urn:Mage_Api_Mo...', 1, 0)
[internal function]: SoapClient->__call('call', Array)
/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php(29): SoapClient->call(NULL, 'catalog_categor...', 5, 'giftshop')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(586): include('/home/sites/cor...')
/home/sites/xxx/xxx_main/system/application/libraries/MY_Loader.php(228): MY_Loader->_ci_load(Array, '')
/home/sites/xxx/xxx_main/system/application/modules/contentpage/controllers/contentpage.php(44): MY_Loader->view('contentpage_tem...', false, true)
[internal function]: Contentpage->index()
/home/sites/xxx in <b>/home/sites/xxx/xxx_main/system/application/views/contentpage_templates/gift_service.php</b> on line <b>29</b>
ありがとう
追加してみましたか
'trace'=>1,
soapClient作成パラメーターに、次に:
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
何が起こっているのかを見るには?
サーバー側に問題がある場合、クライアントにこのエラーが表示される可能性があります。たとえば、SOAP=サーバーが解析エラーのあるPHPスクリプトである場合、クライアントはこのメッセージで失敗します。
サーバーを制御している場合は、SOAPサーバー。CentOSでは/ var/log/httpd/error_logにあるため、コマンドは:
tail -f/var/log/httpd/error_log
クライアントを更新して、エラーメッセージを確認します。サーバースクリプトでの任意のPHPエラーが表示されます。
それが誰かを助けることを願っています。
私は同じ問題に直面しました。
CLIとして実行していました。だからPHPは常に実行されていて、一定の間隔を置いて何度もsoap呼び出しを行わなければなりませんでした。
私がした間違いは、このためにシングルトンパターンを使用していたことです。私はシングルトンを使用するとパフォーマンスが向上すると考えましたが、
Error Fetching http headers in ...
呼び出しごとに新しいsaopオブジェクトを作成して修正しました。
私はあなたのPHP構成についてではありませんが、PHP 5.2.6、PHPはSOAP client:
私は同じ問題に直面し、上記のすべての解決策を試しました。悲しいことに何も動作しません。
渡されるヘッダーのこのゲーム全体。 compression headerプロパティを追加することで問題を解決しました。実際には、gzip圧縮形式での応答が必要な場合に必要です。
//set the Headers of Soap Client.
$client = new SoapClient($wsdlUrl, array(
'trace' => true,
'keep_alive' => true,
'connection_timeout' => 5000,
'cache_wsdl' => WSDL_CACHE_NONE,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
));
それが役に立てば幸い。
幸運を。
これがMagento関連の問題である場合、ソケットのタイムアウト(または期限切れ)の原因になる可能性があるため、自動再インデックス付けをオフにする必要があります。スクリプトのタスクが完了したら、再び有効にできます。 php.iniのデフォルトのソケットタイムアウトを増やすこともお勧めです。
Php.iniを更新してください
default_socket_timeout = 120
PhpにApacheモジュールの代わりにCGIがインストールされている場合、独自のphp.iniを作成できます
私のApacheエラーログで、私は見ました:
[Tue Feb 16 14:55:02 2010] [notice] child pid 9985 exit signal File size limit exceeded (25)
したがって、最大のログファイル2.1GB /var/log/system.logのすべての内容を削除しました。これですべてが機能します。
PHPバージョン5.2.6未満の問題があります。 phpのバージョンをアップグレードする必要がある場合があります。