У 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
Ден Бертон

У будь-якому випадку я можу дозволити функціонування кешування таким, яке воно є, але деякі з них тимчасово скасовують весь кеш? Ми можемо легко робити ці речі в .net тощо
Камран Шахід

Це рішення очищає кеш, але це також компроміс за продуктивність.
Nabeel Arshad

5
Для фактичного очищення кешу, навіть незважаючи на те, що файли / tmp були видалені, я все ще отримував проблеми з кешем wsdl, поки не використав цей параметр ini_set('soap.wsdl_cache_ttl', 1);і не дав йому постояти годину - знайдено тут: stackoverflow.com/questions/323561/…
Joshua Fricke

27

Видаліть усі wsdl*файли з вашої /tmpпапки на сервері.

Файли WSDL кешуються у вашому розташуванні за замовчуванням для всіх файлів кешу, визначених у php.ini. Те саме розташування, що і файли сеансів.


Чи можете ви повідомити, де знаходиться ця папка tmp?
Камран Шахід

3
Це на / tmp. Php може бути встановлений для використання іншого місця, ви можете знайти його, виконавши php -i | grep wsdl_cache_dir
siliconrockstar

Це було для мене. Примітка: Я використовував docker-compose , тому мені довелося запустити docker-compose rm <container> перед тим, як робити новий docker-compose .
conradkleinespel

Ви можете знайти папку для кешу wsdl за допомогою "php -i | grep soap.wsdl_cache_dir"
Даніель Мюллер

13

якщо ви вже розгорнули код або не можете змінити будь-яку конфігурацію, ви можете видалити всі тимчасові файли з wsdl:

rm /tmp/wsdl-*

2
Це також те, що я роблю, звичайно на випадок, якщо ви використовуєте WSDL_CACHE_DISK
carlosvini

В ОС Windows за замовчуванням встановлено значення c: \ tmp
b3wii

12

Я рекомендую використовувати кеш-бартер в URL-адресі wsdl.

У наших додатках ми використовуємо ідентифікатор SVN Revision в URL-адресі wsdl, щоб клієнт одразу знав про зміну структур. Це працює в нашому додатку, оскільки кожного разу, коли ми змінюємо сторону сервера, нам також потрібно відповідно налаштувати клієнта.

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

Для цього потрібно правильно налаштувати svn. Не у всіх сховищах це ввімкнено за замовчуванням.

Якщо ви не відповідаєте за обидва компоненти (сервер, клієнт) або не використовуєте SVN, ви можете знайти інший індикатор, який можна використовувати як кеш-пам'ять у вашій URL-адресі wsdl.


7
Деякі сервери SOAP не обслуговуватимуть WSDL, якщо присутній інший параметр.
Рафаель Ріел,

4

Тільки з причини документації:

Зараз я (2014) зауважив, що з усіх цих цінних і правильних підходів був успішним лише один. Я додав функцію до WSDL на сервері, і клієнт не розпізнав нову функцію.

  • Додавання WSDL_CACHE_NONEдо параметрів не допомогло.
  • Додавання кеш-пам'яті не допомогло.
  • Налаштування soap.wsdl_cache_enabledPHP ini допомогло.

Зараз я не впевнений, чи це комбінація всіх трьох, чи деякі функції жахливо реалізовані, тому вони можуть залишатися марними випадково, чи існує якась ієрархія функцій, які не зрозумілі.

Отже, нарешті, сподівайтесь, що вам доведеться перевірити всі три, щоб вирішити подібні проблеми.


FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); працював у мене нормально
хобайлі

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.