![Daloradius - 未找到类“DB”,但“pear/DB”已被弃用](https://linux22.com/image/702169/Daloradius%20-%20%E6%9C%AA%E6%89%BE%E5%88%B0%E7%B1%BB%E2%80%9CDB%E2%80%9D%EF%BC%8C%E4%BD%86%E2%80%9Cpear%2FDB%E2%80%9D%E5%B7%B2%E8%A2%AB%E5%BC%83%E7%94%A8.png)
我运行 Centos 7、FreeRADIUS 3.0.4、PHP 5.4.16、httpd Apache/2.4.6。
我可以登录 Daloradius 登录屏幕,然后在浏览器的 ../daloradius/dologin.php 页面上收到 ERROR 500。
php日志中的错误:
[Fri Apr 07 15:59:48.455964 2017] [:error] [pid 2145] [client 154.66.144.101:53132] PHP Warning: include_once(DB.php): failed to open stream: No such file or directory in /var/www/html/daloradius/library/opendb.php on line 84, referer: http://server/daloradius/login.php
[Fri Apr 07 15:59:48.456091 2017] [:error] [pid 2145] [client 154.66.144.101:53132] PHP Warning: include_once(): Failed opening 'DB.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/daloradius/library/opendb.php on line 84, referer: http://server/daloradius/login.php
[Fri Apr 07 15:59:48.456241 2017] [:error] [pid 2145] [client 154.66.144.101:53132] PHP Fatal error: Class 'DB' not found in /var/www/html/daloradius/library/opendb.php on line 86, referer: http://server/daloradius/login.php
“服务器”只是我们真正的 FQDN 的占位符。
我读到修复方法是安装 Pear DB,但是它已被弃用,所以我安装了 MDB2 及其 MySQLi 驱动程序。
请协助解决,我非常对这个系统来说是新的。
答案1
是的,daloRADIUS 尚未得到维护。任何属于您安全基础设施的部分都需要持续关注。如果您想要依赖一个表面上已经死亡的软件包,您真的需要认真考虑。如果您不是程序员,并且无法 100% 维护您自己的代码库分支,那么我绝对不会建议您考虑将它用于任何关键任务。
是的,DB 已被弃用 - 尽管我相信他们仍在对其进行安全修补以支持旧版安装... 考虑到如今原生 php 功能,甚至 MDB2 似乎也没有必要。但是,由于我不想重写整个 DAL,我认为 MDB2 可能是阻力最小的路径。这就是迁移 DB => MDB2 所需要的。
首先需要安装 MDB2 类:
shell> pear install MDB2
shell> pear install MDB2_Driver_mysql
然后你必须修补源代码才能实际使用它:
shell> cd /your/daloradius/root
shell> find ./ -type f -exec sed -i 's/DB.php/MDB2.php/g' {} \;
然后,您必须修补源代码以解决 DB 和 MDB2 之间的一些差异:
shell> find ./ -type f -exec sed -i 's/$dbSocket->escapeSimple/$dbSocket->escape/g' {} \;
shell> find ./ -type f -exec sed -i 's/DB_FETCHMODE_ASSOC/MDB2_FETCHMODE_ASSOC/g' {} \;
shell> find ./ -type f -exec sed -i 's/$dbSocket->getOne/$dbSocket->queryOne/g' {} \;
shell> find ./ -type f -exec sed -i 's/$dbSocket->getCol/$dbSocket->queryCol/g' {} \;
shell> sed -i "s/MDB2::connect\x28\x24dbConnectString/MDB2::connect\x28\x24dbConnectString, array\x28\'result_buffering\' => true, \'portability\' => MDB2_PORTABILITY_ALL ^ MDB2_PORTABILITY_FIX_CASE\x29/g" library/opendb.php
我已经测试了大部分功能,没有发现任何问题,不过我可能错过了一些东西,因为我不使用计费功能。我注意到日志中有一些与时区相关的预先存在的警告,但除此之外,它看起来很干净。
使用这些命令时要非常小心,如果输入/复制不正确或者在错误的目录中运行,它们可能会造成很大的破坏。
答案2
我遇到了类似的错误,centos 7,daloradius-0.9-9。我做了以下操作
yum install php-pear php-pear-DB
现在一切都好