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

时间:2014-01-09 18:57:14

标签: 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>

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

enter image description here

有什么想法吗?我尝试了许多不同的ion和相同的结果。 CF 6让我绝望。 附:不,我写的一些脚本我的客户还没有转移到更高版本。

1 个答案:

答案 0 :(得分: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>

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

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