Керування файлами cookie, які використовуються для реклами, таких як персоналізація реклами, ремаркетинг і аналіз ефективності реклами.
|
Rock-N-Roll
10.07.2013 22:06
0
|
При написании больших скриптов (состоящих из нескольких можно сказать независимых модулей) у меня часто возникает гимор с файловыми путями. То папку решил переименовать, то вообще изменил структуру каталогов - и начинается выискивание в скриптах мест, где это "вылезает боком" и делаются соответствующие изменения. Когда меня это достало - я придумал код для автоматического определения путей (для php и браузера). Но тут оказалась еще одна лажа - на хостинге работает, а на WAMP'е - нет (для браузерных путей). Дело в том, что в начале пути оказывается лишний слеш (вернее его не хватает :). Пришлось дописать пару "извращенских" строк, т.к. я не уверен, появляется ли этот слеш еще где-то, кроме как у меня :)
|
|
Rock-N-Roll
10.07.2013 22:07
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
10.07.2013 22:07
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
10.07.2013 22:08
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
10.07.2013 22:08
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
10.07.2013 22:08
0
|
Но проще всего это проверить вот так:
echo '<img src="'.$path['brw'].'/tmpl/img/icon-16x16.png">'; |
|
Rock-N-Roll
10.07.2013 22:08
0
|
Т.о. скрипт, написанный на локальном сервере (WAMP, Windows) без проблем работает на хостинге и наоборот.
ВОПРОС: будет ли мой код работать на выденном сервере с установленной ОС Windows? |
|
rudenko
10.07.2013 23:56
0
|
Я думаю для скрипта не будет разницы на каком windows ему работать.
|
|
rudenko
10.07.2013 23:58
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
11.07.2013 18:34
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'], '/'); Кто придумает еще короче вариант? |
Тема закрита.