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

Добавлено: 13 фев 2014, 16:11
DelphinPRO
Неправильно.
Когда вы пишете в html разметке значения в атрибутах src, href и т.п. - вы там пишете URL.
Когда вы пишете путь в PHP-коде в функциях include, fopen, glob и т.п. - вы там указываете путь к файлу в локальной файловой системе сервера.

Добавлено спустя 3 минуты 55 секунд:
anempadest писал(а):перечислить все ваши папки с подключаемыми файлами в include_path
Где это прописать? Где он находится?
include path можно установить в php.ini или установить функцией set_include_path ( http://www.php.net/manual/ru/function.s ... e-path.php , там и примерчик есть ).

PS. Вообще, если вы начинающий разработчик, вам стоит почитать что-нибудь про основы.

Добавлено: 13 фев 2014, 23:19
anempadest
DelphinPRO писал(а):Когда вы пишете в html разметке значения в атрибутах src, href и т.п. - вы там пишете URL.
Когда вы пишете путь в PHP-коде в функциях include, fopen, glob и т.п. - вы там указываете путь к файлу в локальной файловой системе сервера.
Это я понял. Только на практике всё упирается в конкретные приёмы, с помощью которых достигается безошибочная работа.
В коде HTML я могу задавать относительные (от текущей страницы) и абсолютные ссылки (от корня сайта). Но чтобы получить универсальный метод, я должен строить пути от корня сайта. В скриптах PHP - тот же подход, то есть от корня.

Следовательно, корень:можно получить:
1) Для HTML - если путь начать с "/".
2) Для PHP - если путь начать... с чего?

Впрочем, спасибо за INCLUDE_PATH. Получается, в него перед всеми инклудами я должен поместить адрес к папке, в которой лежат инклуды. Правильно?

Хотелось бы только узнать, где, когда и на какой странице этот путь прописывать. Ведь пользователь может зайти на сайт с любой страницы.

Добавлено: 13 фев 2014, 23:56
DelphinPRO
1) верно.
2) Есть понятие - "точка входа" в приложение. Это файл, который доступен для обращения по HTTP. Тут есть варианты.

а) Единая точка входа. Это файл index.php, который лежит в корне сайта, и на который, с помощью mod_rewrite перенаправляются все запросы. В этом файле анализируется запрошенный адрес ($_SERVER['REQUEST_URL']), определяется чего хочет пользователь, и подключаются инклудами необходимые файлы. В этом случае достаточно определить в index.php константу, например,
define ('ROOT', __DIR__);
которая и будет содержать в себе путь к корню сайта в файловой системе. В дальнейшем, в подключаемых файлах просто используем эту константу для построения путей.
ROOT . '/my_folder/my_file.php';
б) Несколько точек входа. Такой подход тоже популярен и используется, например, на данном форуме. Тут есть несколько входных файлов: index.php, viewtopic.php и т.д. Самое простое - разместить все точки входа в корне сайта, во всех прописать константу, как указано выше, и использовать ее для построения путей в подключаемых файлах. Самый гемморойный (и, я считаю, неправильный) это когда ваши точки входа валяются черт-те знает где, на разных уровнях вложенности. Тут в каждом файле вы пишете примерно такое
$root = realpath(__DIR__ . '/../../');
define('ROOT', $root);
Т.е. так же объявляете константу с путем до корня сайта, но в каждой конкретной точке входа следует правильно указывать количество переходов на верхний уровень (../) в зависимости от расположения данного файла.
Что весьма гемморно, и породит ошибки, если вы захотите переместить файл в другое место.

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

Добавлено: 14 фев 2014, 01:28
anempadest
Премного благодарен за Ваши объяснения. После прочтения возникли вопросы.
DelphinPRO писал(а):Самый гемморойный (и, я считаю, неправильный) это когда ваши точки входа валяются черт-те знает где, на разных уровнях вложенности. Тут в каждом файле вы пишете примерно такое
Я сейчас перевожу свой сайт на PHP. Это будет мой первый сайт "на PHP". До этого писал на HTML (правда, с использованием шаблонов в MS Expression Web).. Решился пока только на сборку каждой страницы из HEADER+ARTICLE+FOOTER. Мне, как разработчику, понимается привычно и легко. Хотя понимаю, что не по правилам PHP-строения.

Если интересно, я решился на то ещё извращение. Шапка и подвал у всех страниц неизменны. Статья на каждой странице уникальна. А в зависимости от расположения меняется только контекстное меню. На днях постараюсь написать код, который будет выводить разные меню в зависимости от вхождения подстроки в адрес страницы (в зависимости от её расположения в определяющей директории).

Сначала раздел HEAD я хотел вынести в отдельный файл HEADER.PHP и инклудить его в каждую страницу. Но без ссылок на таблицы стилей довольно тяжело форматировать статью. Поэтому раздел HEAD я всё-таки решил не трогать и оставить в каждом файле (странице) свой. Инклюдить буду только FOOTER и NAV.

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

Делать одну точку входа через index.php пока не вижу необходимости. Или не оценил преимущества перехода. К тому же, боюсь непонятной для меня методики ЧПУ,

А теперь вернусь к обсуждаемой теме. Я в INCLUDE путь прописал всё же с использованием $_SERVER('DOCUMENT_ROOT'). Что в этом плохого?

Добавлено: 14 фев 2014, 08:52
DelphinPRO
Чаще всего ничего плохого. Если в $_SERVER['DOCUMENT_ROOT'] содержится правильный путь. Я выше писал, что на некоторых хостингах $_SERVER['DOCUMENT_ROOT'] может не совпадать с реальным путем к корню сайта.