PHP'de bir WSDL önbelleğini nasıl temizleyebilirsiniz?


91

Dönüşümü php_info()WSDL önbellek tutulur nerede ( /tmpo WSDL ile başlayan tüm dosyaları silmek için güvenli ise), ama mutlaka bilmiyorum.

Evet, gerekir sadece silme her şeye muktedir /tmp, ama herhangi tüm WSDL dosyaları silerseniz bu etkisi başka ne bilmiyorum.

Yanıtlar:


200

WSDL önbellek dosyalarını güvenle silebilirsiniz. Gelecekte önbelleğe almayı önlemek istiyorsanız, şunu kullanın:

ini_set("soap.wsdl_cache_enabled", 0);

veya dinamik olarak:

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

31
SoapClient kullanırken, 0'ı kodlamak yerine, WSDL_CACHE_NONE sabitini kullanmanızın tavsiye edildiğine inanıyorum. Bkz. Php.net/manual/en/soapclient.soapclient.php
Dan Burton

Her neyse, önbelleğe alma işlevinin olduğu gibi olmasına izin verebilirim, ancak bazıları bir süre için tüm önbelleği nasıl geçersiz kılar? .Net vb.
İle

Bu çözüm önbelleği temizler, ancak aynı zamanda performans için de bir değiş tokuş.
Nabeel Arshad

5
Önbelleği gerçekten temizlemek için, / tmp dosyaları kaldırılmış olmasına rağmen, bu ayarı kullanıp ini_set('soap.wsdl_cache_ttl', 1);bir saat bekletene kadar hala wsdl önbellek sorunları alıyordum - burada bulundu: stackoverflow.com/questions/323561/…
Joshua Fricke

27

Sunucudaki klasörünüzdeki tüm wsdl*dosyaları kaldırın /tmp.

WSDL dosyaları, php.ini'de tanımlanan tüm önbellek dosyaları için varsayılan konumunuzda önbelleğe alınır. Oturum dosyalarınızla aynı konum.


Lütfen bu tmp klasörünün nerede olduğunu bana bildirir misiniz?
Kamran Shahid

3
/ Tmp konumunda. Php farklı bir konum kullanmak üzere ayarlanmış olabilir, php -i | grep wsdl_cache_dir
siliconrockstar

Bu benim içindi. Not: docker-compose kullanıyordum , bu yüzden yeni bir docker-compose up yapmadan önce docker-compose rm <container> çalıştırmam gerekiyordu .
conradkleinespel

Wsdl önbelleğinin klasörünü "php -i | grep soap.wsdl_cache_dir" ile bulabilirsiniz
Daniel Müller

13

kodu zaten dağıttıysanız veya herhangi bir yapılandırmayı değiştiremiyorsanız, tüm geçici dosyaları wsdl'den kaldırabilirsiniz:

rm /tmp/wsdl-*

2
Elbette WSDL_CACHE_DISK kullanıyorsanız
carlosvini

Windows'ta varsayılan olarak c: \ tmp
b3wii

12

Wsdl url'sinde bir önbellek bozucu kullanmanızı öneririm.

Uygulamalarımızda wsdl url'sinde bir SVN Revizyon kimliği kullanırız, böylece müşteri yapıların değiştiğini anında bilir. Bu, uygulamamızda çalışır çünkü sunucu tarafını her değiştirdiğimizde istemciyi de buna göre ayarlamamız gerekir.

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

Bu, svn'nin doğru şekilde yapılandırılmasını gerektirir. Tüm depolarda bu, varsayılan olarak etkindir.

Her iki bileşenden (sunucu, istemci) sorumlu değilseniz veya SVN kullanmıyorsanız, wsdl url'nizde önbellek bozucu olarak kullanılabilecek başka bir gösterge bulabilirsiniz.


7
Başka bir parametre varsa, bazı SABUN sunucusu WSDL'ye hizmet etmez.
Raphael Riel

4

Sadece dokümantasyon amacıyla:

Şimdi (2014) tüm bu değerli ve doğru yaklaşımlardan sadece birinin başarılı olduğunu gözlemledim. Sunucuda WSDL'ye bir işlev ekledim ve istemci yeni işlevi tanımıyordu.

  • WSDL_CACHE_NONEParametrelere eklemek yardımcı olmadı.
  • Önbellek bozucu eklemek yardımcı olmadı.
  • Ayar soap.wsdl_cache_enabledPHP ini yardım etti.

Şimdi bu üçünün birleşimi olup olmadığından emin değilim veya bazı özellikler korkunç bir şekilde uygulanıp uygulanmadığından rastgele olarak işe yaramaz kalabilirler veya anlaşılmayan bazı özellikler hiyerarşisi olup olmadığından emin değilim.

Son olarak, bu tür sorunları çözmek için üçünü de kontrol etmeniz gerektiğini bekleyin.


FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); benim için iyi çalıştı
hobailey

0

Düzenleyin php.inidosya, aramak soap.wsdl_cache_enabledve değerini ayarlamak0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.