The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Особенности настройки Sybase-CT в связке с PHP и Apache на Linux 64 bit (odbc php sybase linux)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: odbc, php, sybase, linux,  (найти похожие документы)
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 со следующей конфигурацией: [root@myhost php-4.77]#./configure --prefix=/usr/local/apache2/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/lib/mysql --with-config-file-path=/usr/local/apache2/php --with-interbase=/opt/firebird/lib --with-sybase-ct=/opt/sybase/OCS-12_5 --enable-bcmath --enable-calendar --enable-ctype --enable-exif --enable-ftp --enable-trans-sid --enable-shmop --enable-sockets --enable-sysvsem --enable-sysvshm --enable-wddx при компиляции постоянно вылезает одна и та же ошибка: /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 всё скомпилировалось нормально. Интересное было потом............... При самой первой проверке: <? $link = sybase_connect("SYB" ,"abra" ,"abra")or die("Could not connect!"); sybase_select_db("pub"); ?> в apache_errol.log я обнаружил следующие ошибки [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. после компиляции и установки. [root@myhost freetds-0.63]#./configure --prefix=/usr/local/freetds --with-tdsver=5.0 версия TDS 5.0 была выбрана после гневного замечания разработчиков в README ************************************
  • Warning regarding Sybase 12.5! ** ************************************ 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 я прописал следующие переменные окружения: SYBASE="/usr/local/freetds" LD_LIBRARY_PATH="/usr/local/freetds/lib":$LD_LIBRARY_PATH LC_ALL=default PATH="/usr/local/freetds/bin":$PATH DSQUERY=SYBASE export SYBASE LD_LIBRARY_PATH LC_ALL PATH DSQUERY после этого я собираю PHP-4.7.7 в следующей конфигурации: [root@myhost php-4.77]#./configure --prefix=/usr/local/apache2/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/lib/mysql --with-config-file-path=/usr/local/apache2/php --with-interbase=/opt/firebird/lib --with-sybase-ct=/usr/local/freetds --enable-bcmath --enable-calendar --enable-ctype --enable-exif --enable-ftp --enable-trans-sid --enable-shmop --enable-sockets --enable-sysvsem --enable-sysvshm --enable-wddx компиляция и установка происходит без проблем....... Устанавливаю опции в файле freetds.conf [global] # TDS protocol version tds version = 4.2 [SYBASE] host = 82.85.133.35 //или ваш любой хост где крутится база Sybase port = 5000 tds version = 5.0 //не забываем про гневное предупреждение........ Перезагружаю сервисы..........и чтоже......... <? $link = sybase_connect("SYBASE" ,"abra" ,"abra")or die("Could not connect!"); sybase_select_db("pub"); ?> вобще ничего не работает...Даже логов ошибок нет. просто белый лист в Internet Explorer вместо странички.. Предположение было одно....Библиотека lct в freetds не работает под 64bit-ную платформу или еще не написана (на 32bit не пробовал). Ну что......."Подумал я" Будем обходить эти проблемы с помощью старого доброго ODBC. Краткая справка: Microsoft SQL Server и Sybase также поддерживает Open Database Connectivity (ODBC) &#8212; интерфейс взаимодействия приложений с СУБД. Для начала я снес 64bit клиента Sybase (лишних дырок нам не надо). И freeTDS, зачем.... объясню потом. Затем переустановил Apache 2.2.6 со следующей конфигурацией: [root@myhost httpd-2.2.6]# ./configure --prefix=/usr/local/apache2 --with-mpm=prefork --disable-charset-lite --disable-include --disable-env --disable-setenvif --disable-status --disable-autoindex --disable-cgi --disable-negotiation --disable-imap --disable-actions --disable-userdir (в Apache тоже дыр не надо) переустановкой занялся потому как попробовал выше изложенные примеры. На сайте http://www.iodbc.org/ забираем дистрибутив libiodbc Распаковываем: tar -zxvf libiodbc-3.25.6.tar.gz Устанавливаем: [root@myhost libodbc-3.25.6]# ./configure --with-iodbc-inidir=/etc make&&make install Данная оция --with-iodbc-inidir=/etc говорит iODBC где искать ini файлы ODBC драйвера По умолчанию установка библиотек iODBC происходит в папку /usr/local Далее устанавливаем PHP с поддержкой iODBC: [root@myhost php-4.77]#./configure --prefix=/usr/local/apache2/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/lib/mysql --with-config-file-path=/usr/local/apache2/php --with-interbase=/opt/firebird/lib --with-iodbc=/usr/local --enable-bcmath --enable-calendar --enable-ctype --enable-exif --enable-ftp --enable-trans-sid --enable-shmop --enable-sockets --enable-sysvsem --enable-sysvshm --enable-wddx make&&make install Выбор версии PHP не случаен....Версия 5.2.5 не понимает теги <?, а понимает <?php просто нехотелось снова переверстывать сайт. Далее устанавливаем freetds для получения ODBC драйвера для Sybase: [root@myhost freetds-0.63]#./configure --prefix=/usr/local/freetds --with-tdsver=5.0 --with-iodbc=/usr/local make&&make install Опция --with-iodbc=/usr/local очень важна...без неё freetds не создает драйвер libtdsodbc.so совместимый с данной версией iODBC. Проверте: cd / find / -name libtdsodbc.so /usr/local/freetds/lib/libtdsodbc.so Далее создаем файл odbc.ini в /etc touch odbc.ini следующего содержания: ; ; odbc.ini ; [ODBC Data Sources] SYBASE = Sybase ODBC Server [SYBASE] Driver = /usr/local/freetds/lib/libtdsodbc.so Description = Sybase ODBC Server Trace = No Server = 2.5.33.5 //или ваш хост Database = pub Port = 5000 TDS_Version = 5.0 // не забываем для клиента Sybase 12.5 [Default] Driver = /usr/local/freetds/lib/libtdsodbc.so Далее с помощью unixODBC manager /usr/local/odbcinst (если его нет.....то нужно его установить с http://www.unixODBC.org) добавляем этот драйвер в систему #/usr/local/odbcinst -i -s SYBASE -f /etc/odbc.ini Ну вот и всё готово. С помощью примера проверяем наш коннект. <? $con = odbc_connect("SYBASE", "abra", "abra"); $rs2 = odbc_exec($con, "select * from MYTABLE"); odbc_result_all($rs2); odbc_close($con); ?> Если всё сделано правильно то ошибок я не заметил и получил устойчивый коннект к базе Причем в файле odbc.ini можно добавлять сколько угодно алиасов с разными базами. FreeTD ODBC драйвер работает как с Sybase так и с MSSQL. Необходимость написания этой статьтьи обуславливалась недостаточной информацией и нехотением официальных разработчиков PHP исправлять данные ошибки. C уважением ! Шевелёв Денис.

  • << Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

    Обсуждение [ RSS ]
  • 1, n1mb (?), 10:00, 08/03/2008 [ответить]  
  • +/
    Насчёт тэгов - это вы зря, см. опцию short_open_tag.
     
     
  • 2, Денис (??), 07:27, 11/03/2008 [^] [^^] [^^^] [ответить]  
  • +/
    Времени было мало............и работа проводилась ночью....
    Да и разбираться не хотелось........
    Просто сильно волновал вопрос.........почему используя стандартную библиотеку PHP Sybase-CT
    невозможно получить нормальный коннект к базе.
     

  • 3, Alexandr (??), 12:36, 30/05/2008 [ответить]  
  • +/
    аналогичная ситуация, в файле configure в окурат меняем -lsybtcl, -lct, -lcs, -lcomn, -lintl
    на -lsybtcl64, -lct64, -lcs64, -lcomn64, -lintl64.
    всё прекрасно собирается и работает!
     
  • 4, hexes (??), 13:43, 25/06/2010 [ответить]  
  • +/
    В исходных кодах модуля меняю в config.m4
    в районе 38-43 строк ct, cs, comn, intl на sybct, sybcs, sybcomm, sybintl и РНР компилится и работает отлично.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру