Pregunta

Tengo la siguiente declaración if/else muy simple:

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

Debería funcionar en CF 7, 8, 9, 10 pero no en CF 6, donde aparece el siguiente error, como si no le importara el <cfif> etiqueta y ejecuta lo que está destinado a las versiones mayores de CF (>7).

enter image description here

¿Alguna idea?Probé muchas opciones diferentes y el mismo resultado.CF 6 me hace desesperar.PDNo, mis clientes para los que escribo algunos scripts no van a pasar a una versión posterior todavía.

¿Fue útil?

Solución

ColdFusion está intentando compilar la página, pero no puede porque está utilizando una sintaxis no válida para el encrypt función.CF 6 no permite que esos argumentos se pasen a encrypt.Le sugiero que si necesita admitir CF6, utilice un <cfinclude> declaración para incluir el código posterior a CF6.Entonces algo como:

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

Luego, en los dos archivos cfm puede incluir las llamadas específicas de la versión para cifrar.Entonces se compilará correctamente.

Otra opción sería tener dos CFC diferentes que actúen como contenedores para cifrar (uno para CF6 y otro para CF7+) y luego cargar el CFC adecuado y llamar a una función de cifrado.En cualquier caso, la clave es hacer llegar la llamada no válida a encrypt() fuera de la plantilla principal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top