В PHP, как вы можете очистить кеш WSDL?

Через php_info(), где хранится кеш WSDL (/tmp), но я не обязательно знаю, можно ли удалить все файлы, начинающиеся с WSDL.

Да, я мог бы просто удалить все из /tmp, но я не знаю, что еще это может повлиять, если я удалю все файлы WSDL.

Ответ 1

Вы можете безопасно удалить файлы кэша WSDL. Если вы хотите предотвратить кеширование в будущем, используйте:

ini_set("soap.wsdl_cache_enabled", 0);

или динамически:

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

Ответ 2

удалите все файлы wsdl * в папке /tmp на сервере.

Файлы WSDL кэшируются в вашем местоположении по умолчанию для всех файлов кеша, определенных в php.ini. Такое же место, что и ваши файлы сеанса.

Ответ 3

Я рекомендую использовать cache-buster в URL-адресе wsdl.

В наших приложениях мы используем идентификатор SVN Revision в URL-адресе wsdl, чтобы клиент сразу узнал об изменении структур. Это работает в нашем приложении, потому что, каждый раз, когда мы меняем серверную сторону, нам также нужно соответствующим образом настроить клиента.

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

Для этого нужно правильно настроить svn. Не во всех репозиториях это включено по умолчанию.

Если вы не несете ответственность за оба компонента (сервер, клиент) или вы не используете SVN, вы можете найти еще один индикатор, который можно использовать в качестве кэширующего пользователя в URL-адресе wsdl.

Ответ 4

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

rm /tmp/wsdl-*

Ответ 5

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

Теперь я (2014) заметил, что из всех этих ценных и правильных подходов только один был успешным. Я добавил функцию к WSDL на сервере, и клиент не узнал новую функцию.

  • Добавление WSDL_CACHE_NONE к параметрам не помогло.
  • Добавление кэша-буфера не помогло.
  • Настройка soap.wsdl_cache_enabled на PHP ini помогла.

Теперь я не уверен, что это комбинация всех трех, или если некоторые функции ужасно реализованы, поэтому они могут бесполезно беспорядочно или если некоторая иерархия не понятых функций.

Итак, ожидайте, что вы должны проверить все три, чтобы решить такие проблемы.

Ответ 6

Отредактируйте файл 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