Мы используем cookie-файлы
Для оптимизации работы нашего сайта мы используем cookie-файлы. Продолжая использовать сайт, Вы соглашаетесь с использованием cookie-файлов.
Панель управления
  • Русский
  • Українська
  • UAH
  • USD
  • RUB
  • EUR
  • +38(044) 392-74-33  Киев
  • +38(057) 728-39-00  Харьков
  • +38(056) 794-38-31  Днепр
  • +38(032) 229-58-93  Львов
  • +38(048) 738-57-70  Одесса
  • +38(093) 170-15-42  Life
  • +38(067) 400-88-44  Киевстар
  • +38(095) 630-90-82  Vodafone
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

Хостинг. Автоопределение файловых путей


Rock-N-Roll
7 лет
0
Автоопределение файловых путей

При написании больших скриптов (состоящих из нескольких можно сказать независимых модулей) у меня часто возникает гимор с файловыми путями. То папку решил переименовать, то вообще изменил структуру каталогов - и начинается выискивание в скриптах мест, где это "вылезает боком" и делаются соответствующие изменения. Когда меня это достало - я придумал код для автоматического определения путей (для php и браузера). Но тут оказалась еще одна лажа - на хостинге работает, а на WAMP'е - нет (для браузерных путей). Дело в том, что в начале пути оказывается лишний слеш (вернее его не хватает :). Пришлось дописать пару "извращенских" строк, т.к. я не уверен, появляется ли этот слеш еще где-то, кроме как у меня :)

Rock-N-Roll
7 лет
0

Фрагмент файловой структуры (путь "dir1/dir2/dir3" - величина переменная и непредсказуемая :)
......................................................................
......................................................................
[dir1]..............................................................
...|..................................................................
...|--- [dir2].......................................................
...........|..........................................................
...........|--- [dir3]...............................................
...................|..................................................
...................|--- [tmpl]......................................
...................|.......|...........................................
...................|.......|--- [css]................................
...................|.......|.......|...................................
...................|.......|.......|--- style.css..................
...................|.......|...........................................
...................|.......|--- [img]...............................
...................|.......|.......|...................................
...................|.......|.......|--- icon-16x16.png.........
...................|.......|...........................................
...................|.......|--- index.html........................
...................|...................................................
...................|--- index.php.................................
.......................................................................
Файл index.php - одна из частей большого скрипта, index.html - его шаблон, style.css - стили шаблона, icon-16x16.png - один из рисунков.
Смысл в том, чтобы автоматически определять пути до файла index.php, т.к. структура каталогов в процессе разработки может меняться.

Rock-N-Roll
7 лет
0

Собственно код автоматического определения путей (находится в начале файла index.php каждого модуля):
$path['php'] = dirname(__FILE__);
$path['brw'] = str_replace('\\', '/', $path['php']);
$path['brw'] = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path['brw']);
$path['brw'] = '###'.$path['brw'];
$path['brw'] = str_replace('###/', '/', $path['brw']);
$path['brw'] = str_replace('###', '/', $path['brw']);

Rock-N-Roll
7 лет
0

Теперь подробнее с описанием:
// Определяем php-путь (для сервера)
// Файловые пути в разных ОС сильно отличаются
// ОС (nix): /home/account/domain.zone/www/dir1/dir2/dir3
// ОС (win): c:\wamp\www\dir1\dir2\dir3
$path['php'] = dirname(__FILE__);
// Определяем brw-путь (для браузера)
// Заменяем символы "\" на "/"
// ОС (nix): /home/account/domain.zone/www/dir1/dir2/dir3
// ОС (win): c:\wamp\www\dir1\dir2\dir3
$path['brw'] = str_replace('\\', '/', $path['php']);
// ОС (nix): /home/account/domain.zone/www/dir1/dir2/dir3
// ОС (win): c:/wamp/www/dir1/dir2/dir3

// Отсекаем серверную часть пути
// ОС (nix): /home/account/domain.zone/www/dir1/dir2/dir3
// ОС (win): c:/wamp/www/dir1/dir2/dir3
$path['brw'] = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path['brw']);
// ОС (nix): /dir1/dir2/dir3
// ОС (win): dir1/dir2/dir3

// Добавляем в начало пути символ "###"
// ОС (nix): /dir1/dir2/dir3
// ОС (win): dir1/dir2/dir3
$path['brw'] = '###'.$path['brw'];
// ОС (nix): ###/dir1/dir2/dir3
// ОС (win): ###dir1/dir2/dir3

// Заменяем символ "###/" символом "/"
// ОС (nix): ###/dir1/dir2/dir3
// ОС (win): ###dir1/dir2/dir3
$path['brw'] = str_replace('###/', '/', $path['brw']);
// ОС (nix): /dir1/dir2/dir3
// ОС (win): ###dir1/dir2/dir3

// Заменяем символ "###" символом "/"
// ОС (nix): /dir1/dir2/dir3
// ОС (win): ###dir1/dir2/dir3
$path['brw'] = str_replace('###', '/', $path['brw']);
// ОС (nix): /dir1/dir2/dir3
// ОС (win): /dir1/dir2/dir3
Получили одинаковые пути для браузера в разных ОС.

Rock-N-Roll
7 лет
0

Вот собственно зачем мне это все нужно:
// Выводим стили
echo '<link href="'.$path['brw'].'/tmpl/css/style.css" rel="stylesheet" type="text/css" />';
// Обрабатываем шаблон
$tmpl = file_get_contents($path['php'].'/tmpl/index.html');
$tmpl = str_replace('{path}', $path['brw'], $tmpl);
$tmpl = str_replace('{var1}', $var1, $tmpl);
$tmpl = str_replace('{var2}', $var2, $tmpl);
$tmpl = str_replace('{var3}', $var3, $tmpl);
echo $tmpl;

Rock-N-Roll
7 лет
0

Но проще всего это проверить вот так:
echo '<img src="'.$path['brw'].'/tmpl/img/icon-16x16.png">';

Rock-N-Roll
7 лет
0

Т.о. скрипт, написанный на локальном сервере (WAMP, Windows) без проблем работает на хостинге и наоборот.
ВОПРОС: будет ли мой код работать на выденном сервере с установленной ОС Windows?

rudenko
7 лет
0

Я думаю для скрипта не будет разницы на каком windows ему работать.

rudenko
7 лет
0

Обратите внимание:
1. Для того, что б указывать правильные слеши в стиле windows или unix есть константа DIRECTORY_SEPARATOR.
2. Для того, что б убрать начальный и конечный слеш можно использовать trim($path, DIRECTORY_SEPARATOR);
$path['php'] = dirname(__FILE__);
$path['brw'] = str_replace('\\', '/', $path['php']);
$path['brw'] = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path['brw']);
$path['brw'] = '###'.$path['brw'];
$path['brw'] = str_replace('###/', '/', $path['brw']);
$path['brw'] = str_replace('###', '/', $path['brw']);

Rock-N-Roll
7 лет
0

Спасибо за "trim" :)
$path['php'] = dirname(__FILE__);
$path['brw'] = str_replace('\\', '/', $path['php']);
$path['brw'] = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path['brw']);
$path['brw'] = '/'.trim($path['brw'], '/');
Кто придумает еще короче вариант?

Участвовать в общении на этом форуме могут только зарегистрированные пользователи.