Мы используем 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  MTC
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

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

Форумы Хостинг Автоопределение файловых путей
Rock-N-Roll
10.07.2013
хостинг: есть
домен: есть
Автоопределение файловых путей
При написании больших скриптов (состоящих из нескольких можно сказать независимых модулей) у меня часто возникает гимор с файловыми путями. То папку решил переименовать, то вообще изменил структуру каталогов - и начинается выискивание в скриптах мест, где это "вылезает боком" и делаются соответствующие изменения. Когда меня это достало - я придумал код для автоматического определения путей (для php и браузера). Но тут оказалась еще одна лажа - на хостинге работает, а на WAMP'е - нет (для браузерных путей). Дело в том, что в начале пути оказывается лишний слеш (вернее его не хватает :). Пришлось дописать пару "извращенских" строк, т.к. я не уверен, появляется ли этот слеш еще где-то, кроме как у меня :)
Rock-N-Roll
10.07.2013
хостинг: есть
домен: есть
Фрагмент файловой структуры (путь "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
10.07.2013
хостинг: есть
домен: есть
Собственно код автоматического определения путей (находится в начале файла 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
10.07.2013
хостинг: есть
домен: есть
Теперь подробнее с описанием:

// Определяем 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
10.07.2013
хостинг: есть
домен: есть
Вот собственно зачем мне это все нужно:

// Выводим стили

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
10.07.2013
хостинг: есть
домен: есть
Но проще всего это проверить вот так:

echo '<img src="'.$path['brw'].'/tmpl/img/icon-16x16.png">';
Rock-N-Roll
10.07.2013
хостинг: есть
домен: есть
Т.о. скрипт, написанный на локальном сервере (WAMP, Windows) без проблем работает на хостинге и наоборот.

ВОПРОС: будет ли мой код работать на выденном сервере с установленной ОС Windows?
Илья
10.07.2013
хостинг: есть
домен: есть
Я думаю для скрипта не будет разницы на каком windows ему работать.
Илья
10.07.2013
хостинг: есть
домен: есть
Обратите внимание:
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
11.07.2013
хостинг: есть
домен: есть
Спасибо за "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'], '/');

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

Если вы уже зарегистрированы Вам необходимо войти на форум.

Тема закрыта по истечению срока давности.
Горячая линия
(044)
392 74 33
другие города