![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Вопрос такой. У меня есть структура файлов и каталогов (см. приаттаченый рисунок)
Ошибка которую я получаю выглядит так
Происходит эта ошибка оттого, что в logger.inc, будучи вложенным в file.php ищет global.inc относительно директории E:\www\root\files, а не E:\www\root\utils\logs В общем у меня вопрос, как нибудь можно научить php вкладывать файлы строго относительно того где они лежат, а не как были вложены? Что самое обидное мне не помогает даже set_include_path("E:\\www\\root\\utils\\logs") чтобы эта бестия "logger.inc" мог искать относительно своей диретории. Прилагаю архив с искомыми файлами для удобства эксперимента, так сказать. Присоединённый файл ( Кол-во скачиваний: 3 )
root.zip 1,01 Kb-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
текущий файл - константа __FILE__,
в logger.inc напиши $dir = dirname(__FILE__); и получишь свой путь. Дальше либо пиши require_once($dir . '/../hz.php'); либо сохрани путь в include_path ini_set('include_path', ini_get('include_path') . ':' . $dir); и дальше можно включать файл без указания этого пути, т.к. PHP просматривает папки,указанные в imclude_path. |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
flashaa, Большое спасибо! Этот способ действительно решает проблему
Но у меня все, же вопрос. Ситуация когда возникает многократная вложенность довольно тривиальна, и я бы не сказал, чтобы она возникала редко. Неужели, предложенный способ есть единственное решение? Неужели в PHP не предусмотрен человеческий способ решения подобной проблемы? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 6 Всего: 22 |
||||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
с тех пор как я стал все пути делать абсолютными, меня эта проблема не волнует
|
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Royan, никакой проблемы здесь нет. Есть простые правила работы с файловой системой.
Если ты позвонил приятелю домой по телефону, это не значит, что ты оказался у него дома ,и можешь достать из его холодильника бутылку пива. Сам-то ты у себя дома остался! Если ты вызвал какой-то файл для выполнения - это не значит, что ты оказался рядом с этим файлом. Ты остался там же, где был. Вот и все.
+100 |
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
И чем тут хвастаться? Переместил сайт в другую папку и ничего не работает. Я обычно делаю проекты центрированными по запрашиваемому скрипту. Т.е. есть у меня index.php, из него вызывается конфиг. скрипт, который просчитывает все пути. WEB = dirname($_SERVER['SCRIPT_FILENAME']) . '/'; // папка со скриптом define('LIB', WEB . '/lib/'); define('INC', WEB . '/lib/inc/scripts/'); define('CRON', WEB . '/../cron'); Т.е. проблема возникнет, если внутри проекта файлы перемешивать, а если целиком перетаскивать - будет шикарно работать. Это сообщение отредактировал(а) flashaa - 17.12.2007, 11:13 |
|||
|
||||
| bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
многоуважаемый Флаша, абсолютные пути можно начинать с объявленной переменной
изменение всех путей при перемещении сайта в другую папку занимает не больше пяти секунд |
||||
|
|||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
||||
|
||||
| Royan |
|
||||||||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Vaulter, Спасибо, но эта функция полезна при работе с классами, а у меня речь идет о файлах
Feldmarschall, Пожалуйста, старайтесь говорить по сути из всех слов, что вы сказали ни одно не приблизило вопрос к ответу.
Если я правильно понял вы объявляете константы для конкретных директорий причем каждая константа содержит в себе абсолютный путь... но тогда необходим файл, который будет вложен во все остальные файлы, чтобы эти константы были доступны везде. В моем случае таким файлом как раз и является global.inc и именно невозможность его вложения является основной проблемой. Вывод, как я понимаю такой. Все global.inc обязаны вкладываться только по абсолютному пути, тогда станет возможным соорудить почти хакерский прием высчитывания относительного пути наподобие приведенного ниже и поместить его соответственно в global.inc
Тогда секция подключаемых фалов примет примерно такой вид:
Думаю этот вопрос заслуживает своего места в F.A.Q'е Это сообщение отредактировал(а) Royan - 17.12.2007, 13:50 -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
||||||||
|
|||||||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
не знаю, институтов не заканчивал, просто работаю web-программером, согласен не долго, а потому вопрос почему? |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Действительно это наиболее правильный способ, я подумал о hardcoded путях. Добавлено через 11 минут и 7 секунд bars80080, Тут ничего хитрого нет. Во-первых, относительные пути, оставаясь константами, обладают известной динамикой (их не нужно менять при изменении положения проекта). Во-вторых, даже в довольно гибком подходе, описанном вами, сначала происходит чтение переменных из массива, потом происходит конкатенация (до сих пор не нашел эквивалента в русском языке) строк и только после этого происходит обращение к файлу. Вам кажется это пренебрежимо малой операцией? Да так и есть пока проект не достигает определенных размеров с огромным обращением к страницам, на каждой из которых прежде чем отработает основной код отработают подобного рода вычисления абсолютных путей и сервер (железо которого очень часто впору подключать к паровой машине а не к розетке) будет постепенно околевать от нагрузки. -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
я, конечно, извиняюсь, если где ошибусь, могу только предполагать,
но: переменная начала пути вычисляется только один раз при загрузке конфигурации, далее при подключении, она просто используется, конкатенация (по-русски, наверное, слипание больше подойдёт) происходит каждый раз где встречается: include($BASE_DIR.'file.php'); или fopen($BASE_DIR.'file.txt');, но разве вы не делаете то же самое require_once $relativePath. 'foo1.inc'; // rel path ? мало того, объёмы ваших вычислений на мой взгляд больше
если не секрет, насколько часто в месяц вы собираетесь менять положение своего проекта? я меняю только раз - при перемещении с локального хостинга на инетовский если бы использо вались " вместо ' загрузка ресурсов была бы больше |
|||
|
||||
| Feldmarschall |
|
|||
|
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: 22 Всего: 32 |
Мне кажется, проблема производительности конкатенации переменных в этой теме несколько
|
|||
|
||||
| Royan |
|
||||||||||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Ради интереса глянул как эта проблема решается на каком-нибудь популярном форумном движке. Выбрал не глядя - http://www.mybboard.net/downloads
В файле <root_dir>/install/update.php Нашел такой код
Почти тоже самое, что написал flashaa Добавлено @ 15:00
Хорошая мысль
Ворд ошибки не показывает. Может это слово уже обрусело?
Делаю! И объемы несомненно больше я и не претендовал на быстродействие
Чувствую что тема избитая можно просто ссылку почитать о чем идет речь? Это сообщение отредактировал(а) Royan - 17.12.2007, 17:29 -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
||||||||||
|
|||||||||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
да нет, просто люблю спорить
я предложение, вы мне в ответ так меня и не убедили единственный плюс, который я сумел увидеть в вашем методе, это если мы подключаем какой-нибудь модуль настроенный в своих относительных путях но и это не решение по опыту стягивания скриптов с инета везде разные методы образования путей, а если делаешь их сам, то по-моему изначально надо централизовать всё управление в одно место, впоследствии прикрепить этот модуль к цмс - один шаг |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |