我有一个使用 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
我假设它必须与机器 a 上的库不匹配有关,但我想不出更多的方法来调试它。任何帮助或建议将不胜感激。