phpでsoap通信を使った処理

January 13, 2014,
tags: cache php soap


このエントリーをはてなブックマークに追加

ここ数年REST API系なものばかりの開発していたのですが、久しぶりにSOAPを使ったAPI系の開発をしている僕です。
さて、PHPでsoapといえば、SOAPライブラリを使えばいいんですが、なかなか使わないからモジュール入ってなかったりいろいろなトラブルがあるかと思います。

  1. SOAPライブラリがない
    まずPHPにSOAPライブラリがないことが多々あります。
    SoapClientを利用した処理の部分でエラーが発生することで悩まされる事もあるのではないでしょうか?
$ php -m | grep soap
soap

ここでsoapって出れば、soapが入っていることになります。

ない場合は、インストールすればいいのですが、、、ここは環境によってインストール方法が変わりますよね。。。
ただ、CentOSとかFedoraとかRedHat系で、yumでインストールしてるなら以下のようにすればインストールできるかと思います。

$ yum install php-soap

ソースから入れている場合はconfigureするときにオプションを指定しましょう

$ ./configure '--enable-soap'
  1. SOAPのキャッシュが有効になっている場合
    SOAP通信でデータを取得するような場合に、データが取得できない場合があります。
    違うシステムで定期的に更新されているデータを取得しようとしたのに更新分だけ取得できないなんて事も・・・

そんな時はキャッシュを疑いましょう。

とりあえず、SOAPの設定オプションを見てみると以下の項目があります。

soap.wsdl_cache_enabled integer
WSDLキャッシュ機能有効または無効にします。

ってことでこいつを無効をdiseableにすれば良いと思います。
もしくは
soap.wsdl_cacheを0もしくはWSDL_CACHE_NONEにするとキャッシュされなくなるかと思います。

他にもSoapClientクラスのインスタンスでキャッシュの指定をする事も出来ます。

<?php
$soapClient = new SoapClient(["cache_wsdl" =&gt; WSDL_CACHE_NONE]);

ということで、うまくキャッシュを利用しつつ、利用したくないところには利用しないように細かく制御していくのが正解ではないでしょうか?

参考
http://www.php.net/manual/ja/soapclient.soapclient.php

comments powered by Disqus