Определение "корневого" местоположения веб-сайта
Мне нужна помощь с концепциями и терминологией относительно URL-адресов и каталогов "root" веб-сайта.
можно ли определить корень веб-сайта, или это произвольная идея, и только фактический корень сервера может быть установлен?
предположим, я пишу плагин PHP, который будет использоваться разными веб-сайтами в разных местах, но должен определить, что такое базовый каталог веб-сайта. Используя PHP, я всегда смогу определить DOCUMENT_ROOT и ИМЯ_СЕРВЕРА, то есть абсолютный URL и абсолютный путь к каталогу сервера (или виртуального сервера). Но я не могу знать, установлен ли сам веб-сайт в корневом каталоге или в подкаталоге. Если веб-сайт был в подкаталоге, мне нужно было бы, чтобы пользователь явно установил переменную "sub-path". Правильно?
4 ответов
ответ на вопрос 1: Да, вам нужна переменная, которая явно задает путь к корневому каталогу сайта. Это можно сделать с помощью файла htaccess в корне каждого веб-сайта, содержащего следующую строку:
SetEnv APP_ROOT_PATH /path/to/app
http://httpd.apache.org/docs/2.0/mod/mod_env.html
и вы можете получить доступ к нему в любом месте вашего PHP-скрипта с помощью:
<?php $appRootPath = getenv('APP_ROOT_PATH'); ?>
будут ли $url и $dir всегда указывать на одно и то же место?
<?php
$some_relative_path = "hello";
$server_url = $_SERVER["SERVER_NAME"];
$doc_root = $_SERVER["DOCUMENT_ROOT"];
echo $url = $server_url.'/'. $some_relative_path."<br />";
echo $dir = $doc_root.'/'. $some_relative_path;
выход:
sandbox.phpcode.eu/hello
/data/sandbox//hello
вам не нужно просить пользователя предоставить какую-либо информацию.
этот фрагмент даст вашему коду знать, работает ли он в корне или нет:
<?php
// Load the absolute server path to the directory the script is running in
$fileDir = dirname(__FILE__);
// Make sure we end with a slash
if (substr($fileDir, -1) != '/') {
$fileDir .= '/';
}
// Load the absolute server path to the document root
$docRoot = $_SERVER['DOCUMENT_ROOT'];
// Make sure we end with a slash
if (substr($docRoot, -1) != '/') {
$docRoot .= '/';
}
// Remove docRoot string from fileDir string as subPath string
$subPath = preg_replace('~' . $docRoot . '~i', '', $fileDir);
// Add a slash to the beginning of subPath string
$subPath = '/' . $subPath;
// Test subPath string to determine if we are in the web root or not
if ($subPath == '/') {
// if subPath = single slash, docRoot and fileDir strings were the same
echo "We are running in the web foot folder of http://" . $_SERVER['SERVER_NAME'];
} else {
// Anyting else means the file is running in a subdirectory
echo "We are running in the '" . $subPath . "' subdirectory of http://" . $_SERVER['SERVER_NAME'];
}
?>
у меня только что была такая же проблема. Я хотел ссылаться на ссылки и другие файлы из корневого каталога моей структуры сайта.
я попробовал следующее, Но это никогда не будет работать, как я этого хотел:
$root = $_SERVER['DOCUMENT_ROOT'];
echo "<a href="' . $root . '/index.php">Link</a>";
echo "<a href="' . $root . '/admin/index.php">Link</a>";
но очевидным решением было просто использовать следующее:
echo "<a href="../index.php">Link</a>";
echo "<a href="../admin/index.php">Link</a>";