Не знал как правильно сформулировать вопрос, поэтому вы его видете таким, каким он есть. Ниже описана ситуация, в которой возникает проблема, что бы было понятней о чем идет речь.
Ситуация следующая:
Разрабатываю сайт, структура примерно такая:
1) structure (*каталог где хранятся элементы встраиваемые в другие страницы*)
1.1) logo.php
1.2) menu_side.php
1.3) footer.php
2) pages (*каталог хранит основные страницы*)
2.1) moskow_info (*подкаталог, где хранятся информация о городе вместе с картинками и страницами*)
-moscow.php
2.2) spb_info
-spb.php
2.3) rostov_info
-rostov.php
3) images
- logo.png
Допустим, мне нужно вставить logo.php во все страницы типа moscow.php, spb.php, rostov.php. Делаю это так:
<header id="header">
<?php
include_once $_SERVER['DOCUMENT_ROOT']."/structure/logo.php";
?>
</header>
В свою очень, logo.php содержит ссылку на картинку, в виде такого когда:
<?php
$a = $_SERVER['DOCUMENT_ROOT']."/images/logo.png"; ?>
<a href="index.php"><img src="<?php echo $a; ?>" /></a>
Вызываю страницу test.ru/pages/moscow.php. По идее, должна отобразиться картинка из logo.php, но изображение данным образом не отображается. Когда открываю Исходных код страницы, там видно что путь прописывается правильно:
<a href="index.php"><img src="C:/Program Files (x86)/Apache2.4/htdocs/region.ru/www/images/logo.png" alt="" /></a>
Скажите пожалуйста, в чем может быть проблема? Спасибо.
Ошибка заключается в непонимании того, что есть уровень файловой системы и уровень документов веб-сервера. Разберемся.
Когда на веб-сервер прилетает запрос "дай мне документ /images/logo.png
", то веб-сервер "складывает" корень веб-документов и путь к запрашиваемому документу.
Apache: корень веб-документов прописывается так:
<VirtualHost *:80>
# виртуальный хост
ServerName site.ru
# корень веб-документов
DocumentRoot /var/www/site.ru/www
# остальные настройки
</VirtualHost>
Если у вас Nginx, то так:
server {
# порт
listen 80;
# виртуальный хост
server_name site.ru;
# корень веб-документов
root /var/www/site.ru/www;
# остальные настройки
}
Таким образом, получается /var/www/site.ru/www
+ /images/logo.png
= /var/www/site.ru/www/images/logo.png
- это абсолютный путь к файлу в файловой системе, веб-сервер находит этот документ, и отправляет пользователю в браузер.
PHP - это всего лишь скрипт, который запускается веб-сервером. Если в нем будет строчка
include_once "/structure/logo.php";
то PHP не найдет этот файл, ведь этот путь от корня файловой системы. В этом и заключается отличие от веб-сервера, который будет смотреть не с /
, а с корня веб-документов.
Используйте в PHP абсолютный путь:
include_once $_SERVER['DOCUMENT_ROOT']."/structure/logo.php";
используйте в генерируемом HTML не C:/Program Files (x86)/Apache2.4/htdocs/region.ru/www/images/logo.png
, а
<img src="/images/logo.png">
веб-сервером это будет преобразовано в абсолютный путь с учетом корня веб-документов и отправлено по HTTP в браузер
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
это все в контроллере и ссылка не работает правильно, как изменить в Laravel?
INSERT ничего не добавляет в БД при использовании в VALUES переменных, как только я уже не пробовал записывать, не понимаю как всё таки нужноНо работает...
Всем добрый день! У меня встала задача, выводить на сайте файлы DOC в виде PDFИсходный файл DOC храниться в базе данных в виде бинарного кода