我已经为一些安全补丁编写了一个库。在该库中有许多CF8和up函数,属性等。
我真的不想削减功能,因为adobe无法将它们整合在一起并将这些基本功能融入到CF7中,因此我希望在每个功能中编写单独的行。问题是当CF最初读取它发现的代码时,如果它发现它无法识别的东西,无论它是否将被调用。
例如在cfdirectory中,CF7不支持'type'属性。当'type'属性存在时,我有一个在CF7中失败的find目录函数,并且取出它会使搜索时间增加10倍。
<cftry>
<cfdirectory action="list" directory="#arguments.start#" name="LOCAL.dirquery" type="dir" /><!---//GET QUERY OF DIRECTORIES IN START DIRECTORY--->
<cfcatch>
<cfsetting requesttimeout="600">
<cfdirectory action="list" directory="#arguments.start#" name="LOCAL.dirquery" /><!---//GET QUERY OF DIRECTORIES IN START DIRECTORY--->
</cfcatch>
此代码不起作用,条件块也不起作用。我猜测读者无法用任何语言解析,因此失败了。
答案 0 :(得分:5)
代码可能在编译时失败,而不是在运行时(需要查看您收到的错误以确定)。如果是编译器错误,则需要在CF8 +功能的单独组件中分解CF7功能。然后在运行时检查CF版本以确定要调用的组件/功能。
这是您可以在应用程序启动时使用的一些伪代码,以将正确的版本功能加载到内存中。这样,您就可以在代码中的任何位置调用函数。
伪代码:
onApplicationStart(){
if (server.coldfusion.productversion == 7){
application.cffunctions = CF7FunctionsComponent;
} else {
application.cffunctions = CF8FunctionsComponent;
}
}
在其他任何地方,无论当前运行的CF版本如何,都可以调用相同的函数:
application.cffunctions.doSomething();