Оператор CFML if/else ведет себя странно в Coldfusion 6

StackOverflow https://stackoverflow.com//questions/21028801

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть следующий очень простой оператор 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

Есть идеи?Я попробовал много-много разных вариантов и тот же результат.CF 6 приводит меня в отчаяние.P.S.Нет, мои клиенты, для которых я пишу некоторые сценарии, пока не собираются переходить на более позднюю версию.

Это было полезно?

Решение

ColdFusion пытается скомпилировать страницу, но не может, поскольку вы используете неверный синтаксис для encrypt функция.CF 6 не позволяет передавать эти аргументы encrypt.Я предлагаю, если вам нужна поддержка CF6, использовать <cfinclude> заявление о включении кода post-CF6.Итак, что-то вроде:

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

Затем в два файла cfm вы можете включить вызовы шифрования для конкретной версии.Тогда он скомпилируется правильно.

Другой вариант — иметь два разных CFC, которые действуют как оболочки для шифрования (один для CF6 и один для CF7+), а затем загружать соответствующий CFC и вызывать функцию шифрования.В любом случае ключом является получение недопустимого вызова encrypt() вне основного шаблона.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top