98 Stimmen

Wie kann man in PHP einen WSDL-Cache löschen?

In durch php_info() wo der WSDL-Cache gespeichert ist ( /tmp ), aber ich weiß nicht unbedingt, ob es sicher ist, alle Dateien, die mit WSDL beginnen, zu löschen.

Ja, ich debe in der Lage sein, einfach alles aus /tmp aber ich weiß nicht, was dies sonst noch bewirken könnte, wenn ich alle WSDL-Dateien lösche.

209voto

Owen Punkte 79611

Sie können die WSDL-Cache-Dateien bedenkenlos löschen. Wenn Sie künftiges Caching verhindern möchten, verwenden Sie:

ini_set("soap.wsdl_cache_enabled", 0);

oder dynamisch:

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

33 Stimmen

Ich glaube, dass es bei der Verwendung von SoapClient empfohlen wird, die definierte Konstante WSDL_CACHE_NONE zu verwenden, anstatt eine 0 hart zu kodieren. Siehe php.net/handbuch/de/soapclient.soapclient.php

0 Stimmen

Wie auch immer, ich kann die Cache-Funktionalität so lassen, wie sie ist, aber irgendwie alle Caches für eine gewisse Zeit ungültig machen? Wir können diese Dinge leicht in .net e.t.c. tun.

0 Stimmen

Diese Lösung löscht zwar den Cache, ist aber auch ein Kompromiss in Bezug auf die Leistung.

30voto

user3259435 Punkte 289

Alle entfernen wsdl* Dateien in Ihrem /tmp Ordner auf dem Server.

WSDL-Dateien werden an dem in der php.ini definierten Standard-Speicherort für alle Cache-Dateien zwischengespeichert. Derselbe Speicherort wie Ihre Sitzungsdateien.

0 Stimmen

Können Sie mir bitte mitteilen, wo sich dieser tmp-Ordner befindet?

4 Stimmen

Es befindet sich in /tmp. Php kann so eingestellt sein, dass es einen anderen Speicherort verwendet. Sie können ihn finden, indem Sie php -i | grep wsdl_cache_dir

0 Stimmen

Das war es für mich. Anmerkung: Ich benutzte docker-compose also musste ich laufen docker-compose rm <Behälter> bevor Sie eine neue docker-compose aufwärts .

14voto

Markomafs Punkte 526

Wenn Sie den Code bereits bereitgestellt haben oder die Konfiguration nicht ändern können, können Sie alle temporären Dateien aus der WSDL entfernen:

rm /tmp/wsdl-*

2 Stimmen

Das ist auch das, was ich mache, natürlich für den Fall, dass Sie WSDL_CACHE_DISK verwenden.

0 Stimmen

Unter Windows ist dies standardmäßig c: \tmp

12voto

staabm Punkte 1495

Ich empfehle die Verwendung eines Cache-Busters in der wsdl-URL.

In unseren Anwendungen verwenden wir eine SVN-Revisions-ID in der wsdl-URL, damit der Client sofort weiß, wenn sich Strukturen ändern. Das funktioniert bei unserer App, denn jedes Mal, wenn wir die Serverseite ändern, müssen wir auch den Client entsprechend anpassen.

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

Dazu muss svn richtig konfiguriert sein. Nicht bei allen Repositories ist dies standardmäßig aktiviert.

Falls Sie nicht für beide Komponenten (Server, Client) verantwortlich sind oder kein SVN verwenden, können Sie einen anderen Indikator finden, der als Cache-Buster in Ihrer wsdl-URL verwendet werden kann.

7 Stimmen

Einige SOAP-Server stellen die WSDL nicht bereit, wenn ein anderer Parameter vorhanden ist.

5voto

peter_the_oak Punkte 3333

Nur aus Gründen der Dokumentation:

Ich habe nun (2014) festgestellt, dass von all diesen wertvollen und richtigen Ansätzen nur einer erfolgreich war. Ich habe der WSDL auf dem Server eine Funktion hinzugefügt, und der Client erkannte die neue Funktion nicht.

  • Hinzufügen von WSDL_CACHE_NONE zu den Parametern hat nicht geholfen.
  • Das Hinzufügen des Cache-Busters hat nicht geholfen.
  • Einstellung soap.wsdl_cache_enabled in der PHP-Ini geholfen.

Ich bin mir jetzt nicht sicher, ob es die Kombination aus allen drei Faktoren ist, oder ob einige Funktionen so schlecht implementiert sind, dass sie zufällig nutzlos bleiben, oder ob es eine Hierarchie von Funktionen gibt, die ich nicht verstehe.

Rechnen Sie also damit, dass Sie alle drei prüfen müssen, um Probleme wie diese zu lösen.

0 Stimmen

Zu Ihrer Information: ini_set("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); hat bei mir gut funktioniert

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X