PHP を使用して GDBM ファイルを作成し、Apache によって参照されて基本認証を実行するシステムがあります。1999 年以来、企業ポリシーに合わせてアップグレードを行っている今まで、多くのバージョンの apache と PHP で実行されています。
コマンドラインから (適切な php.ini ファイルを指定して) php を実行すると、DBA 機能は正しく動作します。
ただし、PHP から dba_open(...) を呼び出す時点で Apache 内から呼び出されると、次のようになります。
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
マシン上のライブラリの不一致に関係していると思いますが、これ以上デバッグする方法は考えられません。どんな助けや提案も大歓迎です。