CFML if/else语句在Coldfusion 6下表现得很奇怪

bst*_*teo 1 coldfusion cfml

我有以下非常简单的if/else语句:

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

它应该在CF 7,8,9,10之下,但不在CF 6之下,我得到以下错误,因为它不关心<cfif>标签并执行对更高版本的CF(> 7)的意义.

在此输入图像描述

任何的想法?我尝试了许多不同的ion和相同的结果.CF 6让我绝望.PS不,我的客户我写的一些脚本不会转移到更高版本.

Sea*_*yne 9

ColdFusion正在尝试编译页面,但它不能,因为您使用的encrypt函数语法无效.CF 6不允许传递这些参数encrypt.我建议你是否需要支持CF6,你使用一个<cfinclude>声明来包含后CF6代码.所以类似于:

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

然后在两个cfm文件中,您可以包含要加密的特定于版本的调用.然后它将正确编译.

另一个选择是有两个不同的CFC作为加密包装(一个用于CF6,一个用于CF7 +),然后加载适当的CFC并调用加密功能.在任何一种情况下,关键是encrypt()从主模板中获取无效调用.