Déclaration CFML if/else agissant bizarrement sous Coldfusion 6
-
21-12-2019 - |
Question
J'ai l'instruction if/else très simple suivante :
<cfif Server.ColdFusion.ProductVersion GTE "7">
<cfoutput>#encrypt("Test text", "77qidrWFoQg96taobooCm3/WimS2Gcdd", "DESEDE", "Hex")#</cfoutput>
<cfelse>
<cfoutput>#encrypt("Test text", "77qidrWFoQg96taobooCm3/WimS2Gcdd")#</cfoutput>
</cfif>
Cela devrait fonctionner sous CF 7, 8, 9, 10 mais pas sous CF 6 où j'obtiens l'erreur suivante comme s'il ne se souciait pas du <cfif>
tag et exécute ce qui est destiné aux versions supérieures de CF (> 7).
Une idée?J'ai essayé beaucoup d'options différentes et même résultat.CF 6 me désespère.P.S.Non, mes clients pour lesquels j'écris des scripts ne vont pas encore passer à une version ultérieure.
La solution
ColdFusion tente de compiler la page, mais il ne le peut pas car vous utilisez une syntaxe non valide pour le encrypt
fonction.CF 6 ne permet pas de transmettre ces arguments à encrypt
.Je suggère que si vous avez besoin de prendre en charge CF6, vous utilisez un <cfinclude>
déclaration pour inclure le code post-CF6.Donc quelque chose comme :
<cfif listfirst(server.coldfusion.productversion) gte 7>
<cfinclude template="cf7encrypt.cfm" />
<cfelse>
<cfinclude template="cf6encrypt.cfm" />
</cfif>
Ensuite, dans les deux fichiers cfm, vous pouvez inclure les appels spécifiques à la version à chiffrer.Ensuite, il sera compilé correctement.
Une autre option serait d'avoir deux CFC différents qui agissent comme des wrappers à chiffrer (un pour CF6 et un pour CF7+), puis de charger le CFC approprié et d'appeler une fonction de chiffrement.Dans les deux cas, l’essentiel est d’acheminer l’appel invalide vers encrypt()
hors du modèle principal.