了解ColdFusion FindNoCase

时间:2013-09-24 18:56:21

标签: coldfusion coldfusion-9

我正在通过coldfusion代码并遇到以下信息。我不明白其中的一部分。我的问题如下:

CODE:

<cfif FINDNOCASE( "xyz.seta", "#CGI.SERVER_NAME#") GT 0 >

   <cfset PublicPath = "abcxyz/NEW_abc/Public">
   <cfset SessionPath = "abcxyz/NEW_abc/Session">

据我所知,FINDNOCASE用于从指定的起始位置查找字符串中第一次出现子字符串。

Function Syntax: FindNoCase(substring, string [, start ])

1)因此,在我的情况下,从“#CGI.SERVER_NAME#”开始搜索xyz.seta子字符串?我在这里感到困惑吗?

2)关于PublicPath和SessionPath定义的问题:

当我检查服务器时(使用VNC Viewer登录后),只有我看到的文件夹是Public和Session。我在哪里可以找到它之前的路径?在提出这样的问题之前,请澄清或告诉我是否需要学习更多内容。

由于

4 个答案:

答案 0 :(得分:6)

你的第一个假设是正确的。 FINDNOCASE将返回子字符串开头的索引。我认为CF索引是基于一个(不是基于0)。因此,如果变量"xyz.seta"中存在字符串#CGI.SERVERNAME#,则返回的值将始终大于零,并且CFIF块的内容将执行。

关于变量PublicPathSessionPath。这些变量是页面变量,因为它们没有被任何其他范围指定(例如会话或应用程序)定义。它们仅在处理此页面时存在。如果它在您的Application.cfm中,它将在每次调用此Application.cfm文件时执行。变量的值被设置为相对于当前目录的路径。如果您希望它们是绝对的,请在字符串文字的前面添加斜杠(例如"/abcxyz/NEW_abc/Public")。这将使它们成为Web服务器文档目录的绝对路径。 Web服务器路径因操作系统而异。

答案 1 :(得分:5)

我不知道你的第二个问题甚至是问什么,更不用说答案了,但我可以回答第一个问题。

你误读findNoCase()的文件(相当清楚,我认为)。

功能语法: FindNoCase(substring, string [, start ])

代码: FINDNOCASE( "xyz.seta", "#CGI.SERVER_NAME#")

因此xyz.setasubstringCGI.SERVER_NAME是字符串。并且未指定可选的start属性,因此暗示为1,即:字符串的开头。

因此,代码在xyz.seta的值内寻找CGI.SERVER_NAME(并将返回找到它的位置,如果找不到则返回零。

答案 2 :(得分:2)

这是一个非常简单的配置声明。

如果正在访问的地址(CGI.server_name)至少包含域xyx.seta,则将这两个变量PublicPath和SessionPath设置为这两个值。

我想有一个其他人说道路设置为两个不同的值。

如果您在托管xyz.seta的服务器上查找,您应该找到这些物理文件路径。

真的是这样的。更不用说了。

您可能希望将cfdump和cfabort用于umm ...转储CGI范围和变量范围的内容,以查看其中的内容和正在设置的内容。使用cfabort在cfdump之后立即停止处理。

这应该可以帮助您了解可用的变量以及上述代码的作用。

答案 3 :(得分:1)

FindNoCase(substring, string [, start ])

是“ start ”是可选参数的语法,此参数未在此处传递。 子字符串“ xyz.seta ”会搜索到“ CGI.SCRIPTNAME ”。如果找不到匹配项,则findnocase函数返回0;如果找到匹配项,则返回正数(返回值是字符串中子字符串的起始索引,索引从1开始,而不是0)。所以声明可以是

<cfif FINDNOCASE( "xyz.seta", "#CGI.SERVER_NAME#")>

如果找到匹配项,则返回值为正