Назад | Перейти на главную страницу

Php pdo_dblib - не удается найти / загрузить freetds

Самостоятельная коробка,
RHEL 6
PHP 5.3.3

PDO установлен
установлены freetds
pdo_dblib - пока не удалась установка

Моя цель - использовать PDO с sybase. Попытка установить pdo_dblib из исходного кода php соответствующей версии. Я испробовал множество методов и довольно много искал помощи по этой теме, но пока не добился успеха.

Способ 1

Установить freetds

$ ./configure
$ make
$ su root
Password: 
$ make install

Это успешно

Установить pdo_dblib

внутри папки / ext / pdo_dblib:

$ phpize
$ ./configure
$ make
$ make test

Вывод ошибки:

PHP Warning:  PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so' - /home/sybase/Install_items/php_533_src/php-5.3.3/ext/pdo_dblib/modules/pdo_dblib.so: undefined symbol: php_pdo_register_driver in Unknown on line 0

Это не выглядит хорошо ... Я исследовал это и нашел интересный прием для этого Вот. Но изменение pdo.ini на pdo_0.ini не было решением, так как я все еще получал те же ошибки при тестировании make.

$ su
$ make install

Вывод:

Installing shared extensions:     /usr/lib64/php/modules/

Это кажется странным ... и нет, на самом деле он не устанавливается (не отображается на phpinfo после перезапуска apache).

Способ 2

Установить freetds

точно следуя инструкциям, я добавляю префикс

$ ./configure --prefix=/usr/local/freetds
$ make
$ su root
Password: 
$ make install

Это успешно

Установить pdo_dblib

внутри папки / ext / pdo_dblib:

$ phpize
$ ./configure --with-sybase=/usr/local/freetds

Это вызывает следующую ошибку внизу вывода

...
checking for PDO_DBLIB support via FreeTDS... yes, shared
configure: error: Cannot find FreeTDS in known installation directories

Способ 3

Вариант freetds ./configure (включая или не включающий --prefix ...) не повлиял на результат, поэтому я пропущу его.

Установить расширение pdo_dblib pecl

следуя указанному методу Вот.

pecl download pdo_dblib
tar -xzvf PDO_DBLIB-1.0.tgz

Убрана строчка,

<dep type=”ext” rel=”ge” version=”1.0″>pdo</dep>

Сохранил файл package.xml и переместил его в каталог PDO_DBLIB.

mv package.xml ./PDO_DBLIB-1.0

Перешел в каталог PDO_DBLIB, затем установил пакет из этого каталога.

cd ./PDO_DBLIB-1.0
pecl install package.xml

Но эта команда дает мне следующий вывод ошибки, такой же, как Способ 2.

checking for PDO_DBLIB support via FreeTDS... yes, shared
configure: error: Cannot find FreeTDS in known installation directories
ERROR: `/home/sybase/Install_items/pecl_pdo_dblib/PDO_DBLIB-1.0/configure' failed

Вернитесь к первому методу и восстановите freetds с помощью

./configure --enable-msdblib

и возможно

--enable-sybase-compat

Если это все еще не удается, опубликуйте вывод ldd для любого .so, который не загружается.

После метода 1 проверьте свои ini-файлы и убедитесь, что файлы pdo.so и pdo_dblib.so настроены для загрузки. Вы можете сделать это из командной строки с помощью php -i и найти «Загруженный файл конфигурации», а также «Дополнительные проанализированные файлы .ini».

Среди этих файлов убедитесь, что extensionion = pdo.so загружен (возможно / возможно до загрузки вашего pdo_dblib.so). Если вы хотите поддерживать отдельные файлы .ini, вы можете контролировать порядок загрузки с помощью прямого ls -al заказывает файлы.

Я нашел эту работу в настоящее время:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm && \
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm && \
yum update -y && yum install --enablerepo=remi -y \
    php-cli \
    php-fpm \
    php-mssql

Вы можете проверить установленный PDO DBLIB, просеивая вывод следующей команды:

php -i