LINUX.ORG.RU

PHP+Oracle


0

1

Здравствуйте! У меня на сервере установлен Oracle 10g , Apache 2 и php5 . Хочу связать php и Oracle. Для этого проделал следующее :
-скопировал и распаковал instantclient-basik_10_2 ... и sdk-10_2 ...
-установил php-pear,php-dev, build-essential
-следующий шаг pecl install oci8 , но тут и заковыка -

No releases available for package "pecl.php.net/oci8"
Cannot initialize 'channel://pecl.php.net/oci8', invalid or missing package file
Package "channel://pecl.php.net/oci8" is not valid
install failed
 
Почему-то не находит пакет. Подскажите в чем нюанс. Делаю все согласно инструкции.Может где-то прописать пути нужно.


1. прочитать документацию

2. написать в техподдержку оракл(ты же его купил, или обманываешь себя каким нибудь XE?)

anonymous
()
Ответ на: комментарий от anonymous

Нет не XE . Ставил не я, лет 7 тому назад. Очень конструктивная помощь.

fbb
() автор топика
Ответ на: комментарий от ukr_unix_user

Я с Linux на Вы и по необходимости. Если не трудно , дайте командочку на пересборку модуля php. Я так понимаю ,что /path/to/oracle/ должен совпадать с $ORACLE_HOME ?

fbb
() автор топика

Дистрибутив-то хоть какой, сказал бы, а?

P.S.: оракловский модуль глюююючный, часто падает на ровном месте. Я заколебался свои поделия PHP'шные под него затачивать.

no-dashi ★★★★★
()
Ответ на: комментарий от fbb

apt-get install php5 --with-oci8=shared,instantclient,/path/to/oracle/ .

нет. он тебе советует пересобрать php из исходных кодов.
если «на вы и по необходимости», то это нетривиальная задачка.

начни с apt-get source php5
потом надо гуглить, как и на что изменить строку вызова configure
потом надо пересобрать пакет и вот тогда уже его устанавливать.

aol ★★★★★
()
Ответ на: комментарий от fbb

нет, не верно. ./configure --with-oci8=shared,instantclient,/path/to/oracle/

/path/to/oracle/ должен совпадать с «скопировал и распаковал instantclient-basik_10_2 ... и sdk-10_2»

Но правильнее было бы пересобрать .deb, по крайней мере php из rhel я дружил с oracle именно пересборкой rpm-ки .

ukr_unix_user ★★★★
()
Ответ на: комментарий от aol
 #apt-get source php5
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: You must put some 'source' URIs in your sources.list 

Что я должен в sources.list прописать? php5 установлен с дистрибутивного диска и он прописан в sources.list

fbb
() автор топика
Ответ на: комментарий от ukr_unix_user

Если Вы пытаетесь доказать ,что Windows must live . То у Вас получается. Просто не хочется уже готовую базу перлопачивать на Винду, поэтому прошу помощь. И хочется чего-нибудь научиться. сам я не сетевой администратор по сути, а только разработчик. Ну вот приходится заниматься и Linux.

fbb
() автор топика
Ответ на: комментарий от aol

Все проделал, но теперь после

 ./configure --with-oci8=shared,instantclient,/opt/oracle/app/oracle/instantclient make

выдает сообщение

checking for xml2-config path...
configure: error: xml2-config not found. Please check your libxml2 installation. 

Хотя xml2 уже установлен.

fbb
() автор топика
Ответ на: комментарий от fbb

Установил lixml2-dev . Собрал поновой php5 . Уже без ошибок. Но при запуске php скрипта ошибка - call to undefined function OCILogon. Куда дальше двигаться незнаю.

fbb
() автор топика
Ответ на: комментарий от anonymous

оракл у него глючит, соври что-нибудь получше

Ты из тех знатоков ынтырпрайза, которые кончают от слова «оракл»? Ну так я тебя расстрою - модуль pdo-oci является глючным и нестабильным. И мне похер на твое мнение. Потому, что на том же коде постгресовский PDOшный драйвер работает.

no-dashi ★★★★★
()
Ответ на: комментарий от fbb

А модуль php-шный подгрузил в php.ini?

P.S.: уже предвижу вопрос «почему он теперь не находит libclntsh.so.10». Но это будет следующий вопросю

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

Что значит «модуль php-шный»? Если expresion=oci8 , то да

fbb
() автор топика
Ответ на: комментарий от fbb

тааак.. собрал, значит.. а make install сделал? а prefix в configure указал такой же, как для твоего дистрибутива?

проверь, что всё поставилось в нужные пути, далее, не надо ли пути до оракловских либ добавлять в /etc/ld.so.conf (как на это но-даши тонко намекает в коментарии ниже) ;)

aol ★★★★★
()
Ответ на: комментарий от aol

Да make install сделал . Строка в configure выглядит так [code] ./configure --with-oci8=shared,instantclient,/opt/oracle/app/oracle/instantclient/instantclient_10_2 [/code] Именно тут находятся файлы libocci.so.10.1 и libclntsh.so.10.1
В /etc/ld.so.conf создал файл libc.conf , в котором - [code]/opt/oracle/app/oracle/instantclient/instantclient_10_2[/code]

fbb
() автор топика
Ответ на: комментарий от aol

Да make install сделал . Строка в configure выглядит так

 ./configure --with-oci8=shared,instantclient,/opt/oracle/app/oracle/instantclient/instantclient_10_2 
Именно тут находятся файлы libocci.so.10.1 и libclntsh.so.10.1 В /etc/ld.so.conf создал файл libc.conf , в котором -
/opt/oracle/app/oracle/instantclient/instantclient_10_2

fbb
() автор топика
Ответ на: комментарий от fbb

пардон ошибочка В /etc/ld.so.conf создал файл oci.conf

fbb
() автор топика
Ответ на: комментарий от fbb

это, конечно, прекрасно, но вот ты скачал apt-get source php5
посмотри, какой в нем вызов configure и сделай _такой же_, только добавь параметры для оракла.
так у тебя получились параметры configure по умолчанию, как их видят разработчики PHP, а не создатели дебиана.
пути могут различаться.
так что, втыкай. надо, по меньшей мере, --prefix и еще какой-нить параметр про расположение php.ini и модулей PHP, чтобы после make install это хоть как походило на установленый из deb php.

идеально было пересобрать пакет, и установить его.

aol ★★★★★
()
Ответ на: комментарий от aol

В INSTALL вычитал - --prefix Используется только при установке apache . Может здесь подсказка

In our example
    we'll do a simple configure with Apache 1 and MySQL support.  Your
    path to apxs may differ from our example.

      ./configure --with-mysql --with-apxs=/www/bin/apxs

fbb
() автор топика
Ответ на: комментарий от fbb

После # php-v

PHP Warning:  PHP Startup: Unable to load dynamic library '/opt/oracle/app/oracle/instantclient/instantclient_10_2/libocci.so.10.1' - /opt/oracle/app/oracle/instantclient/instantclient_10_2/libocci.so.10.1: undefined symbol: OCIPGetErrorMessage in Unknown on line 0

fbb
() автор топика
Ответ на: комментарий от fbb

А что говорит вывод команды:

ldconfig -p|grep -i oci

Если не находит библиотеки, то надо обновить кэш линкера командой
ldconfig (от root-а естественно)

evildim
()
Ответ на: комментарий от evildim

ldconfig -p|grep -i oci не выдает ничего. Линкфайлы создавал в каталоге с Libocci.so.10.1 так -

 #ln -s libclntsh.so.10.1 libclntsh.so 
#ln -s libocci.so.11.1 libocci.so
После - ldconfig

fbb
() автор топика
Ответ на: комментарий от fbb

Пардон копировал с ошибкой правильно так -

#ln -s libclntsh.so.10.1 libclntsh.so 
#ln -s libocci.so.10.1 libocci.so

fbb
() автор топика
Ответ на: комментарий от evildim

Поправил ошибки в oci.conf . После ldconfig -p|grep -i oci

# ldconfig -p|grep -i oci
        libocijdbc10.so (libc6) => /opt/oracle/app/oracle/instantclient/instantclient_10_2/libocijdbc10.so
        libociei.so (libc6) => /opt/oracle/app/oracle/instantclient/instantclient_10_2/libociei.so

fbb
() автор топика
Ответ на: комментарий от fbb

php-ный модуль заработал или нет ? Из ответов выше непонятно.

Если нет, тогда что говорит ldd /usr/lib/php/modules/oci8.so (или где он лежит) ?
Все ли библиотеки нужные ему присутвтвуют ?

Что в выводе phpinfo() при запуске php из командной строки на тему oci8 ?
Например:
--- cut ---
$ rpm -ql php-cli
/usr/bin/php
/usr/bin/php-cgi
/usr/share/man/man1/php.1.gz

$ /usr/bin/php >/tmp/log
<?php
phpinfo();
?>
<Ctrl>+<D>

$ head /tmp/log
phpinfo()
PHP Version => 5.1.6

System => Linux test.internal.org 2.6.18-274.7.1.el5.centos.plus #1 SMP Thu Oct 20 19:28:06 EDT 2011 x86_64
Build Date => Nov 29 2010 16:41:38
Configure Command => './configure' ....
[skip]
--- cut ---

Если там присутствует информация о OCI8, а в phpinfo из под apache - отсутствует, то перепускаем apache:

PS: Вообще много полезного про Oracle+php можно найти здесь http://www.php.net/manual/ru/book.oci8.php

evildim
()
Ответ на: комментарий от fbb

В догонку:
перед запуском apache должны быть установлены все переменные окружения, используемые OCI8: ORACLE_HOME, NSL_LANG и т.п.

evildim
()
Ответ на: комментарий от evildim

давайте по частям . Если я захожу по адресу на винде через IE и у меня запускается скрипт phpinfo.php и показывает info, то я делаю вывод , что работает . Верно ?

fbb
() автор топика
Ответ на: комментарий от evildim

В догонку N2:
может будет проще взять уже собраный модуль из PECL ?
см. http://www.php.net/manual/ru/oci8.installation.php раздел «Установка OCI8 из PECL» и http://pecl.php.net/package/oci8

PS: очень давно не сталкивался со связкой php+oracle - so остаточные знания иногда подводят.

evildim
()
Ответ на: комментарий от fbb

давайте по частям .

Ок.

если я захожу по адресу на винде через IE и у меня запускается скрипт
phpinfo.php и показывает info, то я делаю вывод , что работает . Верно ?

1) phpinfo() - это функция языка php.

2) cоздаём файл со следующим содержимым:
--- cut ---
<?php
phpinfo();
?>
--- cut ---

3) Помещаем его куда-нибудь в DocumentRoot сайта.
Например в ${путь_до_DocumentRoot}/tst.php

4) с клиентской машины окрываем в браузере http://my.site.org/tst.php
смотрим раздел с модулями на предмет oci8, раздел с переменными окружения на предмет переменных ORACLE_HOME, ORACLE_SID, NSL_LANG (как минимум). Если всё это - переменные окружения и модуль - присуют, то тогда всё действительно OK.

evildim
()
Ответ на: комментарий от evildim

Да все верно. Но раздела oci нету. И еще меня смущает- после #php -v выдает версию PHP 5.3.8 (cli) . Если через браузер, то 5.2.6-1.

fbb
() автор топика
Ответ на: комментарий от fbb

И еще меня смущает- после #php -v выдает версию PHP 5.3.8 (cli) .
Если через браузер, то 5.2.6-1.

Не зря смущает.
Это значит там стоят два разных php. Скорее всего с разными настройками. Сравни в том и другом случае вывод phpinfo() в части, касающейся где лежат модули и где лежит php.ini. Скорее всего они будут отличаться.

А вообще что за дистрибутив ?

evildim
()
Ответ на: комментарий от evildim

5.2.6 из установочного диска 5.3.8 качнул из http://packages.dotdeb.org . Не знаю как вывести phpinfo для 5.3.8. Выводит только 5.2.6

# head /tmp/log
phpinfo()
PHP Version => 5.2.6-1+lenny9

System => Linux debian 2.6.26-2-686 #1 SMP Sat Nov 20 23:06:30 UTC 2010 i686
Build Date => Aug  4 2010 03:19:47
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
Scan this dir for additional .ini files => /etc/php5/cli/conf.d
Видимо нужно где-то апачу указать.

fbb
() автор топика
Ответ на: комментарий от evildim

пошел по Вашей рекомендации-
-скачал oci8-1.4.6
-./configure -with-oci8=shared,$ORACLE_HOME (oracle_home определена)
-make install
-система сообщила , что библиотека находится в /INSTALL/oci8-1.4.6/modules
-создал файл /etc/ld.so.conf/oci.conf , в ньом указал /INSTALL/oci8-1.4.6/modules
-ldconfig
-отредактировал /etc/php5/cli/php.ini -> extension_dir="./INSTALL/oci8-1.4.6/modules" и extension=oci8.so
-/etc/init.d/apache2 restart и...

# /usr/bin/php > /tmp/log
PHP Warning:  PHP Startup: Unable to load dynamic library './INSTALL/oci8-1.4.6/modules/oci8.so' - ./INSTALL/oci8-1.4.6/modules/oci8.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library './INSTALL/oci8-1.4.6/modules/pdo.so' - ./INSTALL/oci8-1.4.6/modules/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
...хрен файл oci8.so точно есть в /INSTALL/oci8-1.4.6/modules

fbb
() автор топика
Ответ на: комментарий от fbb

Все гениальное просто в extension_dir точку нужно убрать т.е.- extension_dir=«/INSTALL/oci8-1.4.6/modules»
Только теперь следующая заковыка- apache знает о том php который ставился с ним из дистрибутива и теперь если через браузер запросить phpinfo() , то выдает php 5.2.6 , а собирал я с oci8 php 5.3.8 . Как указать apache , что нужно работать с php 5.3.8 ?

fbb
() автор топика
Ответ на: комментарий от fbb

Как указать apache , что нужно работать с php 5.3.8 ?

Положить модуль от php 5.3.8 в каталог с модулями apache.
Обычно модуль php имеет имя libphp5.so, а модули apache лежат в HTTPD_ROOT/modules:

--- cut ---
$ httpd -V|grep HTTPD_ROOT
-D HTTPD_ROOT=«/etc/httpd»
--- cut ---

В RedHat-образных дистрибутивах /etc/httpd/modules это симлинк на /usr/lib/httpd/modules или на /usr/lib64/httpd/modules.

После чего нужно перезапустить apache. После перезапуска смотрим загружен ли libphp5:
--- cut ---
$ httpd -M 2>&1|grep php
php5_module (shared)
--- cut ---

Дальше смотрим вывод фукции phpinfo();

Есть один интересный момент - если в системе присутствует php установленый штатным пакетным менеджером, а мы на место libphp5.so подкладываем свой файл, то при выходе обновления на php этот файл затрётся. Я бы для начала узнал с какой целью в системе стоит два php, и оствил бы только один из них. IMHO самый правильный вариант был бы оставить php, шедший с дистрибутивом и пересобрать oci8.so под него.
Как вариант - пожно попробовать подсунуть oci8.so в каталог модулей от php 5.2.6 и в его php.ini добавить:
--- cut ---
extension=oci8.so
--- cut ---

Есть весьма неплохой шанс, что оно заработает - если не ошибаюсь, в пределах 5-й верки у php интерфейс к модулям не менялся.

Если есть какие-то очень серьёзные причины использовать более свежий php, чем идёт в дистрибутиве (например некоторые платные CMS-ки требуют php c версией не менее чем ...), то я бы собрал пакет и поставил бы его нормальным образом. В крайнем случае можно просто удалить пакет php и оставить только самосборный. Естественно перед удалением пакета надо сохранить копию его php.ini и копию /etc/httpd/conf.d/php.conf или как он называется в данном случае.

Еще за напоминаю, что перед этим нужно понять почему в системе два php и чем не устраивает штатная версия

evildim
()
Ответ на: комментарий от evildim

Как указать apache , что нужно работать с php 5.3.8 ?

Положить модуль от php 5.3.8 в каталог с модулями apache. Обычно модуль php имеет имя libphp5.so

У меня только один файл libphp5.so (от 5.2.6)

Я бы для начала узнал с какой целью в системе стоит два php

Я не знаю как пересобрать штатный php . Создавал я его apt-get install. Поэтому скачал и установил 5.3.8

В крайнем случае можно просто удалить пакет php

Пробовал apt-get remove php5 - не дает удалять

Package php5 is not installed, so not removed

fbb
() автор топика
Ответ на: комментарий от fbb

Я не знаю как пересобрать штатный php . Создавал я его apt-get install.
Поэтому скачал и установил 5.3.8

http://www.php.net/manual/ru/oci8.installation.php#87174
Здесь расписано практически по шагам как и что надо сделать под Ubuntu.
В других debian-based дистрибутивах будет всё аналогично.

Часть шагов уже сделана (в части касающейся установки Oracle client и прописывания путей к библиотекам в конфиг динамического линкера). Если ещё не установлены пакеты php5-pear и php5-dev - устанавливаем их.
Далее остаётся выполнить всё, начиная со строки:

«pecl install oci8 # interactively enter option 1»

и далее по тексту.
Различия в версиях установленых на машине с тем, что написано в примере по ссылке - в данном случае непринципиальны.

evildim
()
Ответ на: комментарий от evildim

php5-dev и php-pear были установлены . На apt-get install php5-pear говорит , что- Couldn't find package php5-peer. далее

~# pecl install oci8
No releases available for package "pecl.php.net/oci8"
install failed

fbb
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.