php_info()
WSDL キャッシュが保持されている場所 ( /tmp
) 内にありますが、WSDL で始まるすべてのファイルを削除しても安全かどうかは必ずしもわかりません。
はい、からすべてを削除するだけでよいはず/tmp
ですが、すべての WSDL ファイルを削除すると、他にどのような影響があるかわかりません。
WSDL キャッシュ ファイルは安全に削除できます。将来のキャッシュを防ぎたい場合は、次を使用します。
ini_set("soap.wsdl_cache_enabled", 0);
または動的に:
$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );
コードを既にデプロイしているか、構成を変更できない場合は、wsdl からすべての一時ファイルを削除できます。
rm /tmp/wsdl-*
wsdl url でキャッシュバスターを使用することをお勧めします。
私たちのアプリでは、クライアントが構造の変更をすぐに認識できるように、wsdl URL で SVN リビジョン ID を使用します。サーバー側を変更するたびに、それに応じてクライアントも調整する必要があるため、これはアプリで機能します。
$client = new SoapClient('http://somewhere.com/?wsdl&rev=$Revision$');
これには、svn を適切に構成する必要があります。すべてのリポジトリでこれがデフォルトで有効になっているわけではありません。
両方のコンポーネント (サーバー、クライアント) を担当していない場合、または SVN を使用していない場合は、wsdl URL でキャッシュバスターとして利用できる別のインジケーターを見つけることができます。
ドキュメントの理由から:
私は現在 (2014 年)、これらすべての価値のある正しいアプローチのうち、成功したのは 1 つだけであることを観察しました。サーバー上の WSDL に関数を追加しましたが、クライアントが新しい関数を認識しませんでした。
WSDL_CACHE_NONE
は役に立ちませんでした。soap.wsdl_cache_enabled
PHP iniへの設定が役立ちました。それが 3 つすべての組み合わせなのか、一部の機能がひどく実装されているために無作為に役に立たないままになっているのか、理解されていない機能の階層があるのかどうかはわかりません。
最後に、このような問題を解決するには、3 つすべてをチェックする必要があると考えてください。