Я нахожусь в процессе создания приложения PHP. Само приложение имеет большое количество страниц, и поэтому я решил классифицировать каждый файл в соответствующие подкаталоги.
Однако я столкнулся с проблемой. Все папки ресурсов шаблона (CSS, JS, Изображения и т. Д.) Находятся в корневой папке. localhost/appname/
, а также меню навигации (navmenu.php
). Я включаю меню на каждой странице.
Проблема возникает, когда я пытаюсь включить navmenu.php
внутри файлов в подкаталогах.
т.е. когда я включаю navmenu.php
в index.php
(Оба в корневой папке) прекрасно работает. Но когда я включаю navmenu.php
в addstudent.php, расположенном в подкаталоге Student, все a href
ссылки в navmenu.php становятся студентами / *. php (Относительные ссылки)
Как правильно решать такие ситуации ..
У меня есть файл конфигурации, который включен во все файлы php. Как я должен создать константу ..
и как мне обновить ссылки в navmenu.php
HREF ссылки.
Заранее спасибо
Чтобы он всегда был включен независимо от глубины каталога, попробуйте следующее
include $_SERVER['DOCUMENT_ROOT'] . "/includes/navmenu.php";
Это должно вернуть что-то вроде: /home/<user>/public_html/includes/navmenu.php
В большинстве моих проектов; У меня тоже есть файл настроек:
$LiveDir = "http://localhost/project";
$RootDir = "/home/user/public_html/project";
Это в первую очередь полезно при смене имени хоста, поскольку вам нужно всего лишь изменить ссылки в одном файле, а не просматривать ВСЕ страницы и обновлять ссылки.
<a href='<?=$LiveDir?>/some/directory/index.php'>Some Link</a>
Я использую аналогичную настройку для работы между моей работой и моим домом на огромной CRM. Если я нахожусь дома ссылки префикса с http://127.0.0.1/
когда я на работе, он автоматически преобразуется в http://192.168.10.23/Matilda
Внимание: $ _SERVER не заселяется во время работы cron. Работа вокруг:
Создать файл: CronMgr.php
(например) с содержанием и направьте на него свою работу cron .:
<?php file_get_contents("/full/path/to/the/script.php"); ?>
Это откроет экземпляр, где $_SERVER
является заполняется, и скрипт будет работать без проблем.
Это нормальное поведение браузеров.
Для решения вашей проблемы есть 2 способа:
1. Начните ссылки с «/», т.е. «/index.php», «/about.php» и т. Д. Это заставит браузер создавать URL-адрес из корня сайта.
2. Напишите полные пути к страницам в navmenu.php с помощью PHP:
$rootPath = 'http://example.com/';
<a href="<?php echo $rootPath; ?>">Home</a>
<a href="<?php echo $rootPath.'/about.php'; ?>">About</a>
В такой ситуации я бы определил константу, которая содержит путь к каталогу корня проекта, и вы включили все, что с этим связано. Это позволяет избежать относительного включения пути.
например Убедитесь, что это загружается для всех страниц. например общий файл conf или общий index.php. Я не знаю, как у вас все настроено. (Или используйте $_SERVER['DOCUMENT_ROOT']
как указано в другом месте)
define('PROJECT_ROOT','/localhost/appname/');
а потом где-то еще
include(PROJECT_ROOT . 'navmenu.php');