强制在php中重新缓存WSDL

16

我知道如何在PHP中禁用WSDL缓存,但是如何强制重新缓存WSDL呢?

这是我尝试过的方法:我将缓存设置为禁用,然后新的方法按预期显示出来了。然后我激活了缓存,但由于某种原因,我的旧的不起作用的wsdl再次出现了。那么,我该如何强制使用新的WSDL覆盖旧的缓存呢?

4个回答

40

我猜当你禁用缓存时,它也会停止向缓存中写入。因此,当你重新启用缓存时,旧的缓存副本仍将存在且有效。你可以尝试(启用缓存后)

ini_set('soap.wsdl_cache_ttl', 1);

我将time-to-live设置为1秒,因为我认为如果你将其设为0,则会完全禁用缓存但不会删除条目。当您想要清除缓存副本时,您可能只需要将这行代码放入。


2
这是我见过的唯一一个真正有效的答案。谢谢你。 - dev
1
你让我开心极了! - Peter Knut

12

在我的php.ini中有一个条目看起来像这样:

soap.wsdl_cache_dir="/tmp"

我在 /tmp 目录下发现了一堆以 wsdl-[某个十六进制字符串] 命名的文件。

我可以使用以下命令清除缓存的 wsdl 文件:

rm /tmp/wsdl-*

1
不是一个好的解决方案。我没有服务器访问权限...即使我有...也有很多SOAP服务正在运行。找出与我现在工作的webservice相对应的缓存文件将是不可能的。 - Diego Favero

3

从缓存中删除旧的WSDL。


不是一个好的解决方案。我没有服务器访问权限...即使我有...有很多SOAP服务在运行。找出哪个缓存文件对应于我现在正在工作的WS将是不可能的。 - Diego Favero

1

我会尝试

$limit = ini_get('soap.wsdl_cache_limit');
ini_set('soap.wsdl_cache_limit', 0);
ini_set('soap.wsdl_cache_limit', $limit);

或者将 soap.wsdl_cache_ttl 设置为0然后回退


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接