Jak w PHP wyczyścić pamięć podręczną WSDL?

91

W php_info()miejscu, w którym przechowywana jest pamięć podręczna WSDL ( /tmp), ale niekoniecznie wiem, czy można bezpiecznie usunąć wszystkie pliki zaczynające się od WSDL.

Tak, powinienem móc po prostu usunąć wszystko z /tmp, ale nie wiem, co jeszcze mogłoby to spowodować, jeśli usunę wszystkie pliki WSDL.

jW.
źródło

Odpowiedzi:

200

Możesz bezpiecznie usunąć pliki pamięci podręcznej WSDL. Jeśli chcesz zapobiec przyszłemu buforowaniu, użyj:

ini_set("soap.wsdl_cache_enabled", 0);

lub dynamicznie:

$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );
piekarnik
źródło
31
Uważam, że podczas korzystania z SoapClient, zamiast sztywnego kodowania 0, zaleca się użycie zdefiniowanej stałej WSDL_CACHE_NONE. Zobacz php.net/manual/en/soapclient.soapclient.php
Dan Burton,
W każdym razie mogę pozwolić, aby funkcja buforowania była taka, jak jest, ale jak można unieważnić całą pamięć podręczną na jakiś czas? Możemy to łatwo zrobić w .net itp.
Kamran Shahid
To rozwiązanie czyści pamięć podręczną, ale jest również kompromisem dla wydajności.
Nabeel Arshad
5
Do faktycznego wyczyszczenia pamięci podręcznej, mimo że pliki / tmp zostały usunięte, nadal otrzymywałem problemy z pamięcią podręczną wsdl, dopóki nie użyłem tego ustawienia ini_set('soap.wsdl_cache_ttl', 1);i pozostawiłem go na godzinę - znaleziono tutaj: stackoverflow.com/questions/323561/ ...
Joshua Fricke
27

Usuń wszystkie wsdl*pliki w /tmpfolderze na serwerze.

Pliki WSDL są buforowane w domyślnej lokalizacji dla wszystkich plików pamięci podręcznej zdefiniowanych w php.ini. Ta sama lokalizacja co pliki sesji.

user3259435
źródło
Czy możesz dać mi znać, gdzie znajduje się ten folder tmp?
Kamran Shahid
3
Jest w / tmp. Php może być ustawiony na używanie innej lokalizacji, możesz go zlokalizować, wykonując php -i | grep wsdl_cache_dir
siliconrockstar
To było to dla mnie. Uwaga: używałem docker-compose , więc musiałem uruchomić docker-compose rm <container> przed utworzeniem nowego docker-compose .
conradkleinespel
Możesz zlokalizować folder dla pamięci podręcznej wsdl za pomocą „php -i | grep soap.wsdl_cache_dir”
Daniel Müller,
13

jeśli już wdrożyłeś kod lub nie możesz zmienić żadnej konfiguracji, możesz usunąć wszystkie pliki tymczasowe z wsdl:

rm /tmp/wsdl-*
Markomafs
źródło
2
To też robię, oczywiście na wypadek, gdybyś korzystał z WSDL_CACHE_DISK
carlosvini,
W systemie Windows domyślnie jest to c: \ tmp
b3wii
12

Zalecam użycie pomijania pamięci podręcznej w adresie URL wsdl.

W naszych aplikacjach używamy identyfikatora wersji SVN w adresie URL WSDL, dzięki czemu klient natychmiast wie o zmianie struktury. Działa to w naszej aplikacji, ponieważ za każdym razem, gdy zmieniamy stronę serwera, musimy również odpowiednio dostosować klienta.

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

Wymaga to poprawnej konfiguracji svn. Nie we wszystkich repozytoriach jest to domyślnie włączone.

W przypadku, gdy nie jesteś odpowiedzialny za oba komponenty (serwer, klient) lub nie używasz SVN, możesz znaleźć inny wskaźnik, który może być użyty jako pomijanie pamięci podręcznej w adresie URL wsdl.

staabm
źródło
7
Niektóre serwery SOAP nie będą obsługiwać WSDL, jeśli obecny jest inny parametr.
Raphael Riel
4

Tylko ze względu na dokumentację:

Zauważyłem teraz (2014), że ze wszystkich tych cennych i poprawnych podejść tylko jedno odniosło sukces. Dodałem funkcję do WSDL na serwerze, a klient nie rozpoznał nowej funkcji.

  • Dodanie WSDL_CACHE_NONEdo parametrów nie pomogło.
  • Dodanie narzędzia do usuwania pamięci podręcznej nie pomogło.
  • soap.wsdl_cache_enabledPomogło ustawienie na PHP ini.

Nie jestem teraz pewien, czy jest to połączenie wszystkich trzech, czy też niektóre funkcje są strasznie zaimplementowane, więc mogą pozostawać bezużyteczne losowo, lub jeśli istnieje niezrozumiała hierarchia cech.

Na koniec spodziewaj się, że musisz sprawdzić wszystkie trzy, aby rozwiązać takie problemy.

peter_the_oak
źródło
FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); działało dobrze dla mnie
hobailey
0

Edytuj php.iniplik, wyszukaj soap.wsdl_cache_enabledi ustaw wartość0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
Kiran Reddy
źródło