PHP致命错误:未捕获MDB2错误:未知错误代码:-1\n

PHP致命错误:未捕获MDB2错误:未知错误代码:-1\n,php,pear,mdb2,Php,Pear,Mdb2,我正在努力让我们的旧剧本重新发挥作用 前言;我们使用的是一个由去世的人编写/修改的自定义脚本。我们不能用别的东西。脚本在旧服务器上运行,但是服务器已经过时了,所以我正在尝试将所有内容迁移到新服务器上当前(旧)服务器仍在运行CentOS 5.x以及PHP 5.3和MySQL 5.5。所以它很旧。 无论如何,经过几个小时的调整后,我终于在CentOS 6.x服务器和MySQL 5.6上运行了它。所以这很好。我可能会在CentOS 7.x上运行它,这将是一个不同的步骤。目前的主要问题是脚本拒绝在PHP

我正在努力让我们的旧剧本重新发挥作用

前言;我们使用的是一个由去世的人编写/修改的自定义脚本。我们不能用别的东西。脚本在旧服务器上运行,但是服务器已经过时了,所以我正在尝试将所有内容迁移到新服务器上当前(旧)服务器仍在运行CentOS 5.x以及PHP 5.3和MySQL 5.5。所以它很旧。

无论如何,经过几个小时的调整后,我终于在CentOS 6.x服务器和MySQL 5.6上运行了它。所以这很好。我可能会在CentOS 7.x上运行它,这将是一个不同的步骤。目前的主要问题是脚本拒绝在PHP5.3以外的任何更高版本上运行。见鬼,我甚至无法摆脱它在“升级”到PHP5.4后向我抛出的第一条错误消息

据我所知,这个问题是由一个名为:HTTP_Session2的(非常过时的)PEAR模块引起的,有关这个PEAR模块的更多信息,请参阅

显示的错误如下:

[Fri May 31 14:05:42 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:42 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:42 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:42 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:42 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:42 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:43 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:43 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:44 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
[Fri May 31 14:05:44 2019] [error] [client 192.168.0.1] PHP Fatal error:  Uncaught MDB2 Error: unknown error Code: -1\n  thrown in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 187
该代码的完整部分是:

    169     /**
    170      * Read session data
    171      *
    172      * @param string $id The Id!
    173      *
    174      * @return mixed
    175      * @throws HTTP_Session2_Exception An exception!?
    176      * @todo   Get rid off sprintf()
    177      */
    178     public function read($id)
    179     {
    180         $query = sprintf("SELECT data FROM %s WHERE id = %s AND expiry >= %d",
    181             $this->options['table'],
    182             $this->db->quote(md5($id)),
    183             time());
    184
    185         $result = $this->db->queryOne($query);
    186         if (MDB2::isError($result)) {
    187             throw new HTTP_Session2_Exception($result->getMessage(),
    188                 $result->getCode());
    189         }
    190         $this->crc = strlen($result) . crc32($result);
    191         return $result;
    192     }
显然是第187行导致了错误

到目前为止我尝试了什么?

请注意,我根本不是编码专家。所以我真的尽力了。我已经在互联网、论坛和GitHub上搜索了此错误的解决方案或解决方法。但是一点运气都没有

我还尝试删除/注释掉这部分代码,但这会导致新的错误。例如:

Fatal error: Class HTTP_Session2_Container_MDB2 contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (HTTP_Session2_Container_Interface::read) in /usr/share/pear/HTTP/Session2/Container/MDB2.php on line 55
我还尝试更新所有PEAR模块,但是有些模块根本没有任何更新(包括/尤其是HTTP_Session2模块)

因此,我正在寻找一个可行的解决方案或变通办法。因此,我可以在服务器上使用更新的PHP版本。如果没有,我将使用PHP5.3。虽然服务器只能由我们访问,但出于各种原因,我宁愿更新它

也许还可以从所有代码中完全删除HTTP_Session2模块,或者通常禁用它?我不知道这对应用程序是否重要。我注意到会话被记录下来了。但谁知道呢?如果它只是用来显示谁目前在线或类似情况,那么删除它可能是安全的

无论如何,提前感谢您查看此线程。如果您需要更多信息或其他任何信息,请告诉我,我将尽力提供尽可能多的信息

更新 也许我是个十足的白痴,但我把所有对“HTTP_Session2”的引用都去掉了(在它所在的每个文件中)。结果;接口正在加载(这是PHP5.4上的第一次),但是。。。由于某种原因,我不能再登录了。我猜它真的需要它

url也发生了一些明显的变化,现在显示:

hxxp://domain.com/index.php?view=login&PHPSESSID=
而不是:

hxxp://domain.com/index.php?view=start&session=56d1fdf45cf1400e8e75f

所以我想这是行不通的。有人有不同的想法吗?

我想你的问题是库
HTTP\u Session2
MDB2
只支持PHP5.2.0,这些都是非常旧的软件包,很久没有更新过。我可能错了,但我建议去掉那些pear包,找一个做相同或相似的作曲家库,遗憾的是,你将不得不重构所有东西。希望此帮助当您说“我们不能使用任何其他东西”(与自定义脚本相关)时,如果您愿意,可以指定原因。如果没有明确的理由,我觉得这听起来像是一个假设,可能是错误的(没有更多细节读者就无法知道)。例如,一些企业反对重写现有的代码是可以理解的,因为他们认为现有的问题微不足道,他们不希望雇佣自由职业者来做这项工作。其影响是,他们在员工时间上花费的钱比他们在自由职业者身上花费的钱要多……将其放入Docker容器中,没必要在这上面浪费你的时间。@emix:我同意,但如果问题作者在上述方面遇到问题,他们可能在设置和维护Docker方面也会遇到问题。