Joomla 3.6-3.7-后端白页-致命错误login.php

时间:2018-06-29 11:37:51

标签: login joomla fatal-error

我在Joomla网站的后端出现错误。当我输入用户名和密码时,我会看到以下错误:

  

注意:未定义的偏移量:第323行的/web/htdocs/www.namesite.it/home/libraries/joomla/input/input.php中的值为0

     

致命错误:在第33行的/web/htdocs/www.namesite.it/home/administrator/components/com_login/models/login.php中的非对象上调用成员函数get() >

如果我停用com_login,则可以看到常规结构,但可以在后端输入...

这是文件administrator/components/com_login/models/login.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_login
 *
 * @copyright   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Login Model
 *
 * @since  1.5
 */
class LoginModelLogin extends JModelLegacy
{
    /**
     * Method to auto-populate the model state.
     *
     * Note. Calling getState in this method will result in recursion.
     *
     * @return  void
     *
     * @since   1.6
     */
    protected function populateState()
    {
        $input = JFactory::getApplication()->input->getInputForRequestMethod();

        $credentials = array(
            'username'  => $input->get('username', '', 'USERNAME'),
            'password'  => $input->get('passwd', '', 'RAW'),
            'secretkey' => $input->get('secretkey', '', 'RAW'),
        );
        $this->setState('credentials', $credentials);

        // Check for return URL from the request first.
        if ($return = $input->get('return', '', 'BASE64'))
        {
            $return = base64_decode($return);

            if (!JUri::isInternal($return))
            {
                $return = '';
            }
        }

        // Set the return URL if empty.
        if (empty($return))
        {
            $return = 'index.php';
        }

        $this->setState('return', $return);
    }

    /**
     * Get the administrator login module by name (real, eg 'login' or folder, eg 'mod_login').
     *
     * @param   string  $name   The name of the module.
     * @param   string  $title  The title of the module, optional.
     *
     * @return  object  The Module object.
     *
     * @since   11.1
     */
    public static function getLoginModule($name = 'mod_login', $title = null)
    {
        $result = null;
        $modules = self::_load($name);
        $total = count($modules);

        for ($i = 0; $i < $total; $i++)
        {
            // Match the title if we're looking for a specific instance of the module.
            if (!$title || $modules[$i]->title == $title)
            {
                $result = $modules[$i];
                break;
            }
        }

        // If we didn't find it, and the name is mod_something, create a dummy object.
        if (is_null($result) && substr($name, 0, 4) == 'mod_')
        {
            $result = new stdClass;
            $result->id = 0;
            $result->title = '';
            $result->module = $name;
            $result->position = '';
            $result->content = '';
            $result->showtitle = 0;
            $result->control = '';
            $result->params = '';
            $result->user = 0;
        }

        return $result;
    }

    /**
     * Load login modules.
     *
     * Note that we load regardless of state or access level since access
     * for public is the only thing that makes sense since users are not logged in
     * and the module lets them log in.
     * This is put in as a failsafe to avoid super user lock out caused by an unpublished
     * login module or by a module set to have a viewing access level that is not Public.
     *
     * @param   string  $module  The name of the module.
     *
     * @return  array
     *
     * @since   11.1
     */
    protected static function _load($module)
    {
        static $clean;

        if (isset($clean))
        {
            return $clean;
        }

        $app = JFactory::getApplication();
        $lang = JFactory::getLanguage()->getTag();
        $clientId = (int) $app->getClientId();

        $cache = JFactory::getCache('com_modules', '');
        $cacheid = md5(serialize(array($clientId, $lang)));
        $loginmodule = array();

        if (!($clean = $cache->get($cacheid)))
        {
            $db = JFactory::getDbo();

            $query = $db->getQuery(true)
                ->select('m.id, m.title, m.module, m.position, m.showtitle, m.params')
                ->from('#__modules AS m')
                ->where('m.module =' . $db->quote($module) . ' AND m.client_id = 1')
                ->join('LEFT', '#__extensions AS e ON e.element = m.module AND e.client_id = m.client_id')
                ->where('e.enabled = 1');

            // Filter by language.
            if ($app->isSite() && $app->getLanguageFilter())
            {
                $query->where('m.language IN (' . $db->quote($lang) . ',' . $db->quote('*') . ')');
            }

            $query->order('m.position, m.ordering');

            // Set the query.
            $db->setQuery($query);

            try
            {
                $modules = $db->loadObjectList();
            }
            catch (RuntimeException $e)
            {
                JError::raiseWarning(500, JText::sprintf('JLIB_APPLICATION_ERROR_MODULE_LOAD', $e->getMessage()));

                return $loginmodule;
            }

            // Return to simple indexing that matches the query order.
            $loginmodule = $modules;

            $cache->store($loginmodule, $cacheid);
        }

        return $loginmodule;
    }
}

我能解决吗?谢谢

1 个答案:

答案 0 :(得分:1)

我们已找到问题的原因。 Patchman最近发布了一些joomla文件的补丁,这些补丁在应用时破坏了joomla网站。

如果您(或您的提供商)使用的是Patchman,则回滚补丁应该可以解决问题。