[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Document root
Telez
Добрый день
Как правильно указывать путь к файлам?
Нужно прописывать путь в каждом файле или есть какое-либо общее решение?
Ricco381
для классов есть атозагрузчик, обычные файлы нужно инклюдить
Telez
Не совсем понял....

Пример: /папка1/папка2/файл

Нужно добавить перед первым "/" $_SERVER["DOCUMENT_ROOT"] или это настройки на хосте?
stump

define('DOCUMENT_ROOT', $_SERVER["DOCUMENT_ROOT"]);
include_once DOCUMENT_ROOT , '/folder1/folder2/folder3/needle.inc.php';
include_once DOCUMENT_ROOT , '/folder1/folder2/needle.inc.php';
include_once DOCUMENT_ROOT , '/otherfolder/needle.inc.php';


_____________
Трус не играет в хокей
AllesKlar
Цитата (stump @ 18.03.2015 - 19:38)
define('DOCUMENT_ROOT',  $_SERVER["DOCUMENT_ROOT"]);
include_once DOCUMENT_ROOT , '/folder1/folder2/folder3/needle.inc.php';
include_once DOCUMENT_ROOT , '/folder1/folder2/needle.inc.php';
include_once DOCUMENT_ROOT , '/otherfolder/needle.inc.php';

Не болтайте ерундой. (С) :)

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

Telez
Цитата
Нужно добавить перед первым "/" $_SERVER["DOCUMENT_ROOT"] или это настройки на хосте?

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

типа:
define('DOCUMENT_ROOT', rtrim($_SERVER['DOCUMENT_ROOT'], DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR);

И тогда ты будешь полностью уверен, что слеш вконце есть всегда, независимо от настроек сервера.

_____________
[продано копирайтерам]
stump
Цитата (AllesKlar @ 18.03.2015 - 22:07)
Цитата (stump @ 18.03.2015 - 19:38)
define('DOCUMENT_ROOT',  $_SERVER["DOCUMENT_ROOT"]);
include_once DOCUMENT_ROOT , '/folder1/folder2/folder3/needle.inc.php';
include_once DOCUMENT_ROOT , '/folder1/folder2/needle.inc.php';
include_once DOCUMENT_ROOT , '/otherfolder/needle.inc.php';

Не болтайте ерундой. (С) :)

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

Не болтайте ерундой! (тм) :)
Вопрос стоит: "Как правильно указывать путь к файлам?", - удобно указывать полный путь к файлам обозначив в конфигурационном файле константу DOCUMENT_ROOT

define('DOCUMENT_ROOT',  $_SERVER["DOCUMENT_ROOT"]);


Тогда путь к файлам будет выглядеть:

include_once DOCUMENT_ROOT , '/folder1/folder2/folder3/needle.inc.php';
include_once DOCUMENT_ROOT , '/folder1/folder2/needle.inc.php';
include_once DOCUMENT_ROOT , '/otherfolder/needle.inc.php';


Это не будет зависеть от того в каком фолдере находится файл в котором вызывается include.

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

_____________
Трус не играет в хокей
sergeiss
Цитата (Telez @ 18.03.2015 - 15:27)
Как правильно указывать путь к файлам?

Тут надо еще поставить вопрос о том, где же лежат твои файлы? Если они находятся вне каталога, доступного из веба, то тогда можно использовать тот путь, что указал stump. Только надо будет указать путь в явном виде. Ну, например...
Пусть мы сделали такую структуру каталогов:
/user/one
-----/data
---------/common
---------/pages
-----/public_html
---------/css
---------/js

То есть, public_html - это доступные из веба данные, а каталог data находится рядом с public_html.
При такой структуре, во-первых, в принципе нельзя получить доступ к файлам из веба. Их даже защищать от этого никак не нужно.
Во-вторых, если мы укажем некую константу
define( 'BASE_DATA_DIR', '/user/one/data');

то тогда сможем инклудить любой файл примерно так:
include_once BASE_DATA_DIR.'/common/connect_db.php';
include_once BASE_DATA_DIR.'/functions/main_funcs.php';
include_once BASE_DATA_DIR.'/pages/catalog.php';

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
killer8080
не стоит полагаться на $_SERVER["DOCUMENT_ROOT"], лучше использовать магические константы __DIR__ или dirname(__FILE__) для PHP<5.3
Тогда все будет работать при любом SAPI, и не будет зависеть от настроек вебсервера.
Telez
А нужно ли вообще добавлять DOCUMENT_ROOT?
И что лучше: абсолютный путь или относительный?
У меня все работало через относительный путь, а когда добавил поддомен все упало.
killer8080
Цитата (Telez @ 21.03.2015 - 11:54)
И что лучше: абсолютный путь или относительный?

абсолютный путь работает всегда, относительный полагается на корректность текущей директории. При запуске в консоли текущая директория может не соответствовать той, откуда запущен скрипт.
inpost
killer8080
А можешь подробнее рассказать, когда это текущая директория может не соответствовать той, откуда запущен скрипт? То есть include 'file.php'; лежащий в одной папке не запустится? Не мог бы уточнить, в каком случае такое бывает?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Invis1ble
inpost
он же написал когда: когда из консоли запускаешь - рабочая директория считается текущей

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

killer8080
Цитата (inpost @ 21.03.2015 - 16:32)
А можешь подробнее рассказать, когда это текущая директория может не соответствовать той, откуда запущен скрипт?

в консоли
cd /home
php /home/user/test.php
текущей будет /home
Цитата (inpost @ 21.03.2015 - 16:32)
То есть include 'file.php'; лежащий в одной папке не запустится?

так запуститься, так нет include './file.php'
inpost
killer8080
То есть include 'file.php' запустится, а include './file.php' уже нет?

Invis1ble
Вот поэтому и уточняю, чтобы уж наверняка.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
killer8080
Цитата (inpost @ 21.03.2015 - 17:13)

То есть include 'file.php' запустится, а include './file.php' уже нет?

первый способ вызов относительно текущего файла, второй относительно текущей директории.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.