Em PHP, como você pode limpar um cache WSDL?

88

Por meio de php_info()onde o cache WSDL é mantido ( /tmp), mas não necessariamente sei se é seguro excluir todos os arquivos que começam com WSDL.

Sim, devo conseguir excluir tudo de /tmp, mas não sei o que mais isso poderia afetar se eu excluir todos os arquivos WSDL.

jW.
fonte

Respostas:

196

Você pode excluir com segurança os arquivos de cache WSDL. Se você deseja evitar o cache futuro, use:

ini_set("soap.wsdl_cache_enabled", 0);

ou dinamicamente:

$client = new SoapClient('http://somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );
Owen
fonte
31
Eu acredito que ao usar SoapClient, em vez de codificar um 0, é recomendado que você use a constante definida WSDL_CACHE_NONE. Consulte php.net/manual/en/soapclient.soapclient.php
Dan Burton
De qualquer forma, posso deixar a funcionalidade do cache como está, mas de alguma forma invalidar todo o cache por um tempo? Podemos fazer essas coisas facilmente em .net etc
Kamran Shahid
Esta solução limpa o cache, mas também representa uma compensação para o desempenho.
Nabeel Arshad
5
Para realmente limpar o cache, embora os arquivos / tmp tenham sido removidos, eu ainda estava tendo problemas de cache wsdl até que usei esta configuração ini_set('soap.wsdl_cache_ttl', 1);e a deixei parada por uma hora - encontrada aqui: stackoverflow.com/questions/323561/…
Joshua Fricke
26

Remova todos os wsdl*arquivos em sua /tmppasta no servidor.

Os arquivos WSDL são armazenados em cache em seu local padrão para todos os arquivos de cache definidos no php.ini. Mesmo local dos arquivos da sessão.

user3259435
fonte
Você pode me informar onde está esta pasta tmp?
Kamran Shahid
2
Está em / tmp. O php pode ser configurado para usar um local diferente, você pode localizá-lo fazendo php -i | grep wsdl_cache_dir
siliconrockstar
Isso foi tudo para mim. Nota: Eu estava usando docker-compose , então tive que executar docker-compose rm <container> antes de fazer um novo docker-compose up .
conradkleinespel
Você pode localizar a pasta para o cache wsdl com "php -i | grep soap.wsdl_cache_dir"
Daniel K. Mueller
13

se você já implantou o código ou não pode alterar nenhuma configuração, pode remover todos os arquivos temporários do wsdl:

rm /tmp/wsdl-*
Markomafs
fonte
2
É também o que eu faço, claro caso você esteja usando WSDL_CACHE_DISK
carlosvini
No Windows, o padrão é c: \ tmp
b3wii
12

Eu recomendo usar um inibidor de cache no url wsdl.

Em nossos aplicativos, usamos um ID de revisão SVN no url wsdl para que o cliente saiba imediatamente sobre a alteração de estruturas. Isso funciona em nosso aplicativo porque, toda vez que mudamos o lado do servidor, também precisamos ajustar o cliente de acordo.

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

Isso requer que o svn seja configurado corretamente. Nem em todos os repositórios, isso é habilitado por padrão.

Caso você não seja responsável por ambos os componentes (servidor, cliente) ou não use o SVN, você pode encontrar outro indicador que pode ser utilizado como um buster de cache em seu url wsdl.

staabm
fonte
7
Alguns servidores SOAP não atenderão ao WSDL se outro parâmetro estiver presente.
Raphael Riel
4

Apenas por motivo de documentação:

Eu agora (2014) observei que de todas essas abordagens valiosas e corretas, apenas uma foi bem-sucedida. Eu adicionei uma função ao WSDL no servidor e o cliente não estava reconhecendo a nova função.

  • Adicionar WSDL_CACHE_NONEaos parâmetros não ajudou.
  • Adicionar o cache-buster não ajudou.
  • A configuração soap.wsdl_cache_enabledpara o ini PHP ajudou.

Não tenho certeza se é a combinação de todos os três, ou se alguns recursos estão terrivelmente implementados de forma que possam permanecer inúteis aleatoriamente, ou se há alguma hierarquia de recursos não compreendida.

Por fim, espere que você tenha que verificar todos os três para resolver problemas como esses.

peter_the_oak
fonte
FYI ini_set ("soap.wsdl_cache_enabled", WSDL_CACHE_NONE); funcionou bem para mim
hobailey
0

Edite seu php.iniarquivo, pesquise soap.wsdl_cache_enablede defina o valor para0

[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=0
Kiran Reddy
fonte