





Вы можете безопасно удалить файлы кеша WSDL. Если вы хотите предотвратить кеширование в будущем, используйте:
ini_set("soap.wsdl_cache_enabled", 0);
или динамически:
$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );
В любом случае, я могу оставить функцию кеширования как есть, но как временно аннулировать весь кеш? Мы можем легко сделать это в .net и т. д.
Это решение очищает кеш, но это также является компромиссом для производительности.
Для фактической очистки кеша, даже несмотря на то, что файлы / tmp были удалены, у меня все еще возникали проблемы с кешем wsdl, пока я не использовал этот параметр ini_set('soap.wsdl_cache_ttl', 1); и не оставил его на час - здесь: stackoverflow.com/questions/323561/…
Я рекомендую использовать средство блокировки кеша в URL-адресе wsdl.
В наших приложениях мы используем идентификатор SVN Revision в URL-адресе wsdl, чтобы клиент сразу узнал об изменении структуры. Это работает в нашем приложении, потому что каждый раз, когда мы меняем серверную часть, нам также необходимо соответствующим образом настраивать клиент.
$client = new SoapClient('http://somewhere.com/?wsdl&rev=$Revision$');
Для этого необходимо правильно настроить svn. Не во всех репозиториях это включено по умолчанию.
Если вы не несете ответственности за оба компонента (сервер, клиент) или не используете SVN, вы можете найти другой индикатор, который можно использовать как средство блокировки кеша в вашем URL-адресе wsdl.
Некоторые серверы SOAP не будут обслуживать WSDL, если присутствует другой параметр.
Удалите все файлы wsdl* из папки /tmp на сервере.
Файлы WSDL кэшируются в вашем местоположении по умолчанию для всех файлов кеша, определенных в php.ini. То же место, что и ваши файлы сеанса.
Не могли бы вы сообщить мне, где находится эта папка tmp?
Это в / tmp. Php может быть настроен на использование другого местоположения, вы можете найти его, выполнив php -i | grep wsdl_cache_dir
Это было для меня. Примечание: я использовал докер-сочинять, поэтому мне пришлось запустить docker-compose rm <контейнер> перед выполнением нового докер-сочинять.
Вы можете найти папку для кэша wsdl с помощью "php -i | grep soap.wsdl_cache_dir"
Если вы уже развернули код или не можете изменить конфигурацию, вы можете удалить все временные файлы из wsdl:
rm /tmp/wsdl-*
Я тоже этим занимаюсь, если вы используете WSDL_CACHE_DISK
В Windows по умолчанию используется c: \ tmp.
Просто по причине документации:
Сейчас (2014 г.) я заметил, что из всех этих ценных и правильных подходов только один оказался успешным. Я добавил функцию в WSDL на сервере, и клиент не распознал новую функцию.
WSDL_CACHE_NONE в параметры не помогло.soap.wsdl_cache_enabled на PHP ini.Теперь я не уверен, является ли это комбинацией всех трех, или некоторые функции ужасно реализованы, поэтому они могут оставаться бесполезными случайным образом, или если есть какая-то иерархия функций, которые не поняты.
Итак, наконец, ожидайте, что вам нужно будет проверить все три, чтобы решить подобные проблемы.
FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); отлично работал у меня
Отредактируйте файл 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
Я считаю, что при использовании SoapClient вместо жесткого кодирования 0 рекомендуется использовать определенную константу WSDL_CACHE_NONE. См. php.net/manual/en/soapclient.soapclient.php