方法 1

方法 1

自托管盒,
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

相关内容