Frage

Ich habe die folgende sehr einfache if / else-Anweisung:

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

Funktioniert es sollte unter CF 7, 8, 9, 10, aber nicht unter CF 6, wo ich den folgenden Fehler bekomme, als ob es sich nicht um das kümmert <cfif> markiert und führt aus, was für die größeren Versionen von CF (> 7) gedacht ist.

enter image description here

Irgendeine Idee?Ich habe viele, viele, viele verschiedene Möglichkeiten ausprobiert und das gleiche Ergebnis erzielt.CF 6 lässt mich verzweifeln.PS.Nein, meine Kunden, für die ich einige Skripte schreibe, werden noch nicht auf eine spätere Version umsteigen.

War es hilfreich?

Lösung

ColdFusion versucht, die Seite zu kompilieren, kann dies jedoch nicht, da Sie eine ungültige Syntax für die encrypt Funktion.CF 6 erlaubt nicht, dass diese Argumente übergeben werden an encrypt.Ich schlage vor, wenn Sie CF6 unterstützen müssen, dass Sie eine verwenden <cfinclude> anweisung, den Post-CF6-Code einzuschließen.Also so etwas wie:

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

Dann können Sie in die beiden CFM-Dateien die versionsspezifischen Aufrufe zum Verschlüsseln einfügen.Dann wird es richtig kompiliert.

Eine andere Möglichkeit wäre, zwei verschiedene CFCs zu haben, die als Wrapper zum Verschlüsseln fungieren (einen für CF6 und einen für CF7 +) und dann den richtigen CFC zu laden und eine Verschlüsselungsfunktion aufzurufen.In beiden Fällen besteht der Schlüssel darin, den ungültigen Anruf zu erhalten encrypt() aus der Hauptvorlage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top