2

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

代码:

<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)那么,在我的情况下,xyz.seta从“#CGI.SERVER_NAME#”开始搜索子字符串?我在这里感到困惑吗?

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

当我检查服务器时(在使用 VNC 查看器登录后),只有对我可见的文件夹是 Public 和 Session。我在哪里可以找到它之前的路径?在问这样的问题之前,请澄清或让我知道是否需要进一步研究。

谢谢

4

4 回答 4

6

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

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

于 2013-09-24T19:11:20.000 回答
4

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

您误读了findNoCase().

函数语法: FindNoCase(substring, string [, start ])

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

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

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

于 2013-09-24T19:11:03.067 回答
2

这是一个非常简单的配置语句。

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

我想有一个 else 说将路径设置为两个不同的值。

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

就是这样。不多不少。

您可能想使用 cfdump 和 cfabort 来嗯...转储 CGI 范围和变量范围的内容以查看其中的内容和设置的内容。在 cfdump 之后使用 cfabort 立即停止处理。

这应该可以帮助您了解您可以使用哪些变量以及上面的代码在做什么。

于 2013-09-24T19:17:54.233 回答
1
FindNoCase(substring, string [, start ])

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

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

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

于 2013-10-02T07:22:25.023 回答