通过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*
文件。/tmp
对于 php.ini 中定义的所有缓存文件,WSDL 文件都缓存在您的默认位置。与您的会话文件相同的位置。
如果您已经部署了代码或无法更改任何配置,则可以从 wsdl 中删除所有临时文件:
rm /tmp/wsdl-*
我建议在 wsdl url 中使用 cache-buster。
在我们的应用程序中,我们在 wsdl url 中使用 SVN Revision id,以便客户端立即知道更改的结构。这适用于我们的应用程序,因为每次我们更改服务器端时,我们还需要相应地调整客户端。
$client = new SoapClient('http://somewhere.com/?wsdl&rev=$Revision$');
这需要正确配置 svn。并非所有存储库都默认启用此功能。
如果您不对这两个组件(服务器、客户端)负责,或者您不使用 SVN,您可能会在 wsdl url 中找到另一个可以用作缓存破坏器的指标。
仅出于文档的原因:
我现在(2014 年)观察到,在所有这些有价值且正确的方法中,只有一种方法是成功的。我在服务器上的 WSDL 中添加了一个函数,但客户端无法识别新函数。
WSDL_CACHE_NONE
到参数没有帮助。soap.wsdl_cache_enabled
为 PHP ini 有帮助。我现在不确定它是否是这三者的组合,或者某些功能是否实施得非常糟糕,因此它们可能随机无用,或者是否存在一些不理解的功能层次结构。
所以最后,希望你必须检查所有三个来解决这些问题。
编辑您的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