From: Шевелёв Денис <alma_tv_denis@mail.ru.>
Newsgroups:
Date: Mon, 6 Mar 2008 14:31:37 +0000 (UTC)
Subject: Особенности настройки Sybase-CT в связке с PHP и Apache на Linux 64 bit
Во время настройки конекта к Sybase v12.5,(RedHat ES-64bit) я столкнулся
со следующей проблемой:
1. При сборке PHP-4.7.7 со следующей конфигурацией:
при компиляции постоянно вылезает одна и та же ошибка:
/usr/bin/ld skiping unsuported /opt/sybase/OCS-12_5/lib/lsybtcl.so when
searching for -lsybtcl.
Данная ситуация повторилась и с библиотеками Sybase
-lct,-lcs,-lintl, и -lcomn.
Это означало только одно, что при установке 64bit Sybase клиента в папке
/opt/sybase/OCS-12_5/lib присутствуют два вида библиотек (32 bit и 64
bit вопрос...зачем?).
Выход из данной ситуации следовал только один. Просто поменять в файле
configure (PHP)
-lsybtcl, -lct, -lcs, -lcomn, -lintl
на
-lsybtcl64, -lct64, -lcs64, -lcomn64, -lintl64.
После такого издевательства над PHP всё скомпилировалось нормально.
[Wed Feb 27 22:40:22 2008] [error] [client 192.165.2.5] PHP Warning: sybase_connect()
[<a href='function.sybase-connect'>function.sybase-connect</a>]:
Sybase: Server message: t conversion is not available between client character set 'utf8'
and server character set 'iso_1'.n (severity 1702126433, procedure )
[Wed Feb 27 22:40:22 2008] [error] [client 192.165.2.5] PHP Warning: sybase_connect()
[<a href='function.sybase-connect'>function.sybase-connect</a>]:
Sybase: Server message: base context to 'pub'.n (severity 543450471, procedure )
[Wed Feb 27 22:40:22 2008] [error] [client 192.165.2.5] PHP Warning: sybase_select_db()
[<a href='function.sybase-select-db'>function.sybase-select-db</a>]:
Sybase: Server message: base context to 'pub'.n (severity 543450471, procedure )
при этих ошибках коннект к базе все же был, только не выбиралась БД.
Первая мысль была просто перезагрузить комп.
Но после перезагрузки и коннект к базе пропал:
[Wed Feb 27 23:25:41 2008] [error] [client 192.165.2.5] PHP Warning: sybase_connect()
[<a href='function.sybase-connect'>function.sybase-connect</a>]:
Sybase: Unable to allocate connection record in /doc/mydomain/index.php on line 10
Поискав в интернете данную ошибку я обнаружил, что рецептов решения
данной проблемы нет.
Вернее они предлагают внести в httpd.conf следующую строку:
SetEnv SYBASE /opt/sybsae
и дать права пользователя sybase к папке /opt/sybase
chmod sybase:sybase /opt/sybase
как первое так и второе совершенно бесполезно, да плюс к тому же еще
подвергается опасности Apache, включением модулей --enable-env, --enable-setenvif.
На официальном сайте PHP просто посоветовали поставить более новую версию PHP
PHP-5.2.5.
Я поставил эту версию, но снова пришлось исправлять файл configure на configure64,
но самое главное, коннекта к базе я так и не добился.
Снова вылазили теже самые ошибки, а после перезапуска я увидел знакомую строку
в файле apache_errol.log.
[Wed Feb 27 23:25:41 2008] [error] [client 192.165.2.5] PHP Warning: sybase_connect()
[<a href='function.sybase-connect'>function.sybase-connect</a>]:
Sybase: Unable to allocate connection record in /doc/mydomain/index.php on line 10
Как говорится......Отчаянию не было предела
С этого момента я взялся за Sybase серьезно...........
Видимо нынешняя реализация PHP не верно работает с протоколом TDS.
Краткая справка:
Microsoft SQL Server в качестве языка запросов использует версию SQL,
получившую название Transact-SQL (сокращённо T-SQL),
являющуюся реализацией SQL-92 (стандарт ISO для SQL) с множественными расширениями.
T-SQL позволяет использовать дополнительный синтаксис для хранимых процедур
и обеспечивает поддержку транзакций (взаимодействие базы данных с управляющим приложением).
Microsoft SQL Server и Sybase ASE для взаимодействия с сетью используют протокол уровня
приложения под названием Tabular Data Stream (TDS, протокол передачи табличных данных).
Протокол TDS также был реализован в проекте FreeTDS с целью обеспечить различным приложениям
возможность взаимодействия с базами данных Microsoft SQL Server и Sybase.
С сайта http://www.freetds.org был стянут дистрибутив для работы с Sybase.
после компиляции и установки.
Do Not Use TDS version 4.2 to connect to Sybase 12.5. Please!
While we don't like to put the bad news first, neither do we want you to
hurt your server. We know that our implementation of TDS 4.2 gives
Sybase 12.5 a bad case of heartburn. In short: it crashes the server.
We don't know what it is about our version of TDS 4.2 that Sybase 12.5
doesn't like, and we'd like to figure it out eventually. But in the
meanwhile, until we can find the problem and fix it, please don't use
that combination. Unless you want to help us test it, that is.
FreeTDS 0.63 works fine with Sybase 12.5 if you use TDS version 5.0.
If you are using Sybase 12.5 and anything above is not clear to you,
please see the User Guide. If it is still not clear after that, please
write to the FreeTDS mailing list. We'd rather answer your questions
while your server is still running.
Thank you. We return now to your regularly scheduled README, already in
progress.
New in this version
иногда полезно читать README.
Далее в .bash_profile я прописал следующие переменные окружения:
компиляция и установка происходит без проблем.......
Устанавливаю опции в файле freetds.conf
[global]
# TDS protocol version
tds version = 4.2
[SYBASE]
host = 82.85.133.35 //или ваш любой хост где крутится база Sybase
port = 5000
tds version = 5.0 //не забываем про гневное предупреждение........
вобще ничего не работает...Даже логов ошибок нет.
просто белый лист в Internet Explorer вместо странички..
Предположение было одно....Библиотека lct в freetds не работает под 64bit-ную платформу
или еще не написана (на 32bit не пробовал).
Ну что......."Подумал я"
Будем обходить эти проблемы с помощью старого доброго ODBC.
Краткая справка:
Microsoft SQL Server и Sybase
также поддерживает Open Database Connectivity (ODBC) — интерфейс взаимодействия
приложений с СУБД.
Для начала я снес 64bit клиента Sybase (лишних дырок нам не надо).
И freeTDS, зачем.... объясню потом.
Затем переустановил Apache 2.2.6 со следующей конфигурацией:
Далее с помощью unixODBC manager /usr/local/odbcinst
(если его нет.....то нужно его установить с http://www.unixODBC.org)
добавляем этот драйвер в систему
Если всё сделано правильно то ошибок я не заметил
и получил устойчивый коннект к базе
Причем в файле odbc.ini можно добавлять сколько угодно алиасов с разными базами.
FreeTD ODBC драйвер работает как с Sybase так и с MSSQL.
Необходимость написания этой статьтьи обуславливалась недостаточной информацией
и нехотением официальных разработчиков PHP исправлять данные ошибки.
C уважением !
Шевелёв Денис.
1340 Прочтений • [Особенности настройки Sybase-CT в связке с PHP и Apache на Linux 64 bit (odbc php sybase linux)] [08.05.2012] [Комментариев: 0]