2008-11-19 25 views
71

Por medio de php_info() donde se guarda el caché WSDL (/tmp), pero no necesariamente sé si es seguro eliminar todos los archivos comenzando con WSDL.En PHP, ¿cómo se puede borrar un caché WSDL?

Sí, me debería ser capaz de simplemente eliminar todo, desde /tmp, pero yo no sé qué otra cosa podría afectar si elimino todos los archivos WSDL.

Respuesta

166

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

ini_set("soap.wsdl_cache_enabled", 0); 

o dinámica:

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

Creo que al usar SoapClient, en lugar de hardcoding un 0, se recomienda que use la constante definida WSDL_CACHE_NONE. Ver http://php.net/manual/en/soapclient.soapclient.php –

+0

Gracias por esta respuesta. ¡Muy útil! – Kenny

+0

De todos modos, puedo dejar que la funcionalidad de almacenamiento en caché sea como es, pero ¿cómo invalidar todo el caché por un tiempo? Podemos hacer esto fácilmente en .net e.t.c. –

12

recomiendo el uso de una caché de romper en el URL de WSDL.

En nuestras aplicaciones utilizamos una identificación 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 tenemos que ajustar el cliente en consecuencia.

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

Esto requiere que svn se configure correctamente. No en todos los repositorios esto está habilitado por defecto.

En caso de que no sea responsable de ambos componentes (servidor, cliente) o no use SVN, puede encontrar otro indicador que pueda utilizarse como cache-buster en su wsdl url.

+7

Algunos servidores SOAP no servirán al WSDL si hay otro parámetro presente. –

17

elimine todos los archivos wsdl * en su carpeta/tmp 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. La misma ubicación que sus archivos de sesión.

+0

¿Puede indicarme dónde se encuentra esta carpeta tmp? –

+2

Está en/tmp. Php puede configurarse para usar una ubicación diferente, puede ubicarlo haciendo php -i | grep wsdl_cache_dir – siliconrockstar

+0

Esto fue todo para mí. Nota: Estaba usando ** docker-componer **, así que tuve que ejecutar * docker-compose rm * antes de hacer una nueva ** docker-componer **. – conradkdotcom

7

Si ya ha implementado el código o no puede cambiar cualquier configuración, se puede eliminar todos los archivos temporales de WSDL:

rm /tmp/wsdl-* 
+2

Es también lo que hago, por supuesto, en caso de que esté utilizando WSDL_CACHE_DISK – carlosvini

3

sólo por la razón de la documentación:

que tengo ahora (2014) observó que de todos estos enfoques valiosos y correctos, solo uno fue exitoso. Agregué una función al WSDL en el servidor, y el cliente no reconocía la nueva función.

  • Agregar WSDL_CACHE_NONE a los parámetros no ayudó.
  • Agregar el cache-buster no ayudó.
  • Ajuste soap.wsdl_cache_enabled al PHP ini ayudado.

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

Así que, finalmente, espera que tenga que comprobar los tres para resolver problemas como estos.

+0

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

Cuestiones relacionadas