2

我有一个带有 phpnuke 的网站,但不是我创建的。但现在我负责,它不起作用。它以前工作,但现在它不工作。

首先它只是没有来。只是一个空白页。我发现问题出在这条线mainfile.php

if (!ini_get('register_globals')) {
    @import_request_variables("GPC", "");
}

我刚刚发表了评论。现在是第一页,但它在页面顶部给了我这个警告

Strict Standards: Resource ID#10 used as offset, casting to integer (10) in /www/sites/sanad-rahbordi.sbu.ac.ir/httpdocs/db/mysql.php on line 212

Strict Standards: Resource ID#10 used as offset, casting to integer (10) in /www/sites/sanad-rahbordi.sbu.ac.ir/httpdocs/db/mysql.php on line 213

Strict Standards: Resource ID#10 used as offset, casting to integer (10) in /www/sites/sanad-rahbordi.sbu.ac.ir/httpdocs/db/mysql.php on line 212

Strict Standards: Resource ID#10 used as offset, casting to integer (10) in /www/sites/sanad-rahbordi.sbu.ac.ir/httpdocs/db/mysql.php on line 213

这是包含 212 和 213 行的函数mysql.php

function sql_fetchrow($query_id = 0)
{
    if(!$query_id)
    {
        $query_id = $this->query_result;
    }
    if($query_id)
    {
        $this->row[$query_id] = @mysql_fetch_array($query_id); // 212
        return $this->row[$query_id]; // 213
    }
    else
    {
        return false;
}

我通过评论显示了 212 和 213 行。那么问题是什么?我想不通。我尝试在这两行中替换$query_id(int)$query_id,并且错误现在没有显示出来,但是站点不起作用。我的意思是第一页出现了,但是当我点击每个链接时,它只是出现在index.php. 没有链接有效。

4

3 回答 3

3

问题是,您尝试使用资源 id作为数组中的键。这是不可能的,因此 php 将资源 id 转换为整数。

如果您手动转换资源,这将起作用,PHP 不会就此发出警告。"@"隐藏在“mysql_fetch_array”期间发生的任何错误。由于您想查看错误,因此应将其删除。

if($query_id)
{
    $intQueryId = (integer) $query_id;
    $this->row[$intQueryId] = mysql_fetch_array($query_id); // 212
    return $this->row[$intQueryId]; // 213
}

else 缺少一个“{”

    else
    {
      return false;
    }
于 2013-01-19T12:16:52.127 回答
1

总的来说,听起来您正在使用使用 PHP 代码的软件,就像十年前一样。有人升级了下面的 PHP,所以该网站不再工作。

我建议迁移到现代软件,无论是版本还是产品。我认为修补已经突破的东西没有任何用处。作为维护者,你只会给自己带来更多麻烦。

根据它的wiki 页面,它的存在版本从那时起已经有“许多安全修复”。如果您想继续使用该软件,我建议您朝那个方向迁移。

于 2013-01-19T12:13:15.867 回答
0

上述解决方案都对我不起作用。我的解决方案是:

if($query_id) {
     $q_id=$query_id[0];
     $this->row[$q_id] = @mysql_fetch_array($query_id);
     return $this->row[$q_id];
} else {
     return false;
}

希望这会对某人有所帮助。

于 2013-09-02T18:20:44.987 回答