Страница 1 из 2

Абсолютный путь к таблице стилей.

Добавлено: 12 фев 2014, 15:57
anempadest
В разделе <head> пишу:
<link href="<? echo $_SERVER['DOCUMENT_ROOT'] . '/z/css/layout.css' ?>" rel="stylesheet" type="text/css">

На локальном сервере OpenServer путь строится правильно, но стили не применяются
На сервере провайдера (если загрузить на хостинг сервер) всё работает.
Как исправить?

Добавлено: 12 фев 2014, 17:13
fade
Вот так будет кроссдоменно ;)
<link href="/z/css/layout.css" rel="stylesheet" type="text/css">

Добавлено: 12 фев 2014, 18:01
anempadest
Спасибо. Но мне кажется, что ответ не удовлетворительный.
Я собираю PHP страницЫ по принципу:
include HEADER.php
<article></article>
include FOOTER.php

Так строятся разные страницы сайта, которые находятся на разных уровнях и в разных директориях.

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

Добавлено: 12 фев 2014, 18:18
Asmodey
Отделите мух от котлет! Где путь в локальной файловой системе, а где чаcть урла.

Добавлено: 12 фев 2014, 18:52
anempadest
Скрипт $_SERVER['DOCUMENT_ROOT'] . '/z/css/layout.css'

- на локальном сервере OpenServer возвращает:
D:/OpenServer/domains/mysite/z/css/layout.css

- на хост сервере возвращает:
http://mysite.com/z/css/layout.css

Что неправильно?

Добавлено: 12 фев 2014, 21:15
DelphinPRO
Неправильно то, что не следует использовать $_SERVER['DOCUMENT_ROOT'] в своих скриптах, так как его содержимое настраивается админом сервера, и может быть любым. Если вы пишете нормальный переносимый скрипт, определяйте корни самостоятельно.
Для файловой системы - это __DIR__ в точке входа, для URL - адреса начинаться должны со слеша, как вам подсказали выше.
/z/css/layout.css
Это и будет URL-адрес, относительно корня вашего сайта.

Добавлено: 13 фев 2014, 00:39
anempadest
Тогда будьте любезны, объясните мне, как поступить и как написать правильно.

Вопрос 1. Ссылки в INCLUDE
Я должен указать адрес файла, который я буду вставлять.
Вы советуете писать так:
include "/z/header.php";
Для страницы, которая лежит в корне сайта, этот код работает. Но для страницы, которая лежит на втором уровне, уже выдаётся ошибка. И работает, если прописать другой путь:
include "../z/header.php";
Вопрос 2. INCLUDE во вложенном файле.
Я вставляю содержимое файла через INCLUDE. В самом вставляемом файле также есть вставка через INCLUDE. Во вставляемом файле я по вашему совету прописал ссылки, которые начинаются слешем
При формировании файла, который лежит в корне, всё работает. Для файла, который находится на втором уровне, получаю ошибку о том, что влагаемого файла не существует.

Прошу помочь.

Добавлено: 13 фев 2014, 08:59
fade
<link href="<? echo $_SERVER['HTTP_HOST'] . '/z/css/layout.css' ?>" rel="stylesheet" type="text/css">
вернет хост, т.е. адрес сайта)

Добавлено: 13 фев 2014, 09:16
DelphinPRO
anempadest писал(а):Вы советуете писать так:

Код: Выделить всё
include "/z/header.php";
НЕТ!!! Путь в файловой системе и Универсальный указатель ресурса в сети (URL) - ЭТО РАЗНЫЕ ВЕЩИ!!!

При операциях с файловой системой сервера следует указывать либо относительные пути (от места расположения выполняемого файла), либо абсолютные, от корня сервера (под сервером понимается компьютер, на котором все работает, не путать с корнем сайта). При указании абсолютных путей часто используют константу, содержащую путь от корня сервера, до корня сайта. Самый простой способ задания такой константы - в единой точке входа, которая расположена в корне сайта (index.php).

В вашем случае точек входа, по видимому, дохрена, можно попробовать перечислить все ваши папки с подключаемыми файлами в include_path и подключать include 'header.php';

Добавлено: 13 фев 2014, 15:47
anempadest
перечислить все ваши папки с подключаемыми файлами в include_path
Где это прописать? Где он находится?
DelphinPRO писал(а):Путь в файловой системе и Универсальный указатель ресурса в сети (URL) - ЭТО РАЗНЫЕ ВЕЩИ
Я правильно Вас понял?
Если я обкатываю сайт на локальном сервере OpenServer, я должен прописывать путь в файловой системе. А перед выгрузкой в сеть я должен все пути переписать на доступ к домену.

А можно как-то упростить мою работу? У меня всё время будет уходить только на переписывание путей.