php включает файл из другого каталога


Вот пример структуры:

/main
 /css
  style.css
 /include
  article1.php
  article2.php
 header.php
 index.php

В моем header.php У меня есть следующий код для css:

<link rel="stylesheet" type="text/css" href="css/style.css" />

И, например, в моем index.php В качестве первой строки у меня есть следующее:

<?php include 'header.php'; ?>

Теперь все работает нормально и так. Далее я собираюсь вставить следующий код в article1.php файл:

<?php include '../header.php'; ?>

Содержимое (меню и другой html-код) отображается правильно, однако CSS не будет отображаться/распознаваться вообще. В основном то, что происходит, это что файл заголовка включен, но сервер не соблюдает родительский каталог. Чтобы CSS отображался правильно, мне пришлось бы изменить link rel для CSS на ../css/style.css, но если я это сделаю, это не будет работать с файлами, расположенными в главном каталоге.

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

Author: coldpumpkin, 2013-03-28

8 answers

В разделе <head> вашего сайта вставьте элемент <base> с атрибутом href. Установите атрибут href в базовый URL вашего веб-сайта, и все относительные запросы будут отправляться через этот базовый URL.

<base href="http://my-website-url.com/" />
<link rel="stylesheet" type="text/css" href="css/style.css" />

С правильно установленным тегом base браузер пользователя попытается загрузить вашу таблицу стилей с URL-адреса http://my-website-url.com/css/style.css.

Примечание: это влияет не только на таблицы стилей, но и на все относительные ссылки в документе.

 20
Author: Matt, 2013-03-28 14:39:06

Это связано с тем, как работает паттинг в includes. Я рекомендую по возможности исправлять ошибки из корневого каталога doc.

<?php include( $_SERVER['DOCUMENT_ROOT'] . '/header.php' ); ?>

Это будет работать в любом из ваших файлов.

 13
Author: mikevoermans, 2013-03-28 13:46:46

Вместо использования относительных путей:

href="css/style.css"

Используйте абсолютные пути из веб-корня:

href="/css/style.css"
 5
Author: bubba, 2013-03-28 13:48:16

Вы должны включить свой css-файл из корневого каталога. Так что /css/style.css таким образом, он всегда будет начинаться с корня, а затем спускаться оттуда. Я считаю, что это должно решить вашу проблему во всех случаях.

 3
Author: wallerjake, 2013-03-28 13:46:54

Во-первых, проблема в том, что ваша ссылка на ваши CSS-файлы неверна. Лучшее, что можно сделать, это посмотреть на вывод HTML (источник просмотра) со страницы. Итак, давайте разберем это (форма index.php ):

Index.php находится по адресу domain.tld/index.php. Ваши css-файлы находятся по адресу domain.tld/css/*. При просмотре индексного файла ваш заголовок

<link rel="stylesheet" type="text/css" href="css/style.css" />

Это работает, потому что вы находитесь в верхней части каталога (или в корневом каталоге), и ссылки сделаны относительно этого каталога. Теперь, когда вы поднимаетесь до domain.tld/include/article1.php, вы больше не находятся в корне. Он пытается получить доступ к:

domain.tld/include/css/style.css

Это означает, что вы должны создать полную ссылку или изменить своего родственника. Самый простой способ, поскольку CSS находится в корне, - это просто использовать следующее

<link rel="stylesheet" type="text/css" href="/css/style.css" />
                                             ^

Это означает, что он будет искать в корне домена каталог css как таковой domain.tld/css/styles.css. Если ваш верхний каталог /main, используйте /main/css/styles.css

 3
Author: UnholyRanger, 2013-03-28 13:51:13

Могу ли я объяснить вашу проблему и как ее решить.

Включение в php работает так же, как и в C. Когда вы включаете страницу, которая копирует/вставляет содержимое страницы в первую.

Итак, есть два файла:

include.php

<?php
$var = 'PHP';
?>

main.php

<?php
include 'include.php';
echo $var; // affiche 'PHP'
?>

Когда вы запрашиваете"main.php "страница, на которой вы получите следующее:

<?php
$var = 'PHP';
echo $var; // affiche 'PHP'
?>

Поэтому, если вам нужно включить элемент на свою страницу. У вас есть два варианта:

1. абсолютный путь (лучший путь)

Вместо использования относительного пути используйте абсолютный путь. Этот способ позволяет вам включать файл отовсюду без использования текущего пути.

2. переменная

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

include.php

<?php
$var = 'PHP';
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"".$currentPath."css/style.css\" />";
?>

main.php

<?php
# path to the root of the website
$currentPath = "../";

include 'include.php';
echo $var; // affiche 'PHP'
?>

Чтобы узнать больше о include, смотрите эту страницу

 2
Author: Xavier S., 2018-03-12 07:27:34

У вас есть два варианта

  1. Передайте относительный путь к включенному файлу

Т.е.

<link rel="stylesheet" type="text/css" href="<?=$path ?>css/style.css" />

И

$path = "../";
include "header.php";

Или 2. вы используете абсолютные пути к своим файлам

<link rel="stylesheet" type="text/css" href="/css/style.css" />
 1
Author: Philipp, 2013-03-28 13:51:23

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

../some_directory/some_file.php

С

dirname(dirname(__FILE__)) . '/some_directory/some_file.php'

dirname(__FILE__) является текущим каталогом.

 1
Author: SteeveDroz, 2013-03-28 13:51:35