Php pdo_dblib - 找不到/无法加载 freetds

Max*_*ers 7 php sybase pdo freetds rhel6

自托管盒子,
RHEL 6
PHP 5.3.3

PDO 安装了
freetds 安装了
pdo_dblib - 到目前为止没有运气安装

我的目标是在 sybase 中使用 PDO。试图从适当版本的 php 源代码安装 pdo_dblib。我尝试了多种方法并搜索了很多有关此主题的帮助,但尚未成功。

方法一

安装 freetds

$ ./configure
$ make
$ su root
Password: 
$ make install
Run Code Online (Sandbox Code Playgroud)

这是成功的

安装 pdo_dblib

在 /ext/pdo_dblib 文件夹中:

$ phpize
$ ./configure
$ make
$ make test
Run Code Online (Sandbox Code Playgroud)

错误输出:

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
Run Code Online (Sandbox Code Playgroud)

这看起来不太好......我研究了这个并在这里找到了一个有趣的黑客。但是将 pdo.ini 更改为 pdo_0.ini 不是解决方案,因为我在 make test 中仍然遇到相同的错误。

$ su
$ make install
Run Code Online (Sandbox Code Playgroud)

输出:

Installing shared extensions:     /usr/lib64/php/modules/
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪……不,它实际上并没有安装(在 apache 重启后没有显示在 phpinfo 上)。

方法二

安装 freetds

完全按照说明,我添加前缀

$ ./configure --prefix=/usr/local/freetds
$ make
$ su root
Password: 
$ make install
Run Code Online (Sandbox Code Playgroud)

这是成功的

安装 pdo_dblib

在 /ext/pdo_dblib 文件夹中:

$ phpize
$ ./configure --with-sybase=/usr/local/freetds
Run Code Online (Sandbox Code Playgroud)

这会在输出底部产生以下错误

...
checking for PDO_DBLIB support via FreeTDS... yes, shared
configure: error: Cannot find FreeTDS in known installation directories
Run Code Online (Sandbox Code Playgroud)

方法三

freetds ./configure 变体(包括或不包括 --prefix...)没有改变这个结果,所以我会跳过它。

安装 pdo_dblib pecl 扩展

遵循此处指定的方法。

pecl download pdo_dblib
tar -xzvf PDO_DBLIB-1.0.tgz
Run Code Online (Sandbox Code Playgroud)

删除了行,

<dep type=”ext” rel=”ge” version=”1.0?>pdo</dep>
Run Code Online (Sandbox Code Playgroud)

保存了 package.xml 文件,并将其移动到 PDO_DBLIB 目录中。

mv package.xml ./PDO_DBLIB-1.0
Run Code Online (Sandbox Code Playgroud)

导航到 PDO_DBLIB 目录,然后从该目录安装包。

cd ./PDO_DBLIB-1.0
pecl install package.xml
Run Code Online (Sandbox Code Playgroud)

但是,此命令给了我以下错误输出,与方法 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
Run Code Online (Sandbox Code Playgroud)

小智 1

使用方法 1 后,检查 ini 文件并确保 pdo.so 和 pdo_dblib.so 文件已配置为要加载。您可以使用 php -i 从命令行执行此操作,并查找“加载的配置文件”以及“解析的其他 .ini 文件”。

在这些文件中,确保扩展 = pdo.so 已加载(可能/可能在加载 pdo_dblib.so 之前)。如果您想维护单独的 .ini 文件,您可以通过直接ls -al排序文件的方式来控制加载顺序。