对于处理程序,Apache / PHP GDBM失败并且驱动程序初始化失败:gdbm

时间:2015-08-20 03:34:37

标签: php apache compilation gdbm

我有一个使用PHP构建GDBM文件的系统,然后由Apache引用该文件来执行基本身份验证。它自1999年以来一直运行着许多版本的apache和PHP,直到现在我正在进行升级以匹配公司策略。

如果我从命令行运行php(指定相应的php.ini文件),那么DBA功能可以正常工作。

然而,当从Apache内部调用它从PHP调用dba_open(...)时,我得到:

Warning: dba_open(/etc/httpd/conf/users.tmp,n): Driver initialization failed for handler: gdbm: File open error in /var/www/phpinc/bxxx.inc

PHP是使用以下命令构建的:

./configure --with-iconv --with-mysql --with-mysql-sock=/var/run/mysql/mysql.sock --with-apxs2=/usr/local/apache2/bin/apxs --with-gdbm --enable-mbstring --with-gd --enable-dba

我只根据其他一些评论添加了--enable-dba。

gdbm_dump失败并报告:

gdbm_dump: gdbm_open failed: Unexpected end of file

但现在已经设法使用命令行PHP重建GDBM数据文件它可以正常工作 - 因此似乎可能(或者是)字符编码问题或类似的东西

在Apache内部,它失败了:

 [authn_dbm:error] [pid 14104:tid 140279619360512] (20014)Internal error (specific information not available): [client 10.160.9.247:52710] AH01754: could not open dbm (type GDBM) auth file: /etc/httpd/conf/users, referer: xxxxx

我假设它必须与机器上的库不匹配有关,但我想不出更多的方法来调试它。任何帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

行。排序!

首先我下载了​​gdbm源并构建/安装了它。

然后我添加到PHP和Apache配置行显式--with-gdbm = / usr / src / gdbm-1.11。

然后我注意到新的gdbm已经安装了自己的/ usr / local / lib,但这不在ld.so.conf中的搜索路径中。所以我复制了文件并在/ usr / lib64中创建了正确的链接(.so.4等)。

最后我在命令行上使用它的问题是权限相关 - 因为从命令行创建了一个版本,它不再需要在apache中打开所需的apache所有权。对于那些关注dba_open()的特定错误的人是:

dba_open(...): Driver initialization failed for handler: gdbm: File open error

当然除了所有其他的“dll hell”抛弃一些东西之外,这当然会非常有用。

无论如何最终解决方案游戏从使用ldd来看:

/usr/local/bin/php
/usr/local/apache2/bin/httpd
/usr/local/apache2/lib/libapr-1.so.0
/usr/local/apache2/lib/libaprutil-1.so.0
/usr/local/apache2/modules/libphp5.so

一旦我看到它们链接到不同版本的libgdbm,它就开始自行解决。