2014-01-09 1 views
1

У меня есть следующие очень простой, если/другое заявление:CFML если/другое заявление странно себя под Coldfusion 6

<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. Нет, мои клиенты, я пишу некоторые скрипты, пока не перейдут к более поздней версии.

+0

Разве вы не должны извлекать основную версию продукта как число и сравнивать ее с «7», а не с «7», а «7»> «10», но 7 <10? Хотя я не понимаю, почему это пойдет не так с CF6. Вы пытались изменить условное условие? –

+0

Я попробовал также 'cfif Server.ColdFusion.ProductVersion GTE 7', тот же результат; Я попробовал также '', а затем ' 'с тем же результатом: - | – bsteo

+0

Я пробовал даже '' с тем же результатом, CF 6 просто игнорирует мой '' и выполняет код, не предназначенный для его версии ... – bsteo

ответ

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 вы можете включить специальные вызовы для шифрования. Затем он будет компилироваться правильно.

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

+0

Нет, я могу использовать encrypt(), здесь не имеет значения, могу сказать «notexistingfunction()» и получить тот же результат. Проблема заключается в '' – bsteo

+1

Прочтите сообщение об ошибке, которое вы получаете. Он говорит о своей ошибке параметра для шифрования. Шифрование не поддерживает более двух аргументов на CF6. Просто потому, что вы завершаете его в CFIF, это не значит, что он не компилируется. Это не условное. Доверьтесь мне. –

+0

Ошибки компиляции и времени выполнения - это две разные вещи. Вы получаете ошибку компиляции.Опять же, вы не можете использовать неверный код и просто обернуть его в CFIF и подумать, что все будет в порядке. CFIF контролирует поток программы во время выполнения. Это не извиняет недопустимый синтаксис. –

 Смежные вопросы

  • Нет связанных вопросов^_^