94 votes

En PHP, comment effacer un cache WSDL ?

A travers php_info() où se trouve le cache WSDL ( /tmp ), mais je ne sais pas nécessairement s'il est sûr de supprimer tous les fichiers commençant par WSDL.

Oui, je devrait être en mesure de tout supprimer de /tmp mais je ne sais pas ce que cela pourrait encore faire si je supprime tous les fichiers WSDL.

203voto

Owen Points 36009

Vous pouvez supprimer sans risque les fichiers cache WSDL. Si vous souhaitez empêcher toute mise en cache future, utilisez :

ini_set("soap.wsdl_cache_enabled", 0);

ou dynamiquement :

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

31 votes

Je crois que lorsque vous utilisez SoapClient, au lieu de coder en dur un 0, il est recommandé d'utiliser la constante définie WSDL_CACHE_NONE. Voir php.net/manual/fr/soapclient.soapclient.php

0 votes

Quoi qu'il en soit, je peux laisser la fonction de mise en cache telle qu'elle est, mais comment invalider tous les caches pour un temps donné ? Nous pouvons faire ces choses facilement en .net e.t.c.

0 votes

Cette solution permet de vider la mémoire cache, mais elle est aussi un compromis pour les performances.

27voto

user3259435 Points 31

Supprimer tout wsdl* dans votre /tmp sur le serveur.

Les fichiers WSDL sont mis en cache dans votre emplacement par défaut pour tous les fichiers de cache définis dans le php.ini. Le même emplacement que vos fichiers de session.

0 votes

Pouvez-vous me dire où se trouve ce dossier tmp ?

4 votes

C'est dans /tmp . Php peut être configuré pour utiliser un emplacement différent, vous pouvez le localiser en faisant php -i | grep wsdl_cache_dir

0 votes

C'était ça pour moi. Note : J'utilisais docker-compose alors j'ai dû courir docker-compose rm <container> avant de faire un nouveau docker-compose up .

13voto

Markomafs Points 48

Si vous avez déjà déployé le code ou si vous ne pouvez pas modifier la configuration, vous pouvez supprimer tous les fichiers temporaires de wsdl :

rm /tmp/wsdl-*

2 votes

C'est également ce que je fais, bien sûr dans le cas où vous utilisez WSDL_CACHE_DISK

0 votes

Sous Windows, la valeur par défaut est c : \tmp

12voto

staabm Points 395

Je recommande d'utiliser un cache-buster dans l'url wsdl.

Dans nos applications, nous utilisons un identifiant de révision SVN dans l'url wsdl afin que le client soit immédiatement informé des changements de structure. Cela fonctionne pour notre application car, chaque fois que nous modifions le côté serveur, nous devons également adapter le client en conséquence.

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

Cela nécessite que svn soit configuré correctement. Ceci n'est pas activé par défaut sur tous les dépôts.

Si vous n'êtes pas responsable des deux composants (serveur, client) ou si vous n'utilisez pas SVN, vous pouvez trouver un autre indicateur qui peut être utilisé comme un cache-buster dans votre url wsdl.

7 votes

Certains serveurs SOAP ne serviront pas le WSDL si un autre paramètre est présent.

4voto

peter_the_oak Points 1272

Juste pour la raison de la documentation :

J'ai maintenant (2014) observé que de toutes ces approches précieuses et correctes, une seule a été couronnée de succès. J'ai ajouté une fonction au WSDL sur le serveur, et le client ne reconnaissait pas la nouvelle fonction.

  • Ajout de WSDL_CACHE_NONE aux paramètres n'a pas aidé.
  • L'ajout de l'anti-cache n'a pas aidé.
  • Réglage de soap.wsdl_cache_enabled dans l'ini de PHP.

Je ne sais plus si c'est la combinaison des trois, ou si certaines fonctionnalités sont terriblement mises en œuvre de sorte qu'elles restent inutiles au hasard, ou encore s'il existe une certaine hiérarchie de fonctionnalités non comprises.

Pour finir, attendez-vous à devoir vérifier les trois pour résoudre des problèmes comme ceux-ci.

0 votes

Pour information, ini_set("soap.wsdl_cache_enabled", WSDL_CACHE_NONE) ; a bien fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X