Настройка окружения, .htaccess + virtual hosts
Веб; 14-05-2007, 08:36Разрабатывая сайты веб программист неизбежно сталкивается с проблемами переноса своего чада на конечный хостинг. И чем быстрее, и безболезнен перенос тем больше времени и нервов у нас остается. И, правда, вы еще не сталкивались с ошибками, на хостинге, на которые тратили 3-4 часа? Не стоит…
Создание виртуального хоста
Я часто встречал веб программистов, которым лень разобраться с виртуальными хостами в апаче, мол работа кипит не до этого – в следующий раз. И новоиспеченный сайт создается в папочке /newsite/ главной директории апача с доступом http://localhost/newsite/. После этот программист тратит дополнительное время на перенос своего детища.
Создается вируальный хост всего за 3 минуты (если искать нужные файлы в тотале мышкой):
- Находим конфиг апача (httpd.conf) и вставляем туда такие строки
Обычно секция виртуальных хостов находится в самом низу конфига. Но в разных линуксячих сборках они могут быть вынесены в отдельные папки, что весьма удобно.- <VirtualHost subway>
- ServerAdmin zipo@some_domain.com
- DocumentRoot c:/inetpub/ap2www/subway
- ServerName subway
- ErrorLog c:/Inetpub/apache/logs/subway_error.log
- CustomLog c:/Inetpub/apache/logs/subway.log common
- </VirtualHost>
Где subway и будет нашим виртуальным хостом.
c:/inetpub/ap2www/subway – каталог для файлов нашего нового сайта. - Находим файлик hosts, для пользователей windows (c:\WINDOWS\system32\drivers\etc\hosts), пользователи линукса для поиска пользуют locate, ибо этот файл может находится где угодно

Вставляем туда:
127.0.0.1 subway - Перезапускаем apache и если пользуете IE, то его тоже.
Наш хост готов к использованию и откликается на http://subway/. Естественно это только для нашей машины, для большего идем на гугль.
Настройка окружения
Теперь нам нужно создать свое окружение и по максимуму изолироваться от внешних параметров хостинга. Делается это с помощью файлика .htaccess Все мои сайты работают со следующим содержанием .htaccess:
php_value magic_quotes_gpc 1 php_value register_globals 0 php_value mbstring.func_overload 6 php_value mbstring.internal_encoding UTF-8 php_value mbstring.http_output pass php_value mbstring.http_input pass php_value mbstring.encoding_translation 0 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .+ /index.php
php_value – инструкции по изменению параметров php, которые так же можно изменить в php.ini или функцией ini_set, правда не всегда это доступно.
Насильно отключаем register_globals, чего и вам искренне желаю, никогда не используйте эту порочность, ибо будут беды, причем много.
Делаем однообразное поведение с отбивкой слешами входящих данных (magic_quotes_gpc) - лучше включать. Ибо появление лишних слешей не так критично как SQL injection. В любом случае и то и другое – кривые руки или плохой сон, но никто от этого не застрахован и все мы ошибаемся. Дабы у Вас не возникало сомнений о том, почему я это тут пишу, вставлю сюда оригинальное решение супер монстров с моей прошлой работы:
function MagicQuote($str) { return $str; }
Вот, и используем эту функцию каждый раз, когда хотим делать вставки в SQL
Кодировка
Т.к. сайты я разрабатывал не только для Украины и России то я столкнулся с проблемой кодировок. Хотя нет, вру, я с ней не сталкивался, я с ней заранее разобрался. Думаю, вы уже не раз встречались со словами «Используйте UTF-8, ибо она спасет мир» - используйте, мир она, конечно, не спасет, но от проблем избавит.
И так, зачем все это? Очень просто я не раз делал сайты с различными комбинациями языков, к примеру, знаете ли вы кодировки которые, используют немцы? А знать хотите? Я тоже нет, и меня эта проблема минула. Когда вы разрабатываете сайт на нескольких языках, к примеру, на русском и немецком не думайте, что cp1251 для немецкого это правильно. Вы просто погрязните в проблемах использования нескольких кодировок на сайте. Дабы не заморачиваться на смене кодировок, а тем более хранении этого дела в БД используйте UTF-8.
Последующие строки .htaccess связаны, конечно же, с использованием кодировки UTF-8. UTF-8 – мультибайтовая кодировка, где для хранения 1 символа требуется 2 байта. Естественно с этим связаны определенные проблемы. К примеру, strlen – будет выдавать неправильную длину строки. Дабы все это дело вернуть на места свои разработчики PHP сделали модуль mbstring, в котором функции работы со строчками корректно ведут себя с мультибайтовыми кодировками. Но проблема состоит в том, что все эти новые функции имеют название отличное от стандартных аналогов: strlen – mb_strlen. Когда я переходил на использование UTF-8 желания лазить и заменять везде название функций у меня, конечно же, не возникло. Весьма скоро выяснилось, что если изменить параметр mbstring.func_overload, то мультибайтовый аналог функций накроет своих собратьев, и все проблемы сразу исчезнут.
Если ставить mbstring.func_overload в 6, то перекрываются все функции кроме mail. С ней связаны определенные проблемы при отсылки писем содержащих несколько частей. Дальше вы можете настроить различные варианты автоматической конвертации исходящий и входящих данных. Но я данной функциональностью не пользуюсь, потому как авто определение кодировки весьма сомнительное дело. Поэтому я устанавливаю внутреннюю кодировку в UTF-8, т.к. все данные внутри скрипта в этой кодировке и все остальные параметры – как пришло так и получаем.
В большинстве случаев все данные будут к вам приходить в кодировке, которую вы указали в HTTP заголовках и мета тегов браузера, если там UTF-8, то и данные придут в этой кодировке. Не забудьте переключить ваш редактор на использование UTF-8. БД тоже должна понимать, что общаетесь вы с ней в кодировке UTF-8. Для MySQL это делается командой "set names utf8;", которую можно посылать сразу же после соединения с БД. Тогда и БД вам будет отвечать в кодировке UTF-8, что не может не радовать.
mod_rewrite
Осталось самое малое – указать правила переадресации. Если вы не знаете, что это такое, то поищите в Интернете, по словам ЧПУ и прочитайте мою статью «Человеку понятный УРЛ (ЧПУ) и кириллица». На удивление в Интернете появились даже сервисы, которые генерят RewriteCond в зависимости от параметров которые вы передаете через GET. Линки на эти сервисы я давать не буду, это глупость и применимо это разве, что в латании какого либо готового решения и то, я этого тоже не поддержу.
Надеюсь, дойдя до этого места, вы уже в какой-то мере осведомились с ЧПУ. И так для реализации нужно перенаправить запросы на несуществующие материалы на какой-то обработчик:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .+ /index.php
Данные строки означают, что в случае если по запросу не обнаружен никакой файл или директория, то запрос перенаправляется в index.php.
В обработчике вы можете получить строку запроса пользователя:
$_SERVER['REQUEST_URI']
Разложить эту строку на параметры:
И дальше обрабатывать, как вам будет угодно.


























English
Русский
14-05-2007, 12:00
пользователи линукса для поиска пользуют locate, ибо этот файл может находится где угодно
ото написал - /etc/hosts он с linuxa.
Перезапускаем apache и если пользуете IE, то его тоже
/etc/init.d/apache reload и ничего не перезапускаем.
Знакомая строчечько ;)
Зачёт. Спорить с тобой не буду, ибо ты головастый, малаццо.
14-05-2007, 12:03
лови - http://flamber.ru/1175810400/photos/1179139752/
фикси
01-08-2007, 23:40
Пользователи *nix'ов пишут скрип, вроде
и не паряцца :-)
02-08-2007, 09:03
Не спорю, написать можно, что угодно. И не вижу я в этом приимуществ у никсов. Под виндой подобное тоже легко проделать. В любом случае спасиб за скрипт, люди будут благодарны
18-10-2007, 00:12
А не проще через Вебмин создать
08-02-2008, 12:32
Спасибо за полезную информацию.
15-04-2008, 16:20
что уже проще чем виртал хостс?
27-05-2008, 10:41
по-моему ничего
28-05-2008, 13:19
В принципе по тексту встречаются правильные мысли, но как-то всё суховато.
02-06-2008, 13:35
Неплохо в общем, хотя не узнал ни че нового
03-06-2008, 11:37
Все больше и больше и, как правило, это постоянно развивающиеся, серьезные проекты.
05-06-2008, 11:53
В любом случае, задача поставленная здесь, достаточно не проста
05-06-2008, 17:17
Tor Говорит:
28-05-2008, 13:19
В принципе по тексту встречаются правильные мысли, но как-то всё суховато.
Да, нада разбавить картинками с сиськами. А статья хорошая, зачёт.
27-09-2008, 21:40
Полезная статья.
Только для моего сайта добавление строки
php_value mbstring.internal_encoding UTF-8
в .htaccess не помогло. Выдает ошибку 500, Internal Server Error.
Посмотрел с phpinfo, у меня mbstring.internal_encoding установлена в ISO-8859-1.
Что посоветуете? Спасибо заранее.
23-11-2008, 11:30
если 5тый пхп установлен вместе с 4 то может быть Это
php_value mbstring.internal_encoding UTF-8
стоит заменить на
php5_value mbstring.internal_encoding UTF-8
а так статейка полезная наверно кому-то.
я вот про mbstring узнал=) раньше strlen при использованиее в юникоде юзал с иконвом в связке
function __strlen($str==null){
if (!$str) {return false;}
$str==iconv("UTF-8","cp1251",$str);
return strlen($str);
}
как то так=)