2008-11-19 9 views
71

Dans php_info() où le cache WSDL est maintenu (/tmp), mais je ne sais pas nécessairement s'il est sûr de supprimer tous les fichiers commençant par WSDL.En PHP, comment pouvez-vous effacer un cache WSDL?

Oui, je devrait pouvoir supprimer tout tout de /tmp, mais je ne sais pas quoi d'autre cela pourrait effectuer si je supprime tous les fichiers WSDL.

Répondre

166

Vous pouvez supprimer les fichiers de cache WSDL en toute sécurité. Si vous souhaitez empêcher la 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)); 
+26

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 http://php.net/manual/en/soapclient.soapclient.php –

+0

Merci pour cette réponse. Très utile! – Kenny

+0

Quoi qu'il en soit, je peux laisser la fonctionnalité de mise en cache comme elle l'est mais certains invalider tout le cache pour un temps? Nous pouvons faire ces choses facilement dans .net e.t.c. –

12

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 connaisse immédiatement les changements de structures. Cela fonctionne sur notre application car, chaque fois que nous changeons le côté serveur, nous devons également ajuster le client en conséquence.

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

Cela nécessite que svn soit configuré correctement. Ce n'est pas le cas 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 cache-buster dans votre URL wsdl.

+7

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

17

Supprimez tous les fichiers wsdl * de votre dossier/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 php.ini. Même emplacement que vos fichiers de session.

+0

Pouvez-vous s'il vous plaît laissez-moi savoir où se trouve ce dossier tmp? –

+2

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 – siliconrockstar

+0

C'était pour moi. Note: J'utilisais ** docker-composer **, donc je devais exécuter * docker-composer rm * avant de faire un nouveau ** docker-composer vers le haut **. – conradkdotcom

7

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

rm /tmp/wsdl-* 
+2

Il est aussi ce que je fais, bien sûr, dans le cas où vous utilisez WSDL_CACHE_DISK – carlosvini

3

Juste pour la raison de la documentation:

J'ai maintenant (2014) a observé que de toutes ces approches valables et valables, une seule avait réussi. 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 du cache-buster n'a pas aidé.

  • Réglage soap.wsdl_cache_enabled à l'API PHP aidé. Je ne sais pas si c'est la combinaison des trois, ou si certaines fonctionnalités sont terriblement implémentées pour qu'elles restent inutilisables au hasard, ou s'il y a une certaine hiérarchie d'entités non comprises. Alors, enfin, attendez-vous à devoir vérifier tous les trois pour résoudre des problèmes comme ceux-ci.

  • +0

    Pour votre information ini_set (« soap.wsdl_cache_enabled », WSDL_CACHE_NONE) ; a bien fonctionné pour moi – hobailey

    Questions connexes