GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Базовая настройка SQUID(114466)
Простая и эффективная система подсчета трафика в ОС FreeBSD(50915)
Совместное использование прозрачного прокси-сервера (Squid) и биллинговой системы UTM(42092)
Настройка Squid(37721)
Настройка VPN и NetUP Radius сервера(35500)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Unix » Сказ про то, как я PHP на MSSQL женил и научил их на одинаковом русском разговаривать

Сказ про то, как я PHP на MSSQL женил и научил их на одинаковом русском разговаривать


Das-ich
das-ich@yandex.ru

Возникла недавно у меня в конторе потребность, чтобы сайт написанный на PHP, находящийся на FreeBSD, обращался к MSSQL и забирал от туда данные. И сайт и база написаны в вындовозной кодировке, это достаточно существенное замечание, т.к. если бы сайт был написан в родной и горячо любимой KOI8-R, то одной проблемой было бы меньше. Узнать при помощи чего можно совместить работу PHP и MSSQL оказалось достаточно простой задачей. Самым приемлемым и главное халявным программным продуктом оказалась библиотека FreeTDS. Взять ее можно отсюда http://www.freetds.org. Сборка и установка показалась по началу достаточно простым делом, так же как и собрать в месте с ней и Apache и PHP. Но вот именно с этого момента и начались проблемы.

С начала при прочтении мануала и настройки соответственно ему файла freetds.conf не дало не каких результатов. PHP как не забирал данные с базы так и не хотел этого делать. После перелопачивания всего русскоязычного инета и перехода на англоязычные сайты, т.к. оказалось, что попытка найти на русском языке хоть какие-то внятные инструкции на этот счет, свелась к одной статье описывающую настройку более старой версии FreeTDS, что абсолютно не способствовало улучшению ситуации, мне все же удалось найти описание правильных настроек файла freetds.conf. После чего PHP стал нормально обращаться к MSSQL, но все еще на Вы, потому что сразу появилась другая проблема. А проблема была в кодировках (на этом месте я предлагаю дружно вспомнить дядю Била и сказать ему большое <спасибо>). Данные из базы почти начисто отказывались отображаться по-русски, показывая вместо себя вопросительные знаки. После более тщательного прочтения мануала по FreeTDS на их родном сайте я обнаружил, что для перекодирования текста она пользуется библиотекой libiconv. После этого осталось пересобрать PHP с поддержкой этой же библиотеки, и проблема почти была решена. Почти потому что если бы сайт был написан в KOI8-R, то дальнейшие действия не пришлось производить, но так как у нас програмеры работают на вынде и соответственно у них все написано в 1251, то Apache все это перекодировал в двух разных кодировках и получалось, что часть документа все время не читалась. Пришлось опять брать бубен и читать, читать, читать. В результате я где-то прочел, что нужно прописать напрямую Apache что б он использовал вындовую кодировку. И после всех этих манипуляций все заработало нормально.

Ну, со вступительной частью вроде закончил, теперь просто распишу, что и как. С начала собираем FreeTDS . Версия FreeTDS 0.61 - последняя на время написания этого документа. Это делается достаточно просто:

./configure -with-tdsver=8.0 (у нас просто MSSQL восьмой версии, а так можно и другой)
make
make install 

Установку Apache и PHP я не буду подробно описывать, благо этой документации в рунете много, а просто напишу необходимые для наших целей параметры. И так для PHP помимо прочих опций нужно добавить:

--with-mssql=/usr/local (здесь путь до директории куда был установлен FreeTDS)
--with-iconv (для поддержки перекодировки текста)

И потом можно устанавливать. Apache собирается просто с поддержкой PHP.

После этого можно настраивать FreeTDS. В файле freetds.conf прописываем:

[global]
        tds version = 8.0
        initial block size = 512
        swap broken dates = no
        swap broken money = no
        try server login = yes   у меня используется аутентификация на сервере
        try domain login = no   а не на домене
        cross domain login = no
        text size = 64512

[mssql]

host = (здесь пишется ip вашего компьютера не котором стоит FreeTDS, если на нем два и более 
       интерефейса, то пишется ip локальной сети)
port = 1433 (стандартный порт MSSQL)
tds version = 8.0

На этом с настройкой FreeTDS покончено.

Осталось прописать только один параметр в настройках Apache. Не забудьте перед этим поставить локаль CP1251, так как по умолчанию с FreeBSD она не идет.
В файле apachectl пишем:

LANG=ru_RU.CP1251; export LANG LC_ALL=ru_RU.CP1251; export LC_ALL 

Этим мы привязываем локаль CP1251 к Apache для нормальной перекодировки. И все можем запускать и проверять - все должно работать.

Дополнение - Адаптация для Linux

 
20.12.2003
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.