Хорошо, я пытался понять это некоторое время.
У меня есть веб-сайт, над которым я работаю, и вот моя структура:
index.php
page-x/
index.php
page-x-y/
index.php
include/
functions.php
css/
main.css
За исключением добавления на дополнительные подпапки и индексные страницы.
В основном страницы на трех разных уровнях.
Все они должны иметь css / main.css, но путь к любой странице индекса будет другим.
Прямо сейчас я использую functions.php для добавления CSS, и уже должен вручную ввести относительный путь от страницы индекса к functions.php (то есть require_once("../include/functions.php");
или ../../include
и т. Д.
Как я могу сделать так, чтобы functions.php мог определить относительный путь от любой индексной страницы, к которой он включен, к css / main.css?
т.е. как бы определить $relDir
для следующего кода в functions.php:
echo '<link rel="stylesheet" type="text/css" href="' . $relDir . 'css/main.css" />';
Я мог бы каждый раз вручную передавать ""
или "../"
или "../../"
в функцию, но можно ли этого избежать?
РЕДАКТИРОВАТЬ 3
Если я определю $BASE = dirname(__DIR__);
в functions.php, я смогу найти корень сайта и перейти оттуда к абсолютному пути к CSS.
Однако, похоже, что css не связывается должным образом, на моей локальной машине результирующая ссылка выглядит следующим образом: (Я могу манипулировать косой чертой, чтобы она была согласованной, но это не помогает)
"C:\Documents and Settings\Lucas\site/css/main.css"
(Примечание: я использую псевдоним на easyPHP, чтобы я мог подключиться к этому адресу с http://127.0.0.1:8888/site/
, но __DIR__
находит фактический каталог файла.
И на (Мои университеты) сервер, на котором я тестирую, возвращается
"/Volumes/Web/Students/MYNAME/Sites/MYSITE/css/main.css"
АКТУАЛЬНЫЙ URL сайта выглядит так:
http://www.SCHOOL.com/MYNAME/MYSITE/
CSS не будет ссылаться в любой ситуации
РЕДАКТИРОВАТЬ 2 Я могу определить $relDir
как:
str_repeat('../', substr_count($_SERVER['REQUEST_URI'], '/');
возвращает одно из следующих значений в зависимости от глубины индекса:
""
"../"
"../../"
Очевидно, что это большая обработка. Похоже, что лучшее, что можно сделать, это изучить правильные среды тестирования и использовать абсолютный путь. Я посмотрю на это. Я все еще немного новичок в этом.
РЕДАКТИРОВАТЬ 1: Хорошо, большинство людей предлагают, чтобы я придерживался только того, чтобы делать это вручную, первоначально у вызова функции было что-то вроде этого:
<?php require_once("../include/functions.php");
buildHead("Music", "../"); //($title, $relDir) ?>
Мне просто нужно изменить ../
на что угодно в обоих местах для каждой страницы.