Как в PHP очистить кеш WSDL?

91

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

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

jW.
источник

Ответы:

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 и т. Д.
Камран Шахид
Это решение очищает кеш, но это также является компромиссом для производительности.
Набил Аршад
5
Для фактической очистки кеша, даже несмотря на то, что файлы / tmp были удалены, у меня все еще возникали проблемы с кешем wsdl, пока я не использовал этот параметр ini_set('soap.wsdl_cache_ttl', 1);и не оставил его на час - можно найти здесь: stackoverflow.com/questions/323561/…
Джошуа Фрике
27

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

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

user3259435
источник
Не могли бы вы сообщить мне, где находится эта папка tmp?
Камран Шахид
3
Это в / tmp. Php может быть настроен на использование другого местоположения, вы можете найти его, выполнив php -i | grep wsdl_cache_dir
Siliconerockstar
Это было для меня. Примечание: я использовал docker-compose , поэтому мне пришлось запустить docker-compose rm <container>, прежде чем выполнять новую docker-compose up .
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.

Staabm
источник
7
Некоторые серверы SOAP не будут обслуживать WSDL, если присутствует другой параметр.
Raphael Riel
4

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

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

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

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

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

peter_the_oak
источник
FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); у меня работал нормально
hobailey
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
Киран Редди
источник