在PHP中,如何清除WSDLcaching?
在通过php_info()
来保存WSDLcaching的地方( /tmp
),但是我不一定知道删除所有以WSDL开头的文件是否安全。
是的,我应该只能删除/tmp
所有内容,但是我不知道如果删除所有的WSDL文件,这可能会产生什么影响。
您可以安全地删除WSDLcaching文件。 如果你想防止未来的caching,使用:
ini_set("soap.wsdl_cache_enabled", 0);
或dynamic地:
$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );
删除服务器上的/ tmp文件夹中的所有wsdl *文件。
WSDL文件caching在您的默认位置,用于在php.ini中定义的所有caching文件。 与会话文件位置相同。
我build议在wsdl url中使用cache-buster。
在我们的应用程序中,我们在wsdl url中使用了一个SVN修订版ID,所以客户端立即知道正在改变的结构。 这对我们的应用程序有效,因为每次我们改变服务器端,我们也需要相应地调整客户端。
$client = new SoapClient('http://somewhere.com/?wsdl&rev=$Revision$');
这需要svn被正确configuration。 不在所有的存储库,这是默认启用。
如果你不对这两个组件(服务器,客户端)负责,或者你不使用SVN,你可能会发现另一个指标,可以在你的wsdl url中用作caching破坏者。
如果您已经部署了代码或者无法更改任何configuration,则可以从wsdl中删除所有临时文件:
rm /tmp/wsdl-*
只是为了文件的原因:
我现在(2014)观察到,从所有这些有价值和正确的方法,只有一个是成功的。 我已经在服务器上的WSDL中添加了一个函数,客户端并没有认识到这个新函数。
- 将
WSDL_CACHE_NONE
添加到参数没有帮助。 - 添加cache-buster没有帮助。
- 设置
soap.wsdl_cache_enabled
到PHP ini帮助。
我现在不确定是三者的结合,还是一些function被严格执行,以至于它们可能会随机地保持无用,或者如果某些特征层次不被理解,
所以最后,希望你必须检查所有三个解决这样的问题。