Как использовать PHP включает в себя несколько каталогов / подкаталогов с относительными путями

У меня возникают трудности с путями в системе cms, которую я пытаюсь построить, у меня в основном есть папка с файлами header.php и footer.php внутри.

Они включены в index.php и работают нормально. Но тогда, когда я пытаюсь использовать то же самое в файле в моем подкаталоге admin, изображения и CSS нарушаются, очевидно, потому что относительный путь теперь неправильный.

Итак, мой вопрос: как я могу это преодолеть?

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

Мне обычно удается разобраться в себе, но это был долгий день, и я вздрогнул!

У меня обычно есть файл с именем config в корне моего приложения, и в нем я определяю константу для базового пути и несколько других:

define('APP_BASE_PATH', dirname(__FILE__)); define('APP_FUNCTIONS_PATH', APP_BASE_PATH . '/functions'); 

и я включаю свои файлы вроде

 include (APP_BASE_PATH . 'includes/another_file.php'); include (APP_FUNCTIONS_PATH . '/function_file.php'); 

таким образом, я могу разместить свое приложение в любом каталоге, плюс я могу перемещать файлы без особого беспокойства.

также используя полный путь, делает включение более быстрым

Я предпочитаю устанавливать переменные среды (в Apache, используя .htaccess или .conf). Таким образом, вы можете свободно перемещать все ваши файлы в любом месте webroot и иметь доступ к этим переменным.

 SetEnv lib /library/folder/ SetEnv public /my/web/root/ SetEnv environ DEVELOPMENT 

Также вы можете использовать переменную с именем «environ», упомянутую в вышеприведенном фрагменте .htaccess, чтобы включить файл определенного сервера в качестве файла конфигурации во всех ваших сценариях и установить там различные переменные.

 require_once getenv('lib')."Configs/Config_".getenv('environ').".php"; 

Наслаждайтесь свободой!

или…

include ($ _ SERVER ['DOCUMENT_ROOT']. '/ includes / header.php');

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

Поэтому вам нужно решение из двух частей.

Во-первых, вам нужен перенаправитель. В принципе, это файл include, который служит для одной точки вызова для всех других страниц. Его задача – включить и включить всю вашу инфраструктуру. Все ваши страницы называют этот перенаправитель и только этим перенаправитель (но вы можете их связать).

Этот перенаправитель теперь делает

  include_once dirname(__FILE__).'/include/include.php'; 

Это позволяет вам изменять файл или местоположение вашего инфраструктуры, а все, что вам нужно обновить, – это один файл. Вызов dirname() решает все относительные и абсолютные проблемы и ищет следующий шаг относительно себя. И по определению это меняется только тогда, когда вы меняете его, поэтому он всегда будет работать.

Вторая часть – пользовательский, поэтому вы можете вызывать контент по имени с помощью функции, и он идет и получает нужный файл. Похоронить это в вашем каталоге инфраструктуры – это куда. Затем он становится черным ящиком, который страницы за пределами этой области зовут без знания и без необходимости знать, как он работает или где он находится. Это устраняет необходимость в константах пути для включения фрагментов страницы, потому что у вас есть одно место, делающее все это для вас.

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

Работая над решениями, предоставленными людьми, и рассматривая различные темы (включая этот, который я цитировал в своем решении в нижней части моего сообщения), у меня был способ! Я также разместил решение. Это может помочь кому-то, кто сталкивается с подобной проблемой.