在PHP中,如何清除WSDL缓存?

时间:2008-11-19 21:46:58

标签: php soap caching wsdl

通过保存WSDL缓存的php_info()/tmp),但我不一定知道删除所有以WSDL开头的文件是否安全。

是的,我应该能够删除/tmp中的所有内容,但我不知道如果删除任何所有WSDL文件,这会产生什么影响。

6 个答案:

答案 0 :(得分:179)

您可以安全地删除WSDL缓存文件。如果您希望阻止将来的缓存,请使用:

ini_set("soap.wsdl_cache_enabled", 0);

或动态:

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

答案 1 :(得分:21)

删除服务器上/ tmp文件夹中的所有wsdl *文件。

WSDL文件缓存在php.ini中定义的所有缓存文件的默认位置。与会话文件位置相同。

答案 2 :(得分:12)

我建议在wsdl url中使用cache-buster。

在我们的应用程序中,我们在wsdl url中使用SVN Revision id,以便客户端立即知道更改结构。这适用于我们的应用程序,因为每次我们更改服务器端时,我们还需要相应地调整客户端。

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

这需要正确配置svn。并非所有存储库都默认启用。

如果您不对两个组件(服务器,客户端)负责,或者您不使用SVN,您可能会发现另一个指标可用作wsdl网址中的缓存破坏程序。

答案 3 :(得分:8)

如果您已部署代码或无法更改任何配置,则可以从wsdl中删除所有临时文件:

rm /tmp/wsdl-*

答案 4 :(得分:4)

仅出于文档的原因:

我现在(2014年)观察到,从所有这些有价值和正确的方法中,只有一个是成功的。我在服务器上为WSDL添加了一个函数,客户端没有识别新函数。

  • 在参数中添加WSDL_CACHE_NONE没有帮助。
  • 添加缓存破坏程序没有帮助。
  • soap.wsdl_cache_enabled设置为PHP ini帮助。

我现在不确定它是否是三者的组合,或者是否某些功能被严格实施,因此它们可能随机无用,或者如果某些功能层次结构未被理解。

最后,期望你必须检查这三个问题来解决这些问题。

答案 5 :(得分: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