Статья: Работаем с oracle8-client + php5-oci8

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2008-11-21 18:53:25

Есть два способа работать из 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
 }
Подробности можно посмотреть здесь http://www.nabble.com/Re%3A-PHP5-%2B-oc ... 49270.html

обязательно установить переменную окружения иначе получите core dumped с неверной инструкцией.

Код: Выделить всё

setenv ORACLE_HOME /usr/local/oracle8-client
Ее также можно установить в файле /etc/login.conf

Код: Выделить всё

: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 режиме так и модулем к апачу.
FreeBSD the power to serve.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение m0ps » 2008-11-22 0:26:17

интересно, спасибо...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Alex Keda » 2008-11-22 13:38:25

на сайт клади
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2008-11-22 14:05:04

lissyara писал(а):на сайт клади
положил в раздел www.

ЗЫ: принимаю поздравления с первой официальной статьей :)
FreeBSD the power to serve.

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение m0ps » 2008-11-22 21:35:57

поздравляем ;)

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Alex Keda » 2008-11-22 21:51:55

линк?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2008-11-22 22:17:27

lissyara писал(а):линк?
сорри, думал у тебя там видно все
http://www.lissyara.su/?id=1812
FreeBSD the power to serve.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Alex Keda » 2008-11-22 22:32:31

dvg_lab писал(а):
lissyara писал(а):линк?
сорри, думал у тебя там видно все
http://www.lissyara.su/?id=1812
я щас под вистой =((
тут нифига не видно =((
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Alex Keda » 2008-11-22 22:33:21

Код: Выделить всё

:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES,ORACLE_HOME=/usr/local/oracle8-client,NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251:\
либо разбивай на две, либо юзай [log]
слишком длинная
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Alex Keda » 2008-11-22 22:38:27

впрочем - я сам поправил и отправил в продакшен
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2008-11-23 10:53:09

lissyara писал(а):
dvg_lab писал(а): сорри, думал у тебя там видно все
http://www.lissyara.su/?id=1812
я щас под вистой =((
тут нифига не видно =((
С вистой это ты погорячился :)
Про [log] понял.

ps: кстати забыл добавить что сервер оракловый версии 9.2
FreeBSD the power to serve.

Гость
проходил мимо

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Гость » 2009-03-06 15:00:01

Все делал по статье автора http://www.lissyara.su/?id=1812

Не работает
Кое что добавил...в надеже что заработает

Код: Выделить всё

# setenv

NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
TNS_ADMIN=/usr/local/etc/oracle
LD_LIBRARY_PATH=/usr/local/oracle8-client/lib
ORACLE_HOME=/usr/local/oracle8-client
cap_mkdb login.conf - делал

Вообщем все по статье...результат:

Код: Выделить всё

oci8
OCI8 Support  enabled  
Version  1.2.5  
Revision  $Revision: 1.269.2.16.2.43 $  
Active Persistent Connections  0  
Active Connections  0  
Oracle Version  no value  
Compile-time ORACLE_HOME  no value  
Libraries Used  no value  
Temporary Lob support  disabled  
Collections support  disabled  
т.е. не работает...

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2009-03-06 15:37:30

Гость писал(а):
Вообщем все по статье...результат:

Код: Выделить всё

oci8
OCI8 Support  enabled  
Version  1.2.5  
Revision  $Revision: 1.269.2.16.2.43 $  
Active Persistent Connections  0  
Active Connections  0  
Oracle Version  no value  
Compile-time ORACLE_HOME  no value  
Libraries Used  no value  
Temporary Lob support  disabled  
Collections support  disabled  
т.е. не работает...
Версии php, фри, апача и как именно не работает, в кору падает? Compile-time ORACLE_HOME no value это я так понимаю переменная окружения установленная во время компиляции, но во время компиляции я ничего не устанавливал.
У меня до сих пор все пашет без проблем...
FreeBSD the power to serve.

1HGV1X
проходил мимо

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение 1HGV1X » 2009-03-06 16:46:36

Сейчас не на работе, так что по памяти...

FreeBSD 7.1
apache-1.3.41
php5-5.2.9
php5-oci8-5.2.9


нет в корку не падает...не могу подключится к базе...при попытке подключения, как буддто сама сессия апача отваливается

З.Ы. Если не трудно выложите код как вы подключаетесь?

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2009-03-06 17:07:49

1HGV1X писал(а):Сейчас не на работе, так что по памяти...

FreeBSD 7.1
apache-1.3.41
php5-5.2.9
php5-oci8-5.2.9


нет в корку не падает...не могу подключится к базе...при попытке подключения, как буддто сама сессия апача отваливается

З.Ы. Если не трудно выложите код как вы подключаетесь?
У меня конфигурация немного другая но на 7.1 пререлиз работало

Код: Выделить всё

mail# uname -a
FreeBSD mail.tjc.ru 6.3-RELEASE-p3 FreeBSD 6.3-RELEASE-p3 #1: Wed Aug 13 13:07:12 MSD 2008

пакеты
php5-5.2.6_2
php5-oci8-5.2.6_2
apache-2.2.9_5
У меня только апач 1.3 сомнения вызывает, не пробовал под ним, а все остальное должно работать.

Код: Выделить всё

  $c=oci_connect("user", "pass", "alfa2");
    if ( ! $c ) {
        echo "Unable to connect: " . var_dump( OCIError() );
        die();
    }

$s = OCI_Parse($c, "select snm,virtualip,ip,tel from rnodes");
OCI_Execute($s, OCI_DEFAULT);

while (OCI_Fetch($s)) {
    $str=oci_result($s, "VIRTUALIP");
...
};
ну и правильно настроенный tnsnames.ora

предварительно лучше оттестировать все в cli режиме, тут можно больше ошибок выловить, если в cli заработает то можно будет к апачу прикручивать.
FreeBSD the power to serve.

Гость
проходил мимо

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Гость » 2009-03-06 17:46:19

Код: Выделить всё

mail# uname -a
FreeBSD mail.tjc.ru 6.3-RELEASE-p3 FreeBSD 6.3-RELEASE-p3 #1: Wed Aug 13 13:07:12 MSD 2008

пакеты
php5-5.2.6_2
php5-oci8-5.2.6_2
apache-2.2.9_5
У меня только апач 1.3 сомнения вызывает, не пробовал под ним, а все остальное должно работать.

Код: Выделить всё

  $c=oci_connect("user", "pass", "alfa2");
    if ( ! $c ) {
        echo "Unable to connect: " . var_dump( OCIError() );
        die();
    }

$s = OCI_Parse($c, "select snm,virtualip,ip,tel from rnodes");
OCI_Execute($s, OCI_DEFAULT);

while (OCI_Fetch($s)) {
    $str=oci_result($s, "VIRTUALIP");
...
};
ну и правильно настроенный tnsnames.ora

предварительно лучше оттестировать все в cli режиме, тут можно больше ошибок выловить, если в cli заработает то можно будет к апачу прикручивать.[/quote]


впринципе, у меня такой же код....отличается не принципиально...
tnsnames.ora рабочий, однозначно...
насчет апача....да, мне кажется не принципиально...
что то я насчет cli не подумал... :( ....попробую...но теперь тока во вторник :smile: ....отпишу о результатах...

З.Ы. что то вроде tnsping-а нет? в портах

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2009-03-06 17:52:26

tnsping не смотрел, но думаю если начать с cli то скорее всего things will look a bit clearly :)
FreeBSD the power to serve.

Гость
проходил мимо

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Гость » 2009-03-10 8:46:26

Падаю в корку...

Код: Выделить всё

# php oracle.php
Bus error (core dumped)

Код: Выделить всё

<?php
$db = "test";

$c1 = oci_connect("tester", "XXX", $db);

function select_data($conn)
{
    $stmt = oci_parse($conn, "select * from acc");
    oci_execute($stmt, OCI_DEFAULT);
    echo $conn."-----selecting\n\n";
    while (oci_fetch($stmt))
    {
        echo $conn . " [" . oci_result($stmt, "TEST") . "]\n\n";
    }
    echo $conn . "-----done\n\n";

}
select_data($c1);
?>
вылетает на

Код: Выделить всё

$c1 = oci_connect("tester", "XXX", $db);
tnsnames.ora

Код: Выделить всё

sms# cat $TNS_ADMIN/tnsnames.ora
test.world =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host=192.168.114.201)(Port= 1521))
    (CONNECT_DATA = (SID = odb))
  )sms#

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение thefree » 2009-03-10 9:25:44

Код: Выделить всё

setenv ORACLE_HOME /usr/local/oracle8-client
хм, правильнее будет добавлять в apache, для определенной директории

И мне кажется, что данный параметр задавать не обязательно.
!!! Возможно ошибаюсь !!!
Данный параметр задаёт путь к файлами listener.ora, sqlnet.ora, tnsnames.ora

Что мешает создавать соединения

Код: Выделить всё

<?php
$db ="(DESCRIPTION =
      (ADDRESS =
         (PROTOCOL = TCP)
         (HOST = HOSTNAMEHERE)
         (PORT = 1521)
      )
    (CONNECT_DATA = (SID = SIDNAMEHERE))
  )";

$odbc = ocilogon ('user', 'pass', $db) or die( "Could not connect to Oracle database!") or die (ocierror());
?>
про ORACLE_SID ничего жаль не сказано, как правило много проблем с этим.

p.s. на perl всё намного проще ...
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2009-03-10 11:11:21

Гость писал(а):Падаю в корку...

Код: Выделить всё

# php oracle.php
Bus error (core dumped)
покажите вывод env в этой же сессии. Корка это либо отсуствие патча либо переменные, несмотря на то что они по виду не совсем нужны. Я целый день убил на подбор параметров при которых все работает.
FreeBSD the power to serve.

Гость
проходил мимо

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение Гость » 2009-03-10 12:12:19

Код: Выделить всё

# env
MC_SID=762
MC_TMPDIR=/tmp/mc-root
USER=root
LOGNAME=root
HOME=/root
MAIL=/var/mail/root
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
TERM=xterm
NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
TNS_ADMIN=/usr/local/etc/oracle
LD_LIBRARY_PATH=/usr/local/oracle8-client/lib
ORACLE_HOME=/usr/local/oracle8-client
FTP_PASSIVE_MODE=YES
BLOCKSIZE=K
SHELL=/bin/csh
SSH_CLIENT=192.168.114.152 1700 22
SSH_CONNECTION=192.168.114.152 1700 192.168.114.234 22
SSH_TTY=/dev/ttyp0
HOSTTYPE=FreeBSD
VENDOR=intel
OSTYPE=FreeBSD
MACHTYPE=i386
SHLVL=2
PWD=/usr/local/www/data
GROUP=wheel
HOST=test.local
REMOTEHOST=
EDITOR=vi
PAGER=more

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2009-03-10 12:57:16

нда... вот моё...

Код: Выделить всё

mail# env
USER=dvg
LOGNAME=dvg
HOME=/root
MAIL=/var/mail/dvg
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/root/bin
TERM=xterm
LANG=ru_RU.KOI8-R
MM_CHARSET=KOI8-R
BLOCKSIZE=K
FTP_PASSIVE_MODE=YES
ORACLE_HOME=/usr/local/oracle8-client
NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
SHELL=/bin/tcsh
SSH_CLIENT=192.168.200.53 3428 22
SSH_CONNECTION=192.168.200.53 3428 192.168.200.10 22
SSH_TTY=/dev/ttypj
SHLVL=3
PWD=/home/www/mnstat/php
OLDPWD=/home/dvg
_=/usr/bin/su
HOSTTYPE=FreeBSD
VENDOR=intel
OSTYPE=FreeBSD
MACHTYPE=i386
GROUP=wheel
HOST=mail
REMOTEHOST=192.168.200.53
EDITOR=vi
PAGER=more
MC_TMPDIR=/tmp/mc-root
MC_SID=38081
могу предположить что что-то поменялось в новой версии php, но пока нет намерений обновлять у себя... продакшен всетаки :)
может быть на тестовом сервере к вечеру попробую...
FreeBSD the power to serve.

DiSyA
проходил мимо
Сообщения: 8
Зарегистрирован: 2008-12-31 12:13:38

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение DiSyA » 2009-03-17 9:19:56

И у меня тоже падаить в кору, хотя php пропатчил указанным способом и переменные окружения выставил. FreeBSD 7.1, apache: Apache/2.2.9 (FreeBSD), php-5.2.8.

#env

Код: Выделить всё

...
NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
ORACLE_HOME=/usr/local/oracle8-client
...
Походу собака зарыта где-то ещё... :cz2:

Аватара пользователя
dvg_lab
сержант
Сообщения: 291
Зарегистрирован: 2007-07-02 22:51:25
Откуда: Москва

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение dvg_lab » 2009-04-06 15:44:20

дошли руки, вернее приперло, пересобрал php

Код: Выделить всё

php5-5.2.9                  =
php5-oci8-5.2.9             =
Пропатчил как в статье, запустил скрипт, все ровно, скрипт работает без проблем...
Из переменных окружения стоят:

Код: Выделить всё

NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
ORACLE_HOME=/usr/local/oracle8-client
Ну собсно не знаю в чем там может быть проблема.
FreeBSD the power to serve.

DiSyA
проходил мимо
Сообщения: 8
Зарегистрирован: 2008-12-31 12:13:38

Re: Статья: Работаем с oracle8-client + php5-oci8

Непрочитанное сообщение DiSyA » 2009-04-09 6:41:16

Вот интересно, попытался сделать связь php с ораклом, используя instant client, получаю тоже кору... Ваще очень странно...