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).

enter image description here

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top