Страница 1 из 4
Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-21 18:53:25
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
}
Подробности можно посмотреть здесь
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, если вам не нужны проблемы с кодировками.
не забываем потом
Эксперименты показали что устанавливать переменные окружения через 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 режиме так и модулем к апачу.
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 0:26:17
m0ps
интересно, спасибо...
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 13:38:25
Alex Keda
на сайт клади
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 14:05:04
dvg_lab
lissyara писал(а):на сайт клади
положил в раздел www.
ЗЫ: принимаю поздравления с первой официальной статьей

Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 21:35:57
m0ps
поздравляем

Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 21:51:55
Alex Keda
линк?
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 22:17:27
dvg_lab
lissyara писал(а):линк?
сорри, думал у тебя там видно все
http://www.lissyara.su/?id=1812
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 22:32:31
Alex Keda
я щас под вистой =((
тут нифига не видно =((
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 22:33:21
Alex Keda
Код: Выделить всё
:setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES,ORACLE_HOME=/usr/local/oracle8-client,NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251:\
либо разбивай на две, либо юзай [log]
слишком длинная
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-22 22:38:27
Alex Keda
впрочем - я сам поправил и отправил в продакшен
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2008-11-23 10:53:09
dvg_lab
lissyara писал(а):
я щас под вистой =((
тут нифига не видно =((
С вистой это ты погорячился

Про [log] понял.
ps: кстати забыл добавить что сервер оракловый версии 9.2
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
т.е. не работает...
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-06 15:37:30
dvg_lab
Гость писал(а):
Вообщем все по статье...результат:
Код: Выделить всё
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 это я так понимаю переменная окружения установленная во время компиляции, но во время компиляции я ничего не устанавливал.
У меня до сих пор все пашет без проблем...
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-06 16:46:36
1HGV1X
Сейчас не на работе, так что по памяти...
FreeBSD 7.1
apache-1.3.41
php5-5.2.9
php5-oci8-5.2.9
нет в корку не падает...не могу подключится к базе...при попытке подключения, как буддто сама сессия апача отваливается
З.Ы. Если не трудно выложите код как вы подключаетесь?
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-06 17:07:49
dvg_lab
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 заработает то можно будет к апачу прикручивать.
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 не подумал...

....попробую...но теперь тока во вторник

....отпишу о результатах...
З.Ы. что то вроде tnsping-а нет? в портах
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-06 17:52:26
dvg_lab
tnsping не смотрел, но думаю если начать с cli то скорее всего things will look a bit clearly

Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-10 8:46:26
Гость
Падаю в корку...
Код: Выделить всё
<?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);
?>
вылетает на
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#
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-10 9:25:44
thefree
Код: Выделить всё
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 всё намного проще ...
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-10 11:11:21
dvg_lab
Гость писал(а):Падаю в корку...
покажите вывод env в этой же сессии. Корка это либо отсуствие патча либо переменные, несмотря на то что они по виду не совсем нужны. Я целый день убил на подбор параметров при которых все работает.
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
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-10 12:57:16
dvg_lab
нда... вот моё...
Код: Выделить всё
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, но пока нет намерений обновлять у себя... продакшен всетаки

может быть на тестовом сервере к вечеру попробую...
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-03-17 9:19:56
DiSyA
И у меня тоже падаить в кору, хотя 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
...
Походу собака зарыта где-то ещё...

Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-04-06 15:44:20
dvg_lab
дошли руки, вернее приперло, пересобрал php
Пропатчил как в статье, запустил скрипт, все ровно, скрипт работает без проблем...
Из переменных окружения стоят:
Код: Выделить всё
NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
ORACLE_HOME=/usr/local/oracle8-client
Ну собсно не знаю в чем там может быть проблема.
Re: Статья: Работаем с oracle8-client + php5-oci8
Добавлено: 2009-04-09 6:41:16
DiSyA
Вот интересно, попытался сделать связь php с ораклом, используя instant client, получаю тоже кору... Ваще очень странно...