Акция!  Домен 34 грн, домен 55 грн, домен  - 200 грн домен  - 65 грн, домен  - 99 грн, домен  - 56 грн!, домен  - 425 грн!
Мы используем cookie-файлы
Для оптимизации работы нашего сайта мы используем cookie-файлы. Продолжая использовать сайт, Вы соглашаетесь с использованием cookie-файлов.
  • RUB
  • USD
  • EUR
  • UAH
Чат техподдержки
Вы являетесь клиентом?
  • +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
6 лет
хостинг: есть
домен: есть
Автоопределение файловых путей
При написании больших скриптов (состоящих из нескольких можно сказать независимых модулей) у меня часто возникает гимор с файловыми путями. То папку решил переименовать, то вообще изменил структуру каталогов - и начинается выискивание в скриптах мест, где это "вылезает боком" и делаются соответствующие изменения. Когда меня это достало - я придумал код для автоматического определения путей (для php и браузера). Но тут оказалась еще одна лажа - на хостинге работает, а на WAMP'е - нет (для браузерных путей). Дело в том, что в начале пути оказывается лишний слеш (вернее его не хватает :). Пришлось дописать пару "извращенских" строк, т.к. я не уверен, появляется ли этот слеш еще где-то, кроме как у меня :)
Rock-N-Roll
6 лет
хостинг: есть
домен: есть
Фрагмент файловой структуры (путь "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
6 лет
хостинг: есть
домен: есть
Собственно код автоматического определения путей (находится в начале файла 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
6 лет
хостинг: есть
домен: есть
Теперь подробнее с описанием:

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

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

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

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

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

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

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

Тема закрыта по истечению срока давности.