Ошибка Apache / PHP GDBM с инициализацией драйвера для обработчика: gdbm

У меня есть система, которая использует PHP для создания файла GDBM, на который затем ссылается Apache для выполнения базовой аутентификации. Он работает с 1999 года со многими версиями apache и PHP и до сих пор, когда я делаю обновление в соответствии с корпоративной политикой.

Если я запускаю php из командной строки (указывая соответствующий файл php.ini), то функциональность DBA работает правильно.

Однако, когда он вызывается из Apache в тот момент, когда он вызывает dba_open (…) из PHP, я получаю:

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

но теперь, когда ему удалось перестроить файл данных GDBM с помощью командной строки PHP, он работает правильно — следовательно, кажется, что могут быть (или были) проблемы с кодировкой символов или что-то подобное

Внутри 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

Я предполагаю, что это должно быть связано с несовпадением библиотек на машине, но я не могу придумать больше способов отладки. Любая помощь или предложения будут высоко оценены.

0

Решение

ХОРОШО. сортируется!

Сначала я скачал исходный код gdbm и собрал / установил его.

Затем я добавил в строки настройки PHP и Apache явный —with-gdbm = / usr / src / gdbm-1.11.

Затем я заметил, что новый gdbm установил сам / usr / local / lib, но этого не было в моем пути поиска в ld.so.conf. Поэтому я скопировал файлы и создал правильные ссылки (.so.4 и т. Д.) В / usr / lib64.

Наконец, моя проблема, связанная с тем, что он работал из командной строки, была связана с правами доступа — поскольку после создания версии из командной строки у него больше не было владения apache, необходимого для открытия внутри apache. Для тех, кто следит за конкретной ошибкой, которую вы видите для dba_open ():

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

что, конечно, было бы весьма полезно, кроме всего прочего «дьявольского ада», выбрасывающего вещи со следа.

Во всяком случае, в конце концов решение игры с использованием 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, все начало самообладываться.

0

Другие решения

Других решений пока нет …