自托管盒,
RHEL 6
PHP 5.3.3
PDO 安装了
freetds 安装了
pdo_dblib - 到目前为止还没有安装成功
我的目标是将 PDO 与 sybase 结合使用。尝试从适当版本的 php 源代码安装 pdo_dblib。我尝试了多种方法,并搜索了有关此主题的大量帮助,但尚未成功。
方法 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 并不是解决方案,因为我在进行测试时仍然遇到相同的错误。
$ su
$ make install
输出:
Installing shared extensions: /usr/lib64/php/modules/
这看起来很奇怪...并且不,它实际上并没有安装(apache 重启后没有显示在 phpinfo 上)。
方法 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
答案1
执行完方法 1 后,请检查您的 ini 文件,确保 pdo.so 和 pdo_dblib.so 文件已配置为可加载。您可以在命令行中使用 php -i 执行此操作,然后查找“已加载的配置文件”以及“已解析的其他 .ini 文件”。
在这些文件中,确保 extension=pdo.so 已加载(可能在加载 pdo_dblib.so 之前)。如果您想维护单独的 .ini 文件,您可以通过直接ls -al
对文件进行排序来控制加载顺序。
答案2
回到方法一并使用以下方法重建 freetds
./configure --enable-msdblib
并且可能
--enable-sybase-compat
如果仍然失败,请针对任何加载失败的 .so 发布 ldd 的输出。
答案3
我发现这个现在有效:
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