Di PHP bagaimana Anda bisa menghapus cache WSDL?

91

Di php_info()mana cache WSDL disimpan ( /tmp), tetapi saya tidak selalu tahu apakah aman untuk menghapus semua file yang dimulai dengan WSDL.

Ya, saya seharusnya bisa menghapus semuanya dari /tmp, tapi saya tidak tahu apa lagi efeknya jika saya menghapus semua file WSDL.

jW.
sumber

Jawaban:

200

Anda dapat dengan aman menghapus file cache WSDL. Jika Anda ingin mencegah caching di masa mendatang, gunakan:

ini_set("soap.wsdl_cache_enabled", 0);

atau secara dinamis:

$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );
Owen
sumber
31
Saya percaya bahwa ketika menggunakan SoapClient, alih-alih melakukan hardcode 0, disarankan agar Anda menggunakan WSDL_CACHE_NONE konstan yang ditentukan. Lihat php.net/manual/en/soapclient.soapclient.php
Dan Burton
Pokoknya saya bisa membiarkan fungsi caching apa adanya tapi entah bagaimana membatalkan semua cache untuk sementara waktu? Kita dapat melakukan hal-hal ini dengan mudah di .net dll
Kamran Shahid
Solusi ini memang membersihkan cache tetapi juga merupakan trade off untuk kinerja.
Nabeel Arshad
5
Untuk benar-benar membersihkan cache, meskipun file / tmp dihapus, saya masih mengalami masalah cache wsdl sampai saya menggunakan pengaturan ini ini_set('soap.wsdl_cache_ttl', 1);dan membiarkannya selama satu jam - ditemukan di sini: stackoverflow.com/questions/323561/…
Joshua Fricke
27

Hapus semua wsdl*file di /tmpfolder Anda di server.

File WSDL di-cache di lokasi default Anda untuk semua file cache yang ditentukan di php.ini. Lokasi yang sama dengan file sesi Anda.

pengguna3259435
sumber
Bisakah Anda memberi tahu saya di mana folder tmp ini berada?
Kamran Shahid
3
Ada di / tmp. Php mungkin diatur untuk menggunakan lokasi yang berbeda, Anda dapat menemukannya dengan melakukan php -i | grep wsdl_cache_dir
siliconrockstar
Ini untukku. Catatan: Saya menggunakan docker-compose , jadi saya harus menjalankan docker-compose rm <container> sebelum melakukan docker-compose baru .
conradkleinespel
Anda dapat menemukan folder untuk cache wsdl dengan "php -i | grep soap.wsdl_cache_dir"
Daniel Müller
13

jika Anda sudah menerapkan kode atau tidak dapat mengubah konfigurasi apa pun, Anda dapat menghapus semua file sementara dari wsdl:

rm /tmp/wsdl-*
Markomafs
sumber
2
Itu juga yang saya lakukan, tentu saja jika Anda menggunakan WSDL_CACHE_DISK
carlosvini
Di Windows, defaultnya adalah c: \ tmp
b3wii
12

Saya merekomendasikan menggunakan cache-buster di url wsdl.

Di aplikasi kami, kami menggunakan ID Revisi SVN di url wsdl sehingga klien segera mengetahui perubahan struktur. Ini berfungsi di aplikasi kami karena, setiap kali kami mengubah sisi server, kami juga perlu menyesuaikan klien.

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

Ini membutuhkan svn untuk dikonfigurasi dengan benar. Tidak di semua repositori, ini diaktifkan secara default.

Jika Anda tidak bertanggung jawab atas kedua komponen (server, klien) atau Anda tidak menggunakan SVN, Anda dapat menemukan indikator lain yang dapat digunakan sebagai perusak cache di url wsdl Anda.

staabm
sumber
7
Beberapa server SOAP tidak akan melayani WSDL jika ada parameter lain.
Raphael Riel
4

Hanya karena alasan dokumentasi:

Saya sekarang (2014) mengamati bahwa dari semua pendekatan yang berharga dan benar ini hanya satu yang berhasil. Saya telah menambahkan fungsi ke WSDL di server, dan klien tidak mengenali fungsi baru tersebut.

  • Menambahkan WSDL_CACHE_NONEke parameter tidak membantu.
  • Menambahkan perusak cache tidak membantu.
  • Pengaturan soap.wsdl_cache_enabledke PHP ini membantu.

Saya sekarang tidak yakin apakah ini adalah kombinasi dari ketiganya, atau jika beberapa fitur diterapkan dengan buruk sehingga mereka mungkin tetap tidak berguna secara acak, atau jika ada beberapa hierarki fitur yang tidak dipahami.

Jadi akhirnya, harap Anda harus memeriksa ketiganya untuk menyelesaikan masalah seperti ini.

peter_the_oak
sumber
FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); bekerja dengan baik untuk saya
hobailey
0

Edit php.inifile Anda , cari soap.wsdl_cache_enableddan setel nilainya menjadi0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
Kiran Reddy
sumber