【问题标题】:In PHP how can you clear a WSDL cache?在 PHP 中如何清除 WSDL 缓存?
【发布时间】:2023-03-17 04:13:01
【问题描述】:

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

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

【问题讨论】:

    标签: php soap caching wsdl


    【解决方案1】:

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

    ini_set("soap.wsdl_cache_enabled", 0);
    

    或动态:

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

    【讨论】:

    • 相信在使用SoapClient的时候,与其硬编码一个0,不如使用定义好的常量WSDL_CACHE_NONE。见php.net/manual/en/soapclient.soapclient.php
    • 无论如何我可以让缓存功能保持原样,但是暂时如何使所有缓存无效?我们可以在 .net e.t.c. 中轻松完成这些事情
    • 此解决方案确实会清除缓存,但它也是对性能的折衷。
    • 为了实际清除缓存,即使 /tmp 文件已被删除,我仍然遇到 wsdl 缓存问题,直到我使用此设置 ini_set('soap.wsdl_cache_ttl', 1); 并让它静置一个小时 - 在这里找到:@987654322 @
    【解决方案2】:

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

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

    【讨论】:

    • 你能告诉我这个 tmp 文件夹在哪里吗?
    • 它位于 /tmp 。 php 可能被设置为使用不同的位置,你可以通过 php -i | 来定位它。 grep wsdl_cache_dir
    • 这是给我的。注意:我使用的是 docker-compose,所以我必须在执行新的 docker-compose up 之前运行 docker-compose rm .
    • 您可以使用 "php -i | grep soap.wsdl_cache_dir" 找到 wsdl 缓存的文件夹
    【解决方案3】:

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

    rm /tmp/wsdl-*
    

    【讨论】:

    • 这也是我所做的,当然如果你使用的是 WSDL_CACHE_DISK
    • 在 Windows 上默认为 c:\tmp
    【解决方案4】:

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

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

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

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

    如果您不负责这两个组件(服务器、客户端)或者您不使用 SVN,您可能会在您的 wsdl url 中找到另一个可以用作缓存破坏器的指标。

    【讨论】:

    • 如果存在其他参数,某些 SOAP 服务器将不会提供 WSDL。
    【解决方案5】:

    仅出于文档的原因:

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

    • WSDL_CACHE_NONE 添加到参数没有帮助。
    • 添加缓存清除器没有帮助。
    • soap.wsdl_cache_enabled 设置为 PHP ini 有帮助。

    我现在不确定它是否是这三者的组合,或者某些功能是否实施得非常糟糕,因此它们可能随机无用,或者是否存在一些不理解的功能层次结构。

    所以最后,希望您必须检查所有三个才能解决这些问题。

    【讨论】:

    • 仅供参考 ini_set("soap.wsdl_cache_enabled", WSDL_CACHE_NONE);对我来说很好
    【解决方案6】:

    编辑您的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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2019-09-29
      • 2010-11-05
      • 2012-11-12
      • 2011-05-10
      • 2011-11-04
      • 2017-02-11
      相关资源
      最近更新 更多