Pergunta

Eu tenho a seguinte instrução if/else muito simples:

<cfif Server.ColdFusion.ProductVersion GTE "7">
        <cfoutput>#encrypt("Test text", "77qidrWFoQg96taobooCm3/WimS2Gcdd", "DESEDE", "Hex")#</cfoutput>
<cfelse>
        <cfoutput>#encrypt("Test text", "77qidrWFoQg96taobooCm3/WimS2Gcdd")#</cfoutput>
</cfif>

Funciona em CF 7, 8, 9, 10, mas não em CF 6, onde recebo o seguinte erro, como se não se importasse com o <cfif> tag e executa o que é destinado às versões superiores do CF (>7).

enter image description here

Qualquer ideia?Eu tentei muitas opções diferentes e o mesmo resultado.CF 6 me deixa desesperado.P.S.Não, meus clientes para os quais escrevo alguns scripts ainda não irão migrar para uma versão posterior.

Foi útil?

Solução

O ColdFusion está tentando compilar a página, mas não consegue porque você está usando uma sintaxe inválida para o encrypt função.CF 6 não permite que esses argumentos sejam passados ​​para encrypt.Eu sugiro que se você precisar dar suporte ao CF6, use um <cfinclude> declaração para incluir o código pós-CF6.Então, algo como:

<cfif listfirst(server.coldfusion.productversion) gte 7>
  <cfinclude template="cf7encrypt.cfm" />
<cfelse>
  <cfinclude template="cf6encrypt.cfm" />
</cfif>

Então, nos dois arquivos cfm, você pode incluir as chamadas específicas da versão para criptografar.Então ele será compilado corretamente.

Outra opção seria ter dois CFCs diferentes que atuassem como wrappers para criptografar (um para CF6 e outro para CF7+) e então carregar o CFC adequado e chamar uma função de criptografia.Em ambos os casos, a chave é fazer com que a chamada inválida seja encrypt() fora do modelo principal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top