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


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

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

5 76

5 ответов:

вы можете безопасно удалить файлы кэша 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.Ини. То же место, что и файлы сеанса.

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

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

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

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

в случае, если вы не несете ответственности за оба компонента (сервер,клиент) или вы не используете SVN вы можете найти другой индикатор, который может быть использован в качестве cache-buster в вашем WSDL url.

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

rm /tmp/wsdl-*

просто по причине документации:

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

  • добавлять WSDL_CACHE_NONE параметры не помогло.
  • добавление cache-buster не помогло.
  • задание soap.wsdl_cache_enabled чтобы PHP ini помог.

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

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