Как я должен правильно включать один и тот же файл в несколько каталогов?

#php #include #relative-path #include-path #absolute-path

#php #включить #относительный путь #включить-путь #абсолютный путь

Вопрос:

В настоящее время я работаю над очень простым многостраничным веб-сайтом на PHP с базовой структурой каталогов. Примерно так:

 /
- index.php
- config.php
- services/
  - index.php
  - service-a.php
  - service-b.php
- projects/
  - index.php
  - project-name/
    - index.php
    - testimonials.php
- common/
  - head.php
- js/
- img/
- css/
  

К сожалению, моя локальная среда разработки и производственная среда структурно не совпадают из-за добавления дополнительной локальной папки.
Поэтому я создал config.php , который я поместил в папку, которую я считаю корневой папкой, содержащую следующее:

 define('ROOT_DIR', __DIR__);
define('ROOT_URL', ($_SERVER["SERVER_NAME"] == "localhost") ? "http://localhost/website/" : "https://website.com/");
  

Эти константы позволяют мне создавать абсолютные пути — в моей локальной и удаленной среде — к любому файлу, который я включаю, будь то другой файл PHP или изображение или таблица стилей. Это здорово, потому что я хочу максимально избегать любых относительных путей.

Se вот в чем проблема: мне нужно включить файл конфигурации на каждую страницу, чтобы константы работали. Для домашней страницы ( /index.php ) это не имеет большого значения. Я просто добавляю это в начало файла:

<?php include_once('config.php'); ?>

Однако для страницы в подкаталоге ( /services/index.php ) мне пришлось бы использовать относительный путь к файлу конфигурации, чего я бы хотел избежать:

<?php include_once('../config.php'); ?>

Если мы пойдем еще глубже, например /projects/project-name/index.php , мне пришлось бы включить его следующим образом:

<?php include_once('../../config.php'); ?>

Это работает, но кажется неправильным. Как я должен объявить путь к включенному файлу, который определяет, как должны быть объявлены пути к включенным файлам?

После нескольких часов поиска я все еще не нашел ответа. Если у кого-то есть ответ или он может указать мне правильное направление, пожалуйста, дайте мне знать.

Комментарии:

1. Что ты имеешь в виду, это кажется неправильным!! Это правильно. Вот как вы включаете файл.

2. Но если так и должно быть, зачем вообще использовать абсолютные пути для любого файла? Например, я мог бы также ссылаться на таблицу стилей через ../../css/base.css просто отлично. Мне сказали максимально избегать относительных путей, чтобы обеспечить масштабируемость и перемещение по страницам. Это то, что я пытаюсь делать везде.