| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680 | <?php/* vim: set expandtab sw=4 ts=4 sts=4: *//** * Main loader script * * @package PhpMyAdmin */use PhpMyAdmin\Charsets;use PhpMyAdmin\Config;use PhpMyAdmin\Core;use PhpMyAdmin\Display\GitRevision;use PhpMyAdmin\LanguageManager;use PhpMyAdmin\Message;use PhpMyAdmin\RecentFavoriteTable;use PhpMyAdmin\Relation;use PhpMyAdmin\Response;use PhpMyAdmin\Sanitize;use PhpMyAdmin\Server\Select;use PhpMyAdmin\ThemeManager;use PhpMyAdmin\Url;use PhpMyAdmin\Util;/** * Gets some core libraries and displays a top message if required */require_once 'libraries/common.inc.php';/** * pass variables to child pages */$drops = array(    'lang',    'server',    'collation_connection',    'db',    'table');foreach ($drops as $each_drop) {    if (array_key_exists($each_drop, $_GET)) {        unset($_GET[$each_drop]);    }}unset($drops, $each_drop);/* * Black list of all scripts to which front-end must submit data. * Such scripts must not be loaded on home page. * */$target_blacklist = array (    'import.php', 'export.php');// If we have a valid target, let's load that script insteadif (! empty($_REQUEST['target'])    && is_string($_REQUEST['target'])    && ! preg_match('/^index/', $_REQUEST['target'])    && ! in_array($_REQUEST['target'], $target_blacklist)    && Core::checkPageValidity($_REQUEST['target'], [], true)) {    include $_REQUEST['target'];    exit;}if (isset($_REQUEST['ajax_request']) && ! empty($_REQUEST['access_time'])) {    exit;}// user selected font sizeif (isset($_POST['set_fontsize']) && preg_match('/^[0-9.]+(px|em|pt|\%)$/', $_POST['set_fontsize'])) {    $GLOBALS['PMA_Config']->setUserValue(        null,        'FontSize',        $_POST['set_fontsize'],        '82%'    );    header('Location: index.php' . Url::getCommonRaw());    exit();}// if user selected a themeif (isset($_POST['set_theme'])) {    $tmanager = ThemeManager::getInstance();    $tmanager->setActiveTheme($_POST['set_theme']);    $tmanager->setThemeCookie();    header('Location: index.php' . Url::getCommonRaw());    exit();}// Change collation connectionif (isset($_POST['collation_connection'])) {    $GLOBALS['PMA_Config']->setUserValue(        null,        'DefaultConnectionCollation',        $_POST['collation_connection'],        'utf8mb4_unicode_ci'    );    header('Location: index.php' . Url::getCommonRaw());    exit();}// See FAQ 1.34if (! empty($_REQUEST['db'])) {    $page = null;    if (! empty($_REQUEST['table'])) {        $page = Util::getScriptNameForOption(            $GLOBALS['cfg']['DefaultTabTable'], 'table'        );    } else {        $page = Util::getScriptNameForOption(            $GLOBALS['cfg']['DefaultTabDatabase'], 'database'        );    }    include $page;    exit;}$response = Response::getInstance();/** * Check if it is an ajax request to reload the recent tables list. */if ($response->isAjax() && ! empty($_REQUEST['recent_table'])) {    $response->addJSON(        'list',        RecentFavoriteTable::getInstance('recent')->getHtmlList()    );    exit;}if ($GLOBALS['PMA_Config']->isGitRevision()) {    if (isset($_REQUEST['git_revision']) && $response->isAjax()) {        GitRevision::display();        exit;    }    echo '<div id="is_git_revision"></div>';}// Handles some variables that may have been sent by the calling script$GLOBALS['db'] = '';$GLOBALS['table'] = '';$show_query = '1';// Any message to display?if (! empty($message)) {    echo Util::getMessage($message);    unset($message);}if (isset($_SESSION['partial_logout'])) {    Message::success(        __('You were logged out from one server, to logout completely from phpMyAdmin, you need to logout from all servers.')    )->display();    unset($_SESSION['partial_logout']);}$common_url_query =  Url::getCommon();$mysql_cur_user_and_host = '';// when $server > 0, a server has been chosen so we can display// all MySQL-related informationif ($server > 0) {    include 'libraries/server_common.inc.php';    // Use the verbose name of the server instead of the hostname    // if a value is set    $server_info = '';    if (! empty($cfg['Server']['verbose'])) {        $server_info .= htmlspecialchars($cfg['Server']['verbose']);        if ($GLOBALS['cfg']['ShowServerInfo']) {            $server_info .= ' (';        }    }    if ($GLOBALS['cfg']['ShowServerInfo'] || empty($cfg['Server']['verbose'])) {        $server_info .= $GLOBALS['dbi']->getHostInfo();    }    if (! empty($cfg['Server']['verbose']) && $GLOBALS['cfg']['ShowServerInfo']) {        $server_info .= ')';    }    $mysql_cur_user_and_host = $GLOBALS['dbi']->fetchValue('SELECT USER();');    // should we add the port info here?    $short_server_info = (!empty($GLOBALS['cfg']['Server']['verbose'])                ? $GLOBALS['cfg']['Server']['verbose']                : $GLOBALS['cfg']['Server']['host']);}echo '<div id="maincontainer">' , "\n";// Anchor for favorite tables synchronization.echo RecentFavoriteTable::getInstance('favorite')->getHtmlSyncFavoriteTables();echo '<div id="main_pane_left">';if ($server > 0 || count($cfg['Servers']) > 1) {    if ($cfg['DBG']['demo']) {        echo '<div class="group">';        echo '<h2>' , __('phpMyAdmin Demo Server') , '</h2>';        echo '<p class="cfg_dbg_demo">';        printf(            __(                'You are using the demo server. You can do anything here, but '                . 'please do not change root, debian-sys-maint and pma users. '                . 'More information is available at %s.'            ),            '<a href="url.php?url=https://demo.phpmyadmin.net/" target="_blank" rel="noopener noreferrer">demo.phpmyadmin.net</a>'        );        echo '</p>';        echo '</div>';    }    echo '<div class="group">';    echo '<h2>' , __('General settings') , '</h2>';    echo '<ul>';    /**     * Displays the MySQL servers choice form     */    if ($cfg['ServerDefault'] == 0        || (! $cfg['NavigationDisplayServers']        && (count($cfg['Servers']) > 1        || ($server == 0 && count($cfg['Servers']) == 1)))    ) {        echo '<li id="li_select_server" class="no_bullets" >';        echo Util::getImage('s_host') , " "            , Select::render(true, true);        echo '</li>';    }    /**     * Displays the mysql server related links     */    if ($server > 0) {        include_once 'libraries/check_user_privileges.inc.php';        // Logout for advanced authentication        if ($cfg['Server']['auth_type'] != 'config') {            if ($cfg['ShowChgPassword']) {                $conditional_class = 'ajax';                Core::printListItem(                    Util::getImage('s_passwd') . " " . __(                        'Change password'                    ),                    'li_change_password',                    'user_password.php' . $common_url_query,                    null,                    null,                    'change_password_anchor',                    "no_bullets",                    $conditional_class                );            }        } // end if        echo '    <li id="li_select_mysql_collation" class="no_bullets" >';        echo '        <form class="disableAjax" method="post" action="index.php">' , "\n"           . Url::getHiddenInputs(null, null, 4, 'collation_connection')           . '            <label for="select_collation_connection">' . "\n"           . '                ' . Util::getImage('s_asci')            . " " . __('Server connection collation') . "\n"           // put the doc link in the form so that it appears on the same line           . Util::showMySQLDocu('Charset-connection')           . ': ' .  "\n"           . '            </label>' . "\n"           . Charsets::getCollationDropdownBox(               $GLOBALS['dbi'],               $GLOBALS['cfg']['Server']['DisableIS'],               'collation_connection',               'select_collation_connection',               $collation_connection,               true,               true           )           . '        </form>' . "\n"           . '    </li>' . "\n";    } // end of if ($server > 0)    echo '</ul>';    echo '</div>';}echo '<div class="group">';echo '<h2>' , __('Appearance settings') , '</h2>';echo '  <ul>';// Displays language selection combo$language_manager = LanguageManager::getInstance();if (empty($cfg['Lang']) && $language_manager->hasChoice()) {    echo '<li id="li_select_lang" class="no_bullets">';    echo Util::getImage('s_lang') , " "        , $language_manager->getSelectorDisplay();    echo '</li>';}// ThemeManager if availableif ($GLOBALS['cfg']['ThemeManager']) {    echo '<li id="li_select_theme" class="no_bullets">';    echo Util::getImage('s_theme') , " "            ,  ThemeManager::getInstance()->getHtmlSelectBox();    echo '</li>';}echo '<li id="li_select_fontsize">';echo Config::getFontsizeForm();echo '</li>';echo '</ul>';// User preferencesif ($server > 0) {    echo '<ul>';    Core::printListItem(        Util::getImage('b_tblops') . " " . __(            'More settings'        ),        'li_user_preferences',        'prefs_manage.php' . $common_url_query,        null,        null,        null,        "no_bullets"    );    echo '</ul>';}echo '</div>';echo '</div>';echo '<div id="main_pane_right">';if ($server > 0 && $GLOBALS['cfg']['ShowServerInfo']) {    echo '<div class="group">';    echo '<h2>' , __('Database server') , '</h2>';    echo '<ul>' , "\n";    Core::printListItem(        __('Server:') . ' ' . $server_info,        'li_server_info'    );    Core::printListItem(        __('Server type:') . ' ' . Util::getServerType(),        'li_server_type'    );    Core::printListItem(        __('Server connection:') . ' ' . Util::getServerSSL(),        'li_server_type'    );    Core::printListItem(        __('Server version:')        . ' '        . $GLOBALS['dbi']->getVersionString() . ' - ' . $GLOBALS['dbi']->getVersionComment(),        'li_server_version'    );    Core::printListItem(        __('Protocol version:') . ' ' . $GLOBALS['dbi']->getProtoInfo(),        'li_mysql_proto'    );    Core::printListItem(        __('User:') . ' ' . htmlspecialchars($mysql_cur_user_and_host),        'li_user_info'    );    echo '    <li id="li_select_mysql_charset">';    echo '        ' , __('Server charset:') , ' '       . '        <span lang="en" dir="ltr">';    $unicode = Charsets::$mysql_charset_map['utf-8'];    $charsets = Charsets::getMySQLCharsetsDescriptions(        $GLOBALS['dbi'],        $GLOBALS['cfg']['Server']['DisableIS']    );    echo '           ' , $charsets[$unicode], ' (' . $unicode, ')';    echo '        </span>'       . '    </li>'       . '  </ul>'       . ' </div>';}if ($GLOBALS['cfg']['ShowServerInfo'] || $GLOBALS['cfg']['ShowPhpInfo']) {    echo '<div class="group">';    echo '<h2>' , __('Web server') , '</h2>';    echo '<ul>';    if ($GLOBALS['cfg']['ShowServerInfo']) {        Core::printListItem($_SERVER['SERVER_SOFTWARE'], 'li_web_server_software');        if ($server > 0) {            $client_version_str = $GLOBALS['dbi']->getClientInfo();            if (preg_match('#\d+\.\d+\.\d+#', $client_version_str)) {                $client_version_str = 'libmysql - ' . $client_version_str;            }            Core::printListItem(                __('Database client version:') . ' ' . $client_version_str,                'li_mysql_client_version'            );            $php_ext_string = __('PHP extension:') . ' ';            $extensions = Util::listPHPExtensions();            foreach ($extensions as $extension) {                $php_ext_string  .= '  ' . $extension                    . Util::showPHPDocu('book.' . $extension . '.php');            }            Core::printListItem(                $php_ext_string,                'li_used_php_extension'            );            $php_version_string = __('PHP version:') . ' ' . phpversion();            Core::printListItem(                $php_version_string,                'li_used_php_version'            );        }    }    if ($cfg['ShowPhpInfo']) {        Core::printListItem(            __('Show PHP information'),            'li_phpinfo',            'phpinfo.php' . $common_url_query,            null,            '_blank'        );    }    echo '  </ul>';    echo ' </div>';}echo '<div class="group pmagroup">';echo '<h2>phpMyAdmin</h2>';echo '<ul>';$class = null;if ($GLOBALS['cfg']['VersionCheck']) {    $class = 'jsversioncheck';}Core::printListItem(    __('Version information:') . ' <span class="version">' . PMA_VERSION . '</span>',    'li_pma_version',    null,    null,    null,    null,    $class);Core::printListItem(    __('Documentation'),    'li_pma_docs',    Util::getDocuLink('index'),    null,    '_blank');// does not work if no target specified, don't know whyCore::printListItem(    __('Official Homepage'),    'li_pma_homepage',    Core::linkURL('https://www.phpmyadmin.net/'),    null,    '_blank');Core::printListItem(    __('Contribute'),    'li_pma_contribute',    Core::linkURL('https://www.phpmyadmin.net/contribute/'),    null,    '_blank');Core::printListItem(    __('Get support'),    'li_pma_support',    Core::linkURL('https://www.phpmyadmin.net/support/'),    null,    '_blank');Core::printListItem(    __('List of changes'),    'li_pma_changes',    'changelog.php' . Url::getCommon(),    null,    '_blank');Core::printListItem(    __('License'),    'li_pma_license',    'license.php' . Url::getCommon(),    null,    '_blank');echo '    </ul>';echo ' </div>';echo '</div>';echo '</div>';/** * mbstring is used for handling multibytes inside parser, so it is good * to tell user something might be broken without it, see bug #1063149. */if (! extension_loaded('mbstring')) {    trigger_error(        __(            'The mbstring PHP extension was not found and you seem to be using'            . ' a multibyte charset. Without the mbstring extension phpMyAdmin'            . ' is unable to split strings correctly and it may result in'            . ' unexpected results.'        ),        E_USER_WARNING    );}/** * Missing functionality */if (! extension_loaded('curl') && ! ini_get('allow_url_fopen')) {    trigger_error(        __(            'The curl extension was not found and allow_url_fopen is '            . 'disabled. Due to this some features such as error reporting '            . 'or version check are disabled.'        )    );}if ($cfg['LoginCookieValidityDisableWarning'] == false) {    /**     * Check whether session.gc_maxlifetime limits session validity.     */    $gc_time = (int)ini_get('session.gc_maxlifetime');    if ($gc_time < $GLOBALS['cfg']['LoginCookieValidity'] ) {        trigger_error(            __(                'Your PHP parameter [a@https://secure.php.net/manual/en/session.' .                'configuration.php#ini.session.gc-maxlifetime@_blank]session.' .                'gc_maxlifetime[/a] is lower than cookie validity configured ' .                'in phpMyAdmin, because of this, your login might expire sooner ' .                'than configured in phpMyAdmin.'            ),            E_USER_WARNING        );    }}/** * Check whether LoginCookieValidity is limited by LoginCookieStore. */if ($GLOBALS['cfg']['LoginCookieStore'] != 0    && $GLOBALS['cfg']['LoginCookieStore'] < $GLOBALS['cfg']['LoginCookieValidity']) {    trigger_error(        __(            'Login cookie store is lower than cookie validity configured in ' .            'phpMyAdmin, because of this, your login will expire sooner than ' .            'configured in phpMyAdmin.'        ),        E_USER_WARNING    );}/** * Check if user does not have defined blowfish secret and it is being used. */if (! empty($_SESSION['encryption_key'])) {    if (empty($GLOBALS['cfg']['blowfish_secret'])) {        trigger_error(            __(                'The configuration file now needs a secret passphrase (blowfish_secret).'            ),            E_USER_WARNING        );    } elseif (strlen($GLOBALS['cfg']['blowfish_secret']) < 32) {        trigger_error(            __(                'The secret passphrase in configuration (blowfish_secret) is too short.'            ),            E_USER_WARNING        );    }}/** * Check for existence of config directory which should not exist in * production environment. */if (@file_exists('config')) {    trigger_error(        __(            'Directory [code]config[/code], which is used by the setup script, ' .            'still exists in your phpMyAdmin directory. It is strongly ' .            'recommended to remove it once phpMyAdmin has been configured. ' .            'Otherwise the security of your server may be compromised by ' .            'unauthorized people downloading your configuration.'        ),        E_USER_WARNING    );}$relation = new Relation();if ($server > 0) {    $cfgRelation = $relation->getRelationsParam();    if (! $cfgRelation['allworks']        && $cfg['PmaNoRelation_DisableWarning'] == false    ) {        $msg_text = __(            'The phpMyAdmin configuration storage is not completely '            . 'configured, some extended features have been deactivated. '            . '%sFind out why%s. '        );        if ($cfg['ZeroConf'] == true) {            $msg_text .= '<br>' .                __(                    'Or alternately go to \'Operations\' tab of any database '                    . 'to set it up there.'                );        }        $msg = Message::notice($msg_text);        $msg->addParamHtml('<a href="./chk_rel.php' . $common_url_query . '">');        $msg->addParamHtml('</a>');        /* Show error if user has configured something, notice elsewhere */        if (!empty($cfg['Servers'][$server]['pmadb'])) {            $msg->isError(true);        }        $msg->display();    } // end if}/** * Warning about Suhosin only if its simulation mode is not enabled */if ($cfg['SuhosinDisableWarning'] == false    && ini_get('suhosin.request.max_value_length')    && ini_get('suhosin.simulation') == '0') {    trigger_error(        sprintf(            __(                'Server running with Suhosin. Please refer to %sdocumentation%s ' .                'for possible issues.'            ),            '[doc@faq1-38]',            '[/doc]'        ),        E_USER_WARNING    );}/* Missing template cache */if (is_null($GLOBALS['PMA_Config']->getTempDir('twig'))) {    trigger_error(        sprintf(            __('The $cfg[\'TempDir\'] (%s) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.'),            $GLOBALS['PMA_Config']->get('TempDir')        ),        E_USER_WARNING    );}/** * Warning about incomplete translations. * * The data file is created while creating release by ./scripts/remove-incomplete-mo */if (@file_exists('libraries/language_stats.inc.php')) {    include 'libraries/language_stats.inc.php';    /*     * This message is intentionally not translated, because we're     * handling incomplete translations here and focus on english     * speaking users.     */    if (isset($GLOBALS['language_stats'][$lang])        && $GLOBALS['language_stats'][$lang] < $cfg['TranslationWarningThreshold']    ) {        trigger_error(            'You are using an incomplete translation, please help to make it '            . 'better by [a@https://www.phpmyadmin.net/translate/'            . '@_blank]contributing[/a].',            E_USER_NOTICE        );    }}
 |