PHPでWSDLキャッシュをクリアするにはどうすればよいですか?


88

経由でphp_info()WSDLキャッシュが保持される/tmp(WSDL で始まるすべてのファイルを削除しても安全である場合)が、私は必ずしも知りません。

はい、すべてをから削除できるはずです/tmp、すべてのWSDLファイルを削除した場合、これが他にどのような影響を与えるかわかりません。

回答:


196

WSDLキャッシュファイルを安全に削除できます。今後のキャッシュを防止したい場合は、以下を使用します。

ini_set("soap.wsdl_cache_enabled", 0);

または動的に:

$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );

31
SoapClientを使用する場合、0をハードコーディングする代わりに、定義済みの定数WSDL_CACHE_NONEを使用することをお勧めします。php.net/manual/en/soapclient.soapclient.phpを
Dan Burton

とにかく、私はキャッシュ機能をそのままにすることができますが、一時的にすべてのキャッシュを無効にする方法もありますか?これらのことは.netなどで簡単に実行できます
Kamran Shahid

このソリューションはキャッシュをクリアしますが、パフォーマンスのトレードオフでもあります。
Nabeel Arshad、2015年

5
実際にキャッシュをクリアするために、/ tmpファイルが削除されていても、この設定を使用するまではwsdlキャッシュの問題が発生していました ini_set('soap.wsdl_cache_ttl', 1);、それは時間放置することは-ここで見つける:stackoverflow.com/questions/323561/...
ジョシュアフリッケ

26

サーバー上のフォルダー内のすべてのwsdl*ファイルを削除します/tmp

WSDLファイルは、php.iniで定義されているすべてのキャッシュファイルのデフォルトの場所にキャッシュされます。セッションファイルと同じ場所。


このtmpフォルダーの場所を教えてください。
Kamran Shahid 2015年

2
/ tmpにあります。PHPが別の場所を使用するように設定されている可能性があります。php-i | grep wsdl_cache_dir
シリコン

これで終わりです。注:docker-composeを使用していたため、新しいdocker-compose upを実行する前にdocker-compose rm <container>を実行する必要がありました
conradkleinespel 2016年

「php -i | grep soap.wsdl_cache_dir」を使用してwsdlキャッシュのフォルダーを見つけることができます
Daniel K. Mueller

13

コードを既にデプロイした場合、または構成を変更できない場合は、wsdlからすべての一時ファイルを削除できます。

rm /tmp/wsdl-*

2
WSDL_CACHE_DISKを使用している場合はもちろん、これも私が行うことです
carlosvini

Windowsでは、デフォルトはc:\ tmp
b3wii

12

wsdl urlでキャッシュ無効化を使用することをお勧めします。

私たちのアプリでは、wsdl urlでSVNリビジョンIDを使用しているため、クライアントは構造の変化をすぐに認識できます。これはアプリで機能します。サーバー側を変更するたびに、それに応じてクライアントも調整する必要があるためです。

$client = new SoapClient('http://somewhere.com/?wsdl&rev=$Revision$');

これには、svnが適切に設定されている必要があります。すべてのリポジトリでこれがデフォルトで有効になっているわけではありません。

両方のコンポーネント(サーバー、クライアント)を担当しない場合、またはSVNを使用しない場合は、wsdl urlでキャッシュ無効化として使用できる別のインジケーターを見つけることができます。


7
別のパラメーターが存在する場合、一部のSOAPサーバーはWSDLを提供しません。
Raphael Riel 14年

4

ドキュメンテーションの理由のために:

私は今(2014年)、これらのすべての価値ある正しいアプローチから、1つだけが成功したことを観察しました。サーバーのWSDLに関数を追加しましたが、クライアントは新しい関数を認識しませんでした。

  • WSDL_CACHE_NONEパラメータに追加しても効果がありませんでした。
  • キャッシュバスターを追加しても効果がありませんでした。
  • soap.wsdl_cache_enabledPHP iniへの設定が役立ちました。

それが3つすべての組み合わせであるのか、またはいくつかの機能がひどく実装されて無作為に役に立たないままであるのか、または理解されていない機能の階層があるのか​​は、今はわかりません。

したがって、最後に、このような問題を解決するには、3つすべてをチェックする必要があることを期待してください。


FYI ini_set( "soap.wsdl_cache_enabled"、WSDL_CACHE_NONE); 私にとってはうまくいった
hobailey

0

php.iniファイルを編集しsoap.wsdl_cache_enabled、値を検索して設定します0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.