找到了一个用于绝对路径的PHP函数,并对它的工作原理感到好奇

找到了一个用于绝对路径的PHP函数,并对它的工作原理感到好奇,php,Php,函数只返回服务器的绝对路径;然而,我不确定它到底是如何工作的。在使用任何代码之前,我喜欢确切地了解它是如何工作的,以便更好地理解和实现脚本 有人能解释一下它是如何工作的吗。我以前使用过substr();然而,从来没有任何事情达到这种程度 任何改进脚本的建议都是欢迎的 function findRoot() { return(substr($_SERVER["SCRIPT_FILENAME"], 0, (stripos($_SERVER["SCRIPT_FILENAME"], $_SERV

函数只返回服务器的绝对路径;然而,我不确定它到底是如何工作的。在使用任何代码之前,我喜欢确切地了解它是如何工作的,以便更好地理解和实现脚本

有人能解释一下它是如何工作的吗。我以前使用过substr();然而,从来没有任何事情达到这种程度

任何改进脚本的建议都是欢迎的

function findRoot() {
    return(substr($_SERVER["SCRIPT_FILENAME"], 0, (stripos($_SERVER["SCRIPT_FILENAME"], $_SERVER["SCRIPT_NAME"])+1));
}
包含脚本相对于根的路径。服务器从服务器根目录调用PHP-like
PHP-relative/path.PHP
;这是带有
/
的脚本名称;基本上,带有此URL的链接指向同一页面

$_SERVER["SCRIPT_NAME"]
包含脚本的绝对路径。这是由PHP解决的

$_SERVER["SCRIPT_FILENAME"]
相对路径在绝对路径中的位置。从绝对文件名中提取这么多字符不会包括尾随的
/
,因此添加了1

stripos($_SERVER["SCRIPT_FILENAME"], $_SERVER["SCRIPT_NAME"])+1

绝对文件名在相对路径之前的部分;在上一步中计算的绝对文件名中的字符数。这必须是根,因为相对文件名是相对于服务器根的

通过逐行限制一个操作,使代码更容易理解。 这是几乎相同的功能,带有附加的细节和回声:

substr($_SERVER["SCRIPT_FILENAME"], 0, (stripos($_SERVER["SCRIPT_FILENAME"], $_SERVER["SCRIPT_NAME"])+1))
函数find_absolute_path(){
$strScriptFilename=$\服务器[“脚本\文件名”];
$strScriptName=$\服务器[“脚本\名称”];
//stripos-查找字符串中第一个不区分大小写的子字符串的位置。
//int-stripos(字符串$haystack,字符串$needle[,int$offset=0])
$intPositionOfName=stripos($strScriptFilename,$strScriptName);
//substr-返回字符串的一部分。
//字符串子字符串(字符串$string,int$start[,int$length])
$strWwwPathWithoutName=substr($strScriptFilename,0,($intPositionOfName+1));
回显“strScriptFilename:”.$strScriptFilename.“
”; 回显“strScriptName:”.$strScriptName.“
”; 回显“intPositionOfName:.$intPositionOfName.”
; 回显“strWwwPathWithoutName:”.$strWwwPathWithoutName.“
”; 返回$strwwPathWithoutName; }//查找绝对路径 $strAbsolutePath=查找绝对路径(); 回显“strWebPath:”$横溶体;

您会注意到脚本如何从绝对路径中删除$\u SERVER[“script\u FILENAME”],而将路径保留到web服务器。

这是用于检索绝对路径的好方法吗?我喜欢对包含使用绝对路径,而不必担心相对路径。我查看了DIR,但当不得不担心将其包含在多个目录中时,它会变得更加复杂。我试图找到一个更好的解决方案来替换我不再使用的$\u SERVER['CONTEXT\u DOCUMENT\u ROOT'。我忘记注释代码了。我研究了
\uuuu DIR\uuuu
*这是一种比我在问题中使用的方法更好的方法吗?如果是这样的话,除了解释脚本中发生的事情外,还有什么能让这个更好呢?哦,好的。谢谢你的诚实。我真的不确定哪种方法更好。我假设他们正在做完全相同的事情,所以他们的问题是相同的。但我会的。仔细阅读你的文章,以获得一些想法。谢谢:)
function find_absolute_path() {
    $strScriptFilename          = $_SERVER["SCRIPT_FILENAME"];
    $strScriptName              = $_SERVER["SCRIPT_NAME"];
    // stripos — Find the position of the first occurrence of a case-insensitive substring in a string.
    // int stripos ( string $haystack , string $needle [, int $offset = 0 ] )
    $intPositionOfName          = stripos($strScriptFilename, $strScriptName);
    // substr — Return part of a string.
    // string substr ( string $string , int $start [, int $length ] )
    $strWwwPathWithoutName  = substr($strScriptFilename, 0,($intPositionOfName + 1));

    echo "strScriptFilename: " . $strScriptFilename . "<br/>";
    echo "strScriptName: " . $strScriptName . "<br/>";
    echo "intPositionOfName: " . $intPositionOfName . "<br/>";
    echo "strWwwPathWithoutName: " . $strWwwPathWithoutName . "<br/>";

    return  $strWwwPathWithoutName;
} // find_absolute_path

$strAbsolutePath    = find_absolute_path();
echo "strWebPath: " . $strAbsolutePath;