Найден PHP-функция для абсолютного пути и любопытно, как это работает

function findRoot() { return(substr($_SERVER["SCRIPT_FILENAME"], 0, (stripos($_SERVER["SCRIPT_FILENAME"], $_SERVER["SCRIPT_NAME"])+1)); } 

Функция просто возвращает абсолютный путь к серверу; однако я точно не знаю, как это работает. Прежде чем использовать какой-либо код, мне нравится понимать, как он работает, поэтому я могу лучше понять и реализовать скрипт.

Может кто-нибудь объяснить, как это работает. Я использовал substr () раньше; тем не менее, никогда ничего подобного.

Любые предложения по улучшению скрипта также приветствуются.

 $_SERVER["SCRIPT_NAME"] 

Содержит путь скрипта относительно корня. Сервер вызывает PHP как php relative/path.php из корня сервера; это имя скрипта с / ; в основном, ссылка на этот URL-адрес ведет к одной и той же странице.

 $_SERVER["SCRIPT_FILENAME"] 

Содержит абсолютный путь скрипта. Это разрешено PHP.

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

Положение относительного пути внутри абсолютного пути. Взятие этого множества символов из абсолютного имени файла не будет включать трейлинг / , поэтому добавляется 1.

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

Часть абсолютного имени файла перед относительным путем; количество символов из абсолютного имени файла, вычисленное на предыдущем шаге. Это должен быть корень, поскольку относительное имя файла относится к корню сервера.

Ограничивая одну операцию по строке, она упрощает понимание кода. Здесь почти такая же функция, с дополнительными деталями и эхом:

 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; 

Вы заметите, как скрипт удаляет $ _SERVER ["SCRIPT_FILENAME"] из абсолютного пути, оставляя путь к веб-серверу.