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