Проблема конфигурации PHP 5.2.3 c PDO + OIC 10_2

BlackTheMad

Новичок
Проблема конфигурации PHP 5.2.3 c PDO + OIC 10_2

У меня возникли проблемы при конфигурировании PHP 5.2.3 драйверами для Oracle.
Я использовал Oracle Instant Client 10.2 и вдумчиво читал "The Underground PHP and Oracle® Manual".

Такая конфигурация:
./configure \
--prefix=/u01/users/php/php5 \
--with-apxs2=/u01/users/php/apache2/bin/apxs \
--with-oci8=instantclient,/u01/users/php/instantclient_10_2 \
--enable-pdo

проходит успешно. Всё находится и ставится.

НО! Если добавить по вышеуказанному мануалу:
./configure \
--prefix=/u01/users/php/php5 \
--with-apxs2=/u01/users/php/apache2/bin/apxs \
--with-oci8=instantclient,/u01/users/php/instantclient_10_2 \
--enable-pdo \
--with-pdo-oci=instantclient,/u01/users/php/instantclient_10_2,10.2.0.3

то OCI8 продолжает конфигурироваться нормально и все находит, хотя странно определяет версию клиента
checking for Oracle (OCI8) support... yes
checking PHP version... 5.2.3, ok
checking Oracle Instant Client directory... /u01/users/php/instantclient_10_2
checking Oracle Instant Client SDK header directory... /u01/users/php/instantclient_10_2/sdk/include
checking Oracle Instant Client version... 10.1

А вот PDO-OCI совершенно не хочет находить библиотеки.
checking Oracle OCI support for PDO... yes
checking Oracle Install-Dir... instantclient,/u01/users/php/instantclient_10_2,10.2.0.3 :instantclient,/u01/users/php/instantclient_10_2,10.2.0.3:
checking if that is sane... yes
checking size of long int... 4
checking checking if we're at 64-bit platform... no
checking OCI8 libraries dir... ./configure: !: not found
configure: error: Oracle (OCI8) required libraries not found

Я не сильно разбираюсь в bash-скриптинге, но такое ощущение, что он не распознает путь и пытается искать в папках lib32, lib и прочих.

Должен упомянуть, что собираю я под SunOS server 5.9 Generic_118558-35 sun4u sparc SUNW,Sun-Fire-V490
Без прав администратора. Под Apache 2.0.59.

Так же должен упомянуть, что на сервере есть установленный Oracle Client (не уверен), и с путями по умолчанию, т.е. с родными $ORACLE_HOME он конфигурируется, хотя со странностями:

checking for Oracle (OCI8) support... yes
checking PHP version... 5.2.3, ok
checking Oracle Install Directory... /u01/oracle/9.2.0
checking size of long int... 4
checking if we're on a 64-bit platform... no
checking OCI8 libraries dir... ./configure: !: not found
lib32

checking Oracle version... 9.0
checking for OCIEnvNlsCreate in -lclntsh... yes
checking for OCINlsCharSetNameToId in -lclntsh... yes
checking for OCIEnvCreate in -lclntsh... yes
checking for OCIStmtPrepare2 in -lclntsh... yes
checking for OCILobRead2 in -lclntsh... no
checking for OCILobIsTemporary in -lclntsh... yes
checking for OCICollAssign in -lclntsh... yes


В обоих случая одно и то же. Но для меня это не приемлимо, т.к. доступа к этому клиенту я не имею, и следовательно не смогу настроиться на нужный мне сервер без лишних проблем.
Думаю, может положить библиотеки оракловые в папочку lib.

Заранее благодарю.
 

tony2001

TeaM PHPClub
>--with-oci8=instantclient,/u01/users/php/instantclient_10_2

./configure --help говорит указывать путь к библиотекам OIC:
--with-oci8[=DIR] Include Oracle (OCI8) support. DIR defaults to $ORACLE_HOME.
Use --with-oci8=instantclient,/path/to/oic/lib
>checking OCI8 libraries dir... ./configure: !: not found
>lib32

под Солярис shell всегда был кривой до нельзя.
смотри ext/oci8/config.m4 строка 39 или строка 41:
http://lxr.php.net/source/php-src/ext/oci8/config.m4#39
http://lxr.php.net/source/php-src/ext/oci8/config.m4#41

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

BlackTheMad

Новичок
Автор оригинала: tony2001
>--with-oci8=instantclient,/u01/users/php/instantclient_10_2

./configure --help говорит указывать путь к библиотекам OIC:
--with-oci8[=DIR] Include Oracle (OCI8) support. DIR defaults to $ORACLE_HOME.
Use --with-oci8=instantclient,/path/to/oic/lib
в OIC нет подпапок. Все библиотеки лежат непосредственно в instantclient_10_2/, а заголовки лежат в instantclient_10_2/sdk/include.
Попытался обмануть конфигуратор, уложив файлы библиотек в папку instantclient_10_2/lib. Конфигуратор съел, но make уже не прошел.
С OCI8 у меня нет проблем. Он конфигурируется и собирается.
У меня проблемы с PDO_OCI. Оне не хочет даже конфигурироваться.
 

tony2001

TeaM PHPClub
что я не так делаю, почему у меня всё работает?
--with-pdo-oci=instantclient,/tmp/oic_10_2,10.2.1.3

по-моему, это всё-таки твой шелл, который не способен выполнить те же строки, что и в oci8/config.m4, только в pdo_oci/config.m4.
 

BlackTheMad

Новичок
Да я верю в нестандартность Соляриса =)
Я с ней уже насталкивался пока собирал все зависимости.
Мне бы какое-нибудь решение. Можно ли собрать нормальный sh, чтобы всё было в порядке?

-~{}~ 14.08.07 13:03:

Заменил #! /bin/sh на #! /bin/bash.
Всё сконфигурировалось успешно. Правда не собирается, но это уже не по вине OCI.
Спасибо, tony2001, за подсказку про кривой шел.
 

BlackTheMad

Новичок
пожелание остаётся актуальным:
Прогнал вот это скрипт


#!bin/sh
OCI8_DIR="/u01/oracle/9.2.0"
if test -d "$OCI8_DIR/lib" -a ! -d "$OCI8_DIR/lib32"; then
OCI8_LIB_DIR=lib
elif ! test -d "$OCI8_DIR/lib" -a -d "$OCI8_DIR/lib32"; then
OCI8_LIB_DIR=lib32
elif test -d "$OCI8_DIR/lib" -a -d "$OCI8_DIR/lib32"; then
OCI8_LIB_DIR=$TMP_OCI8_LIB_DIR
else
{ echo "configure: error: Oracle (OCI8) required libraries not found" 1>&2; exit 1; }
fi
echo $OCI8_LIB_DIR


Скрипт ведет себя нездорово. Если закомментировать

elif ! test -d "$OCI8_DIR/lib" -a -d "$OCI8_DIR/lib32"; then
OCI8_LIB_DIR=lib32

(http://lxr.php.net/source/php-src/ext/oci8/config.m4#41), то ведет становится лучше. Он просто ничего не находит, а не выкидывает !: not found
Так что, видимо, это 41 строка.
 

tony2001

TeaM PHPClub
гут.
логика кода "elif ! test -d "$OCI8_DIR/lib" -a -d "$OCI8_DIR/lib32"; then" понятна?
попробуй его модифицировать так, чтобы сановский шелл его выполнил нормально.

например, вот так:
Код:
if test ! -d "blah" && test ! -d "blahblah"; then
echo "hello sun";
fi
 

BlackTheMad

Новичок
гут. логика кода "elif ! test -d "$OCI8_DIR/lib" -a -d "$OCI8_DIR/lib32"; then" понятна?
попробуй его модифицировать так, чтобы сановский шелл его выполнил нормально.
Логика кода понятна лишь интуитивно. Но если заменить эти две строчки на
Код:
elif test ! -d "$OCI8_DIR/lib" && test ! -a -d "$OCI8_DIR/lib32"; then
OCI8_LIB_DIR=lib32
То скрипт ведёт себя так же, как и без них. Т.е. ничего не выводит.
 

micbox

Новичок
Я тут два месяца мучился с этой дурацкой опцией. Заменил /bin/sh на /bin/bash и все четко сработало. Молодцы, ребята. Спасибо.
 
Сверху