PHP에서 WSDL 캐시를 어떻게 지울 수 있습니까?


91

를 통해 php_info()WSDL에 캐시가 유지되는 경우 ( /tmp이 WSDL로 시작하는 모든 파일을 삭제하는 것이 안전 경우),하지만 난 반드시 모른다.

네, 해야 에서 불과 삭제 모든 것을 할 수있을 /tmp,하지만 난 어떤 모든 WSDL 파일을 삭제하면이 영향을 수 밖에 모르겠어요.

답변:


200

WSDL 캐시 파일을 안전하게 삭제할 수 있습니다. 향후 캐싱을 방지하려면 다음을 사용하십시오.

ini_set("soap.wsdl_cache_enabled", 0);

또는 동적으로 :

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

31
SoapClient를 사용할 때 0을 하드 코딩하는 대신 정의 된 상수 WSDL_CACHE_NONE을 사용하는 것이 좋습니다. php.net/manual/en/soapclient.soapclient.php
Dan Burton

어쨌든 캐싱 기능을 그대로 둘 수는 있지만 잠시 동안 모든 캐시를 무효화하는 방법은 무엇입니까? 우리는 그물 등 쉽게이 일을 할 수
캄란 샤 히드에게

이 솔루션은 캐시를 지우지 만 성능에 대한 트레이드 오프이기도합니다.
Nabeel Arshad

5
실제로 캐시를 지우려면 / tmp 파일이 제거되었지만이 설정을 사용 ini_set('soap.wsdl_cache_ttl', 1);하고 한 시간 동안 그대로 둘 때까지 wsdl 캐시 문제가 계속 발생 했습니다. 여기에서 찾을 수 있습니다. stackoverflow.com/questions/323561/…
Joshua Fricke

27

wsdl*귀하의 모든 파일을 제거/tmp서버 폴더에있는 .

WSDL 파일은 php.ini에 정의 된 모든 캐시 파일의 기본 위치에 캐시됩니다. 세션 파일과 동일한 위치.


이 tmp 폴더가 어디에 있는지 알려주시겠습니까?
Kamran Shahid

3
/ tmp에 있습니다. PHP는 다른 위치를 사용하도록 설정되어있을 수 있습니다. php -i | grep wsdl_cache_dir
siliconrockstar 2015

이것은 나를위한 것이었다. 참고 : 나는 docker-compose를 사용 하고 있었기 때문에 새로운 docker-compose up을 수행하기 전에 docker-compose rm <container> 를 실행 해야했습니다 .
conradkleinespel

당신과 함께 WSDL 캐시 폴더를 찾을 수 있습니다 "PHP -i | 그렙 soap.wsdl_cache_dir"
다니엘 뮐러

13

코드를 이미 배포했거나 구성을 변경할 수없는 경우 wsdl에서 모든 임시 파일을 제거 할 수 있습니다.

rm /tmp/wsdl-*

2
WSDL_CACHE_DISK
carlosvini

Windows에서는 기본적으로 c : \ tmp
b3wii

12

wsdl URL에서 캐시 버스터를 사용하는 것이 좋습니다.

우리 앱에서는 wsdl URL에 SVN 개정 ID를 사용하므로 클라이언트는 구조 변경을 즉시 알 수 있습니다. 이것은 우리 앱에서 작동합니다. 왜냐하면 서버 측을 변경할 때마다 그에 따라 클라이언트도 조정해야하기 때문입니다.

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

이를 위해서는 svn이 올바르게 구성되어야합니다. 모든 저장소에서 이것은 기본적으로 활성화되어 있습니다.

두 구성 요소 (서버, 클라이언트)에 대한 책임이 없거나 SVN을 사용하지 않는 경우 wsdl URL에서 캐시 버스터로 활용할 수있는 다른 표시기를 찾을 수 있습니다.


7
다른 매개 변수가있는 경우 일부 SOAP 서버는 WSDL을 제공하지 않습니다.
Raphael Riel

4

문서화 이유 :

나는 지금 (2014)이 모든 가치 있고 올바른 접근 방식 중에서 오직 하나만이 성공했음을 관찰했습니다. 서버의 WSDL에 기능을 추가했는데 클라이언트가 새 기능을 인식하지 못했습니다.

  • 첨가 WSDL_CACHE_NONE매개 변수를 해도 도움이되지 않았습니다.
  • 캐시 버스터를 추가해도 도움이되지 않았습니다.
  • soap.wsdl_cache_enabledPHP ini 설정 이 도움이되었습니다.

나는 그것이 세 가지 모두의 조합인지 또는 일부 기능이 끔찍하게 구현되어 무작위로 쓸모없는 상태로 남아 있는지 또는 이해되지 않는 기능 계층이 있는지 확실하지 않습니다.

따라서 마지막으로 이러한 문제를 해결하려면 세 가지를 모두 확인해야합니다.


참고로 ini_set ( "soap.wsdl_cache_enabled", WSDL_CACHE_NONE); 나를 위해 잘 작동했습니다
hobailey

0

php.ini파일을 편집 soap.wsdl_cache_enabled하고 값을 검색하여 설정하십시오.0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.