Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> WWW —> php5-oci8

Работаем с oracle8-client + php5-oci8

Автор: dvg_lab.


Есть два способа работать из FreeBSD с оракловым сервером, это поставить нативного ораклового клиента oracle8-client, либо линуксовую версию  linux-oracle-instantclient-basic соотвтетсвенно через линуксулятор. По ряду причин у меня задача была работать с нативным клиентом. Рассморим именно этот вариант установки.

Проблема настройки ораклового клиента под фрей чаще всего утыкается в segmentation fault (core dumped) и слабого понимания того, что с этим делать. С проблемой сталкиваются фактически все в разных комбинациях, основная проблема в том что драйвер выглядит сырым и при малейшей неточности в конфигурации откладывает корку, но есть вариант заставить его нормально работать и в CLI режиме и апачевским модулем.

Итак необходимо установить из портов database/oracle8-client и database/php5-oci8.

Для того чтобы драйвер не выпадал в кору и не утаскивал за собой php и apache2 нужно пропатчить сам php. Дифф для Zend/zend_API.c

--- zend_API.c.orig     2008-11-20 10:53:47.000000000 +0300
+++ zend_API.c  2008-11-20 10:53:59.000000000 +0300
@@ -1939,9 +1939,9 @@

 #if HAVE_LIBDL || defined(HAVE_MACH_O_DYLD_H)
 #if !(defined(NETWARE) && defined(APACHE_1_BUILD))
-       if (module->handle) {
-               DL_UNLOAD(module->handle);
-       }
+//     if (module->handle) {
+//             DL_UNLOAD(module->handle);
+//     }
 #endif
 #endif
 }

Подробности можно посмотреть здесь

обязательно установить переменную окружения иначе получите core dumped с неверной инструкцией.
 setenv ORACLE_HOME /usr/local/oracle8-client

Ее также можно установить в файле /etc/login.conf в разделе default
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES, ORACLE_HOME=/usr/local/oracle8-client,NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251:\

обращаю внимание на NLS_LANG, если вам не нужны проблемы с кодировками.

не забываем потом
# cap_mkdb login.conf

Эксперименты показали что устанавливать переменные окружения через php функцию putenv() бесполезно, несмотря на то что переменная устанавливается. Но видимо есть какие-то проблемы в самом oci драйвере с чтением таким образом установленного окружения.

Ну и конечно необходимо прописать настройки подключения в файлах sqlnet.ora и tnsnames.ora. Первый скорее всего не нужен.
# cat /usr/local/oracle8-client/network/admin/sqlnet.ora |grep -v "^#"
NAMES.DIRECTORY_PATH= (TNSNAMES)

# cat /usr/local/oracle8-client/network/admin/tnsnames.ora

# TNSNAMES.ORA Network Configuration File: /home/oracle/OraHome/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ALFA2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.222.222)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = NEWSID)
    )
  )

После установки патча и переменных окружения php перестает падать и нормально пашет как в CLI режиме так и модулем к апачу.



размещено: 2008-11-22,
последнее обновление: 2008-11-22,
автор: dvg_lab


abigor, 2008-11-24 в 2:51:21

-— zend_API.c.orig     2008-11-20 10:53:47.000000000 +0300
+++ zend_API.c  2008-11-20 10:53:59.000000000 +0300
@@ -1939,9 +1939,9 @@

#if HAVE_LIBDL || defined(HAVE_MACH_O_DYLD_H)
#if !(defined(NETWARE) && defined(APACHE_1_BUILD))
-       if (module->handle) {
-               DL_UNLOAD(module->handle);
-       }

+//     if (module->handle) {
+//             DL_UNLOAD(module->handle);
+//     }

#endif
#endif
}
Мне показалось, или оно одинаковое?

sp, 2008-11-24 в 8:38:54

Показалось. Кое-что закомментировано :)



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0817 секунд
Из них PHP: 65%; SQL: 35%; Число SQL-запросов: 77 шт.
Исходный размер: 16375; Сжатая: 5377