Как в PHP можно очистить кэш WSDL?
Через php_info()
, где хранится кэш WSDL (/tmp
), но я не обязательно знаю, безопасно ли удалять все файлы, начинающиеся с WSDL.
Да, я должен иметь возможность просто удалить все из /tmp
, но я не знаю, на что еще это может повлиять, если я удалю все файлы WSDL.
5 answers
Вы можете безопасно удалить файлы кэша WSDL. Если вы хотите предотвратить кэширование в будущем, используйте:
ini_set("soap.wsdl_cache_enabled", 0);
Или динамически:
$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );
Удалите все файлы wsdl* в папке /tmp на сервере.
Файлы WSDL кэшируются в вашем расположении по умолчанию для всех файлов кэша, определенных в php.ini. В том же месте, что и файлы сеанса.
Я рекомендую использовать блокировщик кэша в URL-адресе wsdl.
В наших приложениях мы используем идентификатор версии SVN в URL-адресе wsdl, чтобы клиент сразу знал об изменении структур. Это работает в нашем приложении, потому что каждый раз, когда мы меняем серверную часть, нам также необходимо соответствующим образом настроить клиент.
$client = new SoapClient('http://somewhere.com/?wsdl&rev=$Revision$');
Для этого требуется, чтобы svn был правильно настроен. Не во всех репозиториях это включено по умолчанию.
В случае, если вы не несете ответственности за оба компонента (сервер, клиент) или вы не используйте SVN. вы можете найти другой индикатор, который можно использовать в качестве уничтожителя кэша в вашем URL-адресе wsdl.
Если вы уже развернули код или не можете изменить какую-либо конфигурацию, вы можете удалить все временные файлы из wsdl:
rm /tmp/wsdl-*
Просто по причине документации:
Сейчас (2014) я заметил, что из всех этих ценных и правильных подходов только один был успешным. Я добавил функцию в WSDL на сервере, и клиент не распознал новую функцию.
- Добавление
WSDL_CACHE_NONE
к параметрам не помогло. - Добавление разрушителя кэша не помогло.
- Установка
soap.wsdl_cache_enabled
в PHP ini помогла.
Теперь я не уверен, является ли это комбинацией всех трех, или если некоторые функции ужасно реализованы, поэтому они могут оставаться бесполезными случайным образом, или если существует какая-то непонятная иерархия функций.
Итак, наконец, ожидайте, что вам придется проверить все три, чтобы решить подобные проблемы.