En PHP, ¿cómo se puede borrar un caché WSDL?

91

A través del lugar php_info()donde se guarda la caché WSDL ( /tmp), pero no sé necesariamente si es seguro eliminar todos los archivos que comienzan con WSDL.

Sí, debería poder eliminar todo de /tmp, pero no sé qué más podría afectar esto si elimino todos los archivos WSDL.

jW.
fuente

Respuestas:

200

Puede eliminar de forma segura los archivos de caché WSDL. Si desea evitar el almacenamiento en caché en el futuro, use:

ini_set("soap.wsdl_cache_enabled", 0);

o dinámicamente:

$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );
Owen
fuente
31
Creo que al usar SoapClient, en lugar de codificar un 0, se recomienda que use la constante definida WSDL_CACHE_NONE. Ver php.net/manual/en/soapclient.soapclient.php
Dan Burton
De todos modos, puedo dejar la funcionalidad de almacenamiento en caché como está, pero ¿cómo invalidar de alguna manera todo el caché por un tiempo? Podemos hacer estas cosas fácilmente en .net, etc.
Kamran Shahid
Esta solución borra la caché, pero también es una compensación por el rendimiento.
Nabeel Arshad
5
Para borrar realmente el caché, aunque se eliminaron los archivos / tmp, todavía tenía problemas de caché wsdl hasta que usé esta configuración ini_set('soap.wsdl_cache_ttl', 1);y la dejé reposar durante una hora, que se encuentra aquí: stackoverflow.com/questions/323561/…
Joshua Fricke
27

Elimina todos los wsdl*archivos de tu /tmpcarpeta en el servidor.

Los archivos WSDL se almacenan en caché en su ubicación predeterminada para todos los archivos de caché definidos en php.ini. Misma ubicación que sus archivos de sesión.

usuario3259435
fuente
¿Puede decirme dónde reside esta carpeta tmp?
Kamran Shahid
3
Está en / tmp. Php puede estar configurado para usar una ubicación diferente, puede localizarlo haciendo php -i | grep wsdl_cache_dir
siliconrockstar
Esto fue todo para mí. Nota: estaba usando docker-compose , así que tuve que ejecutar docker-compose rm <container> antes de hacer un nuevo docker-compose up .
conradkleinespel
Puede ubicar la carpeta para el caché wsdl con "php -i | grep soap.wsdl_cache_dir"
Daniel Müller
13

Si ya implementó el código o no puede cambiar ninguna configuración, puede eliminar todos los archivos temporales de wsdl:

rm /tmp/wsdl-*
Markomafs
fuente
2
También es lo que hago, por supuesto, en caso de que esté usando WSDL_CACHE_DISK
carlosvini
En Windows, el valor predeterminado es c: \ tmp
b3wii
12

Recomiendo usar un cache-buster en la URL wsdl.

En nuestras aplicaciones usamos un ID de revisión SVN en la URL wsdl para que el cliente sepa inmediatamente de las estructuras cambiantes. Esto funciona en nuestra aplicación porque, cada vez que cambiamos el lado del servidor, también necesitamos ajustar el cliente en consecuencia.

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

Esto requiere que svn esté configurado correctamente. No en todos los repositorios esto está habilitado de forma predeterminada.

En caso de que no sea responsable de ambos componentes (servidor, cliente) o no utilice SVN, puede encontrar otro indicador que se puede utilizar como un eliminador de caché en su URL wsdl.

staabm
fuente
7
Algún servidor SOAP no servirá al WSDL si hay otro parámetro presente.
Raphael Riel
4

Solo por el motivo de la documentación:

Ahora (2014) he observado que de todos estos enfoques valiosos y correctos, solo uno tuvo éxito. Agregué una función al WSDL en el servidor y el cliente no reconocía la nueva función.

  • Agregar WSDL_CACHE_NONEa los parámetros no ayudó.
  • Agregar el destructor de caché no ayudó.
  • La configuración soap.wsdl_cache_enabledde PHP ini ayudó.

Ahora no estoy seguro de si es la combinación de los tres, o si algunas características están terriblemente implementadas, por lo que pueden permanecer inútiles al azar, o si hay alguna jerarquía de características que no se comprende.

Entonces, finalmente, espere que tenga que verificar los tres para resolver problemas como estos.

peter_the_oak
fuente
FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); funcionó bien para mí
hobailey
0

Edite su php.iniarchivo, busque soap.wsdl_cache_enabledy establezca el valor en0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
Kiran Reddy
fuente