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 test.

$ 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

3 ответа

Вернитесь к первому способу и перестройте 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
Другие вопросы по тегам