С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307

Проблема с расположением файлов относительно index.php

28.12.2019, 18:27. Показов 2560. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
В гугле и в том числе в постах на киберфоруме одним из вариантов подключения одинаковых блоков html-кода на нескольких html-страницах предлагалось посредством php.
Я перекинул весь html код в index.php, а блоки, которые будут повторятся вынес в соответствующие php-файлы.
файл index.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<body>
<div id="page-wrapper">
<!-- =========== Header ========== -->
    <?php require "Header.php"; ?>
    <!-- =========== Slider ========== -->
    <section>
    ...
    </section>
    <!-- =========== Footer ========== -->
    <?php require "Footer.php"; ?>
</div>
</body>
В Header.php и Footer.php вынес блоки html-кода. Пример одного из файлов ниже:
файл header.php
PHP
1
2
3
4
5
6
7
8
<header id="header">
    <nav class="navbar navbar-expand-md navbar-light navbar-dark bg-dark">
        <div class="container">
            <div class="logo">
                <img class="navbar-left d-inline-block align-middle mr-2" src="images/logo.png">
            </div>
...
</header>
И всё прекрасно работает. НО!
Мне нужно было сделать файл About.php (и ещё несколько других):
PHP
1
2
3
4
<body>
<?php require "../Header.php"; ?>
...
<div>
, в котором я хотел подключить мой header.php, однако этот файл находится в папке home, в результате, если открыть страницу About.php, браузер не находит мой logo.png из подгруженного header.php. Ему не хватает в src=../ перед остальным путём к файлу.
Вопрос: как решить данную проблему?

p.s.: расположение файлов на localhost'e:
index.php
header.php
footer.php
<папка images>
.........logo.png
<папка home>
.........About.php
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.12.2019, 18:27
Ответы с готовыми решениями:

проблема с файлами index.php и include.php
есть файл index.php и include.php в файле index.php я пишу следующее: &lt;td width=&quot;200&quot;&gt;&lt;img width=&quot;200&quot; src=&quot;&lt;?php...

Проблема с отображением кода в index.php
Доброе время суток. Достался мне сайтик. Открываю индекс пхп и вижу вот это. прикрепил изображение. Ниразу с таким не сталкивался. ...

Index php исходного кода, от папки index php которая в корне отличаются
хочу сделать расположение блоков один за другим - а не столбом, но проблема в том что имя только присвоено первому &lt;div...

6
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
28.12.2019, 19:37
Лучший ответ Сообщение было отмечено Wolver как решение

Решение

1. В общих блоках, а лучше везде используете абсолютные адреса (явно или при помощи тега base).
2. При подключении блоков используете абсолютные пути, но получаете их при помощи магической константы __DIR__ в "точках подключения".

Добавлено через 7 минут
Пример:
PHP
1
2
3
4
5
6
7
<?php
 
return [
  ...
  'baseurl'=>'/',
  ...
];
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en-us">
<?php include __DIR__.'/includes/head.php'; ?>
 
<body>
<?php include __DIR__.'/includes/sidebar.php'; ?>
 
<div class="content container">
<?= $page['content'] ?>
 
</div>
</body>
</html>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<head>
...
 
  <!-- CSS -->
  <link rel="stylesheet" href="<?= $site['baseurl'] ?>public/css/poole.css">
  <link rel="stylesheet" href="<?= $site['baseurl'] ?>public/css/syntax.css">
  <link rel="stylesheet" href="<?= $site['baseurl'] ?>public/css/hyde.css">
  <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,400italic,700|Abril+Fatface">
 
  <!-- Icons -->
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?= $site['baseurl'] ?>public/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="<?= $site['baseurl'] ?>public/favicon.ico">
 
  <!-- RSS -->
  <link rel="alternate" type="application/rss+xml" title="RSS" href="<?= $site['baseurl'] ?>atom.xml">
</head>
1
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
28.12.2019, 19:57  [ТС]
п.1 неприемлем, т.к. мне хочется структурированное расположение файлов.
Касательно п.2 - вы уверены, что использование _DIR_ поможет решить проблему с путём к logo.png в src тега img?
Повторюсь, include блоков проходит прекрасно и в index.php и в about.php и визуально правильно отображаются. Проблема лишь в том, что в about.php не грузится картинка из <img>, которая находится в include'нном header.php. Потому что путь там указан относительно index.php, а не about.php
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
28.12.2019, 20:22
П.1 - это норма для адресов внутри общих блоков. И чем это мешает "структурированному расположению файлов"? Я вам даже показал универсальный вариант, позволяющий одновременно использовать несколько тем оформления на сайте. В реальности обычно хватает href="/public/css/poole.css".
П.2 никак не связан с "logo.png в src тега img". Не путайте адреса и пути к файлам на сервере

Ваш about.php меня не сильно интересует. В современных сайтах обычно используется единая точка входа. Ну, а вы можете подключать в about.php единый общий шаблон или шаблон специально для этой страницы. Причем делается это при помощи той же __DIR__. Если нужно сослаться на файл через надкаталог, используйте dirname(__DIR__) (можно многократно или за счет дополнительного параметра этой функции) или "/../" (тоже можно многократно).

Вы спросили, как это делается. Я вам ответил. Если не нравится, можете изобретать свой велосипед
0
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
28.12.2019, 20:48  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Вы спросили, как это делается. Я вам ответил. Если не нравится, можете изобретать свой велосипед
я возможно не совсем правильно вас понял)
Пока никак не комментирую, попробую в коде - отпишусь. На данную секунду, спс за ответ.
0
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
31.12.2019, 01:47  [ТС]
Всё, я разобрался.
По поводу магич. константы _DIR_ (а точнее dirname(__DIR__)) - это вообще бредятина, ну точнее оно работает и без неё и с ней. Не в этом дело. Я же писал, что у меня все блоки подключились на 100%, проблема лишь в img.
Однако, estic , приведенный вами код, меня натолкнул на мысль, чему я безмерно вам благодарен!)
php-скрипты, пока не завершат работу, - живы, а значит объявленная до формирования html-разметки php-переменная будет жива и доступна при include (или require) html-блока.

файл About.php
PHP
1
2
3
4
5
6
7
8
9
<?php
$base_url = "../";
?>
<!DOCTYPE html>
<html lang="en">
...
<div class="page-wrapper">
    <?php require dirname(__DIR__)."/Header.php"; ?>   // или как у меня было до этого - <?php require "../Header.php"; ?>
...
файл Header.php
PHP
1
2
3
4
5
<header id="header">
...
<img class="navbar-left d-inline-block align-middle mr-2" src="<?= $base_url ?>images/logo.png">
...
</header>
И всё прекрасно работает!
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
31.12.2019, 14:00
Цитата Сообщение от Wolver Посмотреть сообщение
По поводу магич. константы _DIR_ (а точнее dirname(__DIR__)) - это вообще бредятина, ну точнее оно работает и без неё и с ней.
Да, все профессиональные программисты этим бредят Вам может показаться, что это одно и то же. Но это не совсем так. Поверьте

Еще в качестве единой точки отсчета можете использовать $_SERVER['DOCUMENT_ROOT']. Для сайтов с множеством точек входа это позволит полностью отказаться от использования каких-либо относительных путей.

Насчет адресов то же самое. Написал же: используйте абсолютные адреса в общих блоках. Это универсальный способ для страниц с любым уровнем вложенности адресов. А с относительными адресами в общих блоках все страницы на других уровнях будут иметь некорректные ссылки. Даже если у вас сейчас таких страниц нет, все равно лучше делать так, как я написал. А если у вас общие блоки используются еще и в страницах ошибок, например 404, то считайте, что страницы на разных уровнях у вас есть, даже если их нет

Цитата Сообщение от Wolver Посмотреть сообщение
php-скрипты, пока не завершат работу, - живы, а значит объявленная до формирования html-разметки php-переменная будет жива и доступна при include (или require) html-блока.
Это для простых случаев наподобие показанного вами или мной. В общем для доступности на любом уровне видимости лучше использовать константы, статичные свойства и т.п.

Добавлено через 10 минуты
Только не используйте $_SERVER['DOCUMENT_ROOT'] непосредственно в шаблонах. В шаблонах используйте __DIR__ (для подключения общих блоков), а для подключения шаблонов можете использовать $_SERVER['DOCUMENT_ROOT'].
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.12.2019, 14:00
Помогаю со студенческими работами здесь

Возможности php относительно редактирования Ворд файлов
здравствуйте какие есть возможности у php 1копирование Ворд файла? 2переименовывание Ворд файла? 3открыть Ворд файл редактировать и...

mod_rewrite: все на index.php без www и index.php
Приветствую, уважаемые форумчане! :) Подскажите, пожалуйста, как мне реализовать следующую схему в .htaccess, используя mod_rewrite. Я...

Вывод файлов из директории с параметром типа index.php?id=number
Здравствуйте! А вы не подскажете как сделать так: имеется директория и в ней набор файлов. Хотел бы сделать так: раскидать файлы и...

Как не выводить надпись из index.php в index.php?id=1
Добавлено через 30 минут может как-нибудь сделать div, который потом скрывать через ксс, на других айди? Добавлено через 2 минуты ...

index.html на index.aspx (index.php...)
Вот, собственно, мучаясь с проблемой вылета сайта из топа 1000 (до этого было более 10 топовых (#1) позиций и около тридцати топ 10 позиций...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru