- make use of new PMA_Config class in libraries/common.inc.php

- merged PMA_dl() from libraries/defines.lib.php into libraries/common.inc.php
- libraries/defines.lib.php: removed
This commit is contained in:
Sebastian Mendel
2005-11-30 14:34:49 +00:00
parent 9a715f8c96
commit 220387cd28
2 changed files with 244 additions and 546 deletions

View File

@@ -310,6 +310,96 @@ function PMA_safe_db_list($only_db_check, $controllink, $dblist_cnt, $rs, $userl
return $dblist;
}
/**
* Converts numbers like 10M into bytes
*
* @param string $size
* @return integer $size
*/
function get_real_size( $size = 0 ) {
if ( ! $size ) {
return 0;
}
$scan['MB'] = 1048576;
$scan['Mb'] = 1048576;
$scan['M'] = 1048576;
$scan['m'] = 1048576;
$scan['KB'] = 1024;
$scan['Kb'] = 1024;
$scan['K'] = 1024;
$scan['k'] = 1024;
while ( list( $key ) = each( $scan ) ) {
if ( ( strlen( $size ) > strlen( $key ) )
&& ( substr( $size, strlen( $size ) - strlen( $key ) ) == $key ) ) {
$size = substr($size, 0, strlen($size) - strlen($key)) * $scan[$key];
break;
}
}
return $size;
} // end function get_real_size()
/**
* loads php module
*
* @uses PHP_OS
* @uses extension_loaded()
* @uses ini_get()
* @uses function_exists()
* @uses ob_start()
* @uses phpinfo()
* @uses strip_tags()
* @uses ob_get_contents()
* @uses ob_end_clean()
* @uses preg_match()
* @uses strtoupper()
* @uses substr()
* @uses dl()
* @param string $module name if module to load
* @return boolean success loading module
*/
function PMA_dl( $module ) {
static $dl_allowed = NULL;
if ( extension_loaded( $module ) ) {
return true;
}
if ( NULL === $dl_allowed ) {
if ( ! @ini_get('safe_mode')
&& @ini_get('enable_dl')
&& @function_exists('dl') ) {
ob_start();
phpinfo(INFO_GENERAL); /* Only general info */
$a = strip_tags(ob_get_contents());
ob_end_clean();
if (preg_match('@Thread Safety[[:space:]]*enabled@', $a)) {
if (preg_match('@Server API[[:space:]]*\(CGI\|CLI\)@', $a)) {
$dl_allowed = TRUE;
} else {
$dl_allowed = FALSE;
}
} else {
$dl_allowed = TRUE;
}
} else {
$dl_allowed = FALSE;
}
}
if ( ! $dl_allowed ) {
return false;
}
if ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ) {
$module_file = 'php_' . $module . '.dll';
} else {
$module_file = $module . '.so';
}
return @dl( $module_file );
}
/**
* include here only libraries which contain only function definitions
@@ -319,36 +409,11 @@ function PMA_safe_db_list($only_db_check, $controllink, $dblist_cnt, $rs, $userl
require_once('./libraries/sanitizing.lib.php');
require_once('./libraries/Theme.class.php');
require_once('./libraries/Theme_Manager.class.php');
require_once('./libraries/Config.class.php');
if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
/**
* @TODO add documentation
*/
function get_real_size($size=0) {
/// Converts numbers like 10M into bytes
if (!$size) {
return 0;
}
$scan['MB'] = 1048576;
$scan['Mb'] = 1048576;
$scan['M'] = 1048576;
$scan['m'] = 1048576;
$scan['KB'] = 1024;
$scan['Kb'] = 1024;
$scan['K'] = 1024;
$scan['k'] = 1024;
while (list($key) = each($scan)) {
if ((strlen($size)>strlen($key))&&(substr($size, strlen($size) - strlen($key))==$key)) {
$size = substr($size, 0, strlen($size) - strlen($key)) * $scan[$key];
break;
}
}
return $size;
} // end function
/**
* Displays the maximum size for an upload
*
@@ -791,14 +856,12 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
} // end function
/**
* Send HTTP header, taking IIS limits into account
* ( 600 seems ok)
*
* @param string the header to send
* Send HTTP header, taking IIS limits into account ( 600 seems ok)
*
* @param string $uri the header to send
* @return boolean always true
*/
function PMA_sendHeaderLocation($uri)
function PMA_sendHeaderLocation( $uri )
{
if (PMA_IS_IIS && strlen($uri) > 600) {
@@ -1760,7 +1823,8 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
*
* @return string the results to be echoed or saved in an array
*/
function PMA_linkOrButton($url, $message, $tag_params = array(), $new_form = TRUE, $strip_img = FALSE, $target = '')
function PMA_linkOrButton($url, $message, $tag_params = array(),
$new_form = TRUE, $strip_img = FALSE, $target = '')
{
if ( ! is_array( $tag_params ) )
{
@@ -1779,14 +1843,17 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
$tag_params_strings = array();
foreach( $tag_params as $par_name => $par_value ) {
// htmlentities() only on non javascript
$par_value = substr( $par_name,0 ,2 ) == 'on' ? $par_value : htmlentities( $par_value );
$par_value = substr( $par_name,0 ,2 ) == 'on'
? $par_value
: htmlentities( $par_value );
$tag_params_strings[] = $par_name . '="' . $par_value . '"';
}
// previously the limit was set to 2047, it seems 1000 is better
if (strlen($url) <= 1000) {
$ret = '<a href="' . $url . '" ' . implode( ' ', $tag_params_strings ) . '>' . "\n"
. ' ' . $message . '</a>' . "\n";
$ret = '<a href="' . $url . '" '
. implode( ' ', $tag_params_strings ) . '>' . "\n"
. ' ' . $message . '</a>' . "\n";
}
else {
// no spaces (linebreaks) at all
@@ -1819,23 +1886,32 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
}
foreach ($query_parts AS $query_pair) {
list($eachvar, $eachval) = explode('=', $query_pair);
$ret .= '<input type="hidden" name="' . $subname_open . $eachvar . $subname_close . '" value="' . htmlspecialchars(urldecode($eachval)) . '" />';
$ret .= '<input type="hidden" name="' . $subname_open . $eachvar
. $subname_close . '" value="'
. htmlspecialchars(urldecode($eachval)) . '" />';
} // end while
if (stristr($message, '<img')) {
if ($strip_img) {
$message = trim( strip_tags( $message ) );
$ret .= '<input type="submit"' . $submit_name . ' ' . implode( ' ', $tag_params_strings )
. ' value="' . htmlspecialchars($message) . '" />';
$ret .= '<input type="submit"' . $submit_name . ' '
. implode( ' ', $tag_params_strings )
. ' value="' . htmlspecialchars($message) . '" />';
} else {
$ret .= '<input type="image"' . $submit_name . ' ' . implode( ' ', $tag_params_strings )
. ' src="' . preg_replace('<27>^.*\ssrc="([^"]*)".*$<24>si', '\1', $message) . '"'
. ' value="' . htmlspecialchars(preg_replace('<27>^.*\salt="([^"]*)".*$<24>si', '\1', $message)) . '" />';
$ret .= '<input type="image"' . $submit_name . ' '
. implode( ' ', $tag_params_strings )
. ' src="' . preg_replace(
'<27>^.*\ssrc="([^"]*)".*$<24>si', '\1', $message ) . '"'
. ' value="' . htmlspecialchars(
preg_replace( '<27>^.*\salt="([^"]*)".*$<24>si', '\1',
$message) )
. '" />';
}
} else {
$message = trim( strip_tags( $message ) );
$ret .= '<input type="submit"' . $submit_name . ' ' . implode( ' ', $tag_params_strings )
. ' value="' . htmlspecialchars($message) . '" />';
$ret .= '<input type="submit"' . $submit_name . ' '
. implode( ' ', $tag_params_strings )
. ' value="' . htmlspecialchars($message) . '" />';
}
if ($new_form) {
$ret .= '</form>';
@@ -1872,9 +1948,11 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
}
/**
* Takes a string and outputs each character on a line for itself. Used mainly for horizontalflipped display mode.
* Takes a string and outputs each character on a line for itself. Used
* mainly for horizontalflipped display mode.
* Takes care of special html-characters.
* Fulfills todo-item http://sourceforge.net/tracker/index.php?func=detail&aid=544361&group_id=23067&atid=377411
* Fulfills todo-item
* http://sf.net/tracker/?func=detail&aid=544361&group_id=23067&atid=377411
*
* @param string The string
* @param string The Separator (defaults to "<br />\n")
@@ -2070,17 +2148,26 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
* @access public
* @author Michal Cihar (michal@cihar.com)
*/
function PMA_buttonOrImage($button_name, $button_class, $image_name, $text, $image) {
function PMA_buttonOrImage($button_name, $button_class, $image_name, $text,
$image) {
global $pmaThemeImage, $propicon;
/* Opera has trouble with <input type="image"> */
/* IE has trouble with <button> */
if (PMA_USR_BROWSER_AGENT != 'IE') {
echo '<button class="' . $button_class . '" type="submit" name="' . $button_name . '" value="' . $text . '" title="' . $text . '">' . "\n"
. '<img class="icon" src="' . $pmaThemeImage . $image . '" title="' . $text . '" alt="' . $text . '" width="16" height="16" />' . (($propicon == 'both') ? '&nbsp;' . $text : '') . "\n"
. '</button>' . "\n";
echo '<button class="' . $button_class . '" type="submit"'
.' name="' . $button_name . '" value="' . $text . '"'
.' title="' . $text . '">' . "\n"
.'<img class="icon" src="' . $pmaThemeImage . $image . '"'
.' title="' . $text . '" alt="' . $text . '" width="16"'
.' height="16" />'
.($propicon == 'both' ? '&nbsp;' . $text : '') . "\n"
.'</button>' . "\n";
} else {
echo '<input type="image" name="' . $image_name . '" value="' .$text . '" title="' . $text . '" src="' . $pmaThemeImage . $image . '" />' . (($propicon == 'both') ? '&nbsp;' . $text : '') . "\n";
echo '<input type="image" name="' . $image_name . '" value="'
. $text . '" title="' . $text . '" src="' . $pmaThemeImage
. $image . '" />'
. ($propicon == 'both' ? '&nbsp;' . $text : '') . "\n";
}
} // end function
@@ -2107,9 +2194,12 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
* @access public
* @author Garvin Hicking (pma@supergarv.de)
*/
function PMA_pageselector($url, $rows, $pageNow = 1, $nbTotalPage = 1, $showAll = 200, $sliceStart = 5, $sliceEnd = 5, $percent = 20, $range = 10) {
function PMA_pageselector($url, $rows, $pageNow = 1, $nbTotalPage = 1,
$showAll = 200, $sliceStart = 5, $sliceEnd = 5, $percent = 20,
$range = 10) {
$gotopage = $GLOBALS['strPageNumber']
. ' <select name="goToPage" onchange="goToUrl(this, \'' . $url . '\');">' . "\n";
. ' <select name="goToPage" onchange="goToUrl(this, \''
. $url . '\');">' . "\n";
if ($nbTotalPage < $showAll) {
$pages = range(1, $nbTotalPage);
} else {
@@ -2125,20 +2215,25 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
$pages[] = $i;
}
// garvin: Based on the number of results we add the specified $percent percentate to each page number,
// so that we have a representing page number every now and then to immideately jump to specific pages.
// As soon as we get near our currently chosen page ($pageNow - $range), every page number will be
// garvin: Based on the number of results we add the specified
// $percent percentate to each page number,
// so that we have a representing page number every now and then to
// immideately jump to specific pages.
// As soon as we get near our currently chosen page ($pageNow -
// $range), every page number will be
// shown.
$i = $sliceStart;
$x = $nbTotalPage - $sliceEnd;
$met_boundary = false;
while($i <= $x) {
if ($i >= ($pageNow - $range) && $i <= ($pageNow + $range)) {
// If our pageselector comes near the current page, we use 1 counter increments
// If our pageselector comes near the current page, we use 1
// counter increments
$i++;
$met_boundary = true;
} else {
// We add the percentate increment to our current page to hop to the next one in range
// We add the percentate increment to our current page to
// hop to the next one in range
$i = $i + floor($nbTotalPage / $percent);
// Make sure that we do not cross our boundaries.
@@ -2175,7 +2270,9 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
/**
* @TODO add documentation
*/
function PMA_generateFieldSpec($name, $type, $length, $attribute, $collation, $null, $default, $default_current_timestamp, $extra, $comment='', &$field_primary, $index, $default_orig = FALSE) {
function PMA_generateFieldSpec($name, $type, $length, $attribute,
$collation, $null, $default, $default_current_timestamp, $extra,
$comment='', &$field_primary, $index, $default_orig = FALSE) {
// $default_current_timestamp has priority over $default
// TODO: on the interface, some js to clear the default value
@@ -2192,7 +2289,9 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
$query .= ' ' . $attribute;
}
if (PMA_MYSQL_INT_VERSION >= 40100 && !empty($collation) && $collation != 'NULL' && preg_match('@^(TINYTEXT|TEXT|MEDIUMTEXT|LONGTEXT|VARCHAR|CHAR|ENUM|SET)$@i', $type)) {
if ( PMA_MYSQL_INT_VERSION >= 40100 && !empty($collation)
&& $collation != 'NULL'
&& preg_match('@^(TINYTEXT|TEXT|MEDIUMTEXT|LONGTEXT|VARCHAR|CHAR|ENUM|SET)$@i', $type)) {
$query .= PMA_generateCharsetQueryPart($collation);
}
@@ -2238,9 +2337,14 @@ window.parent.updateTableTitle( '<?php echo $uni_tbl; ?>', '<?php echo PMA_jsFor
/**
* @TODO add documentation
*/
function PMA_generateAlterTable($oldcol, $newcol, $type, $length, $attribute, $collation, $null, $default, $default_current_timestamp, $extra, $comment='', $default_orig) {
function PMA_generateAlterTable( $oldcol, $newcol, $type, $length,
$attribute, $collation, $null, $default, $default_current_timestamp,
$extra, $comment='', $default_orig ) {
$empty_a = array();
return PMA_backquote($oldcol) . ' ' . PMA_generateFieldSpec($newcol, $type, $length, $attribute, $collation, $null, $default, $default_current_timestamp, $extra, $comment, $empty_a, -1, $default_orig);
return PMA_backquote($oldcol) . ' '
. PMA_generateFieldSpec( $newcol, $type, $length, $attribute,
$collation, $null, $default, $default_current_timestamp, $extra,
$comment, $empty_a, -1, $default_orig );
} // end function
/**
@@ -2356,49 +2460,46 @@ require_once('./libraries/grab_globals.lib.php');
$GLOBALS['PMA_errors'] = array();
/**
* Gets constants that defines the PHP version number.
* This include must be located physically before any code that needs to
* reference the constants, else PHP 3.0.16 won't be happy.
*/
require_once('./libraries/defines.lib.php');
/******************************************************************************/
/* parsing config file label_parsing_config_file */
/**
* 2004-06-30 rabus: Ensure, that $cfg variables are not set somwhere else
* before including the config file.
*/
unset($cfg);
/**
* Set default configuration values.
*/
include './config.default.php';
// Remember default server config
$default_server = $cfg['Servers'][1];
// Drop all server, as they have to be configured by user
unset($cfg['Servers']);
/**
* Parses the configuration file and gets some constants used to define
* versions of phpMyAdmin/php/mysql...
*/
$success_apply_user_config = false;
// We can not use include as it fails on parse error
$config_file = './config.inc.php';
if ( file_exists( $config_file ) ) {
$old_error_reporting = error_reporting( 0 );
if ( function_exists( 'file_get_contents' ) ) {
$success_apply_user_config = eval( '?>' . file_get_contents( $config_file ) );
} else {
$success_apply_user_config =
eval( '?>' . implode( '\n', file( $config_file ) ) );
if ( empty( $_SESSION['PMA_Config'] ) ) {
/**
* We really need this one!
*/
if (!function_exists('preg_replace')) {
header( 'Location: error.php'
. '?lang=' . urlencode( $available_languages[$lang][2] )
. '&char=' . urlencode( $charset )
. '&dir=' . urlencode( $text_dir )
. '&type=' . urlencode( $strError )
. '&error=' . urlencode(
strtr( sprintf( $strCantLoad, 'pcre' ),
array('<br />' => '[br]') ) )
. '&' . SID
);
exit();
}
error_reporting( $old_error_reporting );
unset( $old_error_reporting );
} else {
// Do not complain about missing config file
// FIXME: maybe we should issue warning in this case?
$success_apply_user_config = true;
$_SESSION['PMA_Config'] = new PMA_Config( './config.inc.php' );
} elseif ( version_compare( phpversion(), '5', 'lt' ) ) {
$_SESSION['PMA_Config']->__wakeup();
}
if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
$_SESSION['PMA_Config']->checkPmaAbsoluteUri();
}
// BC
$_SESSION['PMA_Config']->enableBc();
/******************************************************************************/
/* loading language file label_loading_language_file */
@@ -2415,32 +2516,23 @@ if (file_exists('./lang/added_messages.php')) {
*/
require_once('./libraries/select_lang.lib.php');
/**
* We really need this one!
* check for errors occured while loading config
*/
if (!function_exists('preg_replace')) {
header( 'Location: error.php'
. '?lang=' . urlencode( $available_languages[$lang][2] )
. '&char=' . urlencode( $charset )
. '&dir=' . urlencode( $text_dir )
. '&type=' . urlencode( $strError )
. '&error=' . urlencode(
strtr( sprintf( $strCantLoad, 'pcre' ),
array('<br />' => '[br]') ) )
. '&' . SID
);
exit();
}
if ( $success_apply_user_config === FALSE ) {
require_once('./libraries/select_lang.lib.php');
// Displays the error message
if ( $_SESSION['PMA_Config']->error_config_file ) {
$GLOBALS['PMA_errors'][] = $strConfigFileError
.'<br /><br />'
.'<a href="./config.inc.php" target="_blank">config.inc.php</a>';
.'<a href="' . $_SESSION['PMA_Config']->getSource() . '"'
.' target="_blank">' . $_SESSION['PMA_Config']->getSource() . '</a>';
}
if ( $_SESSION['PMA_Config']->error_config_default_file ) {
$GLOBALS['PMA_errors'][] = sprintf( $strConfigDefaultFileError,
$_SESSION['PMA_Config']->default_source );
}
if ( $_SESSION['PMA_Config']->error_pma_uri ) {
$GLOBALS['PMA_errors'][] = sprintf( $strPmaUriError );
}
unset( $success_apply_user_config );
/**
* Servers array fixups.
@@ -2485,79 +2577,12 @@ if (!isset($cfg['Servers']) || count($cfg['Servers']) == 0) {
// Cleanup
unset($default_server);
/**
* Gets constants that defines the PHP version number.
* This include must be located physically before any code that needs to
* reference the constants, else PHP 3.0.16 won't be happy.
*/
require_once('./libraries/defines.lib.php');
// XSS
if (isset($convcharset)) {
$convcharset = PMA_sanitize($convcharset);
}
if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
/**
* Define $is_upload
*/
$is_upload = TRUE;
if (strtolower(@ini_get('file_uploads')) == 'off'
|| @ini_get('file_uploads') == 0) {
$is_upload = FALSE;
}
/**
* Maximum upload size as limited by PHP
* Used with permission from Moodle (http://moodle.org) by Martin Dougiamas
*
* this section generates $max_upload_size in bytes
*/
if (!$filesize = ini_get('upload_max_filesize')) {
$filesize = "5M";
}
$max_upload_size = get_real_size($filesize);
if ($postsize = ini_get('post_max_size')) {
$postsize = get_real_size($postsize);
if ($postsize < $max_upload_size) {
$max_upload_size = $postsize;
}
}
unset( $filesize, $postsize );
/**
* other functions for maximum upload work
*/
/**
* Charset conversion.
*/
require_once('./libraries/charset_conversion.lib.php');
/**
* String handling
*/
require_once('./libraries/string.lib.php');
}
// If zlib output compression is set in the php configuration file, no
// output buffering should be run
if (@ini_get('zlib.output_compression')) {
$cfg['OBGzip'] = FALSE;
}
// disable output-buffering (if set to 'auto') for IE6, else enable it.
if (strtolower($cfg['OBGzip']) == 'auto') {
if (PMA_USR_BROWSER_AGENT == 'IE' && PMA_USR_BROWSER_VER >= 6 && PMA_USR_BROWSER_VER < 7) {
$cfg['OBGzip'] = FALSE;
} else {
$cfg['OBGzip'] = TRUE;
}
}
/**
* themes
*/
@@ -2584,158 +2609,32 @@ if ( @file_exists( $GLOBALS['pmaThemePath'] . '/layout.inc.php' ) ) {
include( $GLOBALS['pmaThemePath'] . '/layout.inc.php' );
}
/**
* collation_connection
*/
// (could be improved by executing it after the MySQL connection only if
// PMA_MYSQL_INT_VERSION >= 40100 )
if (isset($_COOKIE) && !empty($_COOKIE['pma_collation_connection']) && empty($_POST['collation_connection'])) {
$collation_connection = $_COOKIE['pma_collation_connection'];
}
if (!isset($collation_connection)) {
$collation_connection = $GLOBALS['cfg']['DefaultConnectionCollation'];
}
if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
/**
* $cfg['PmaAbsoluteUri'] is a required directive else cookies won't be
* set properly and, depending on browsers, inserting or updating a
* record might fail
* Charset conversion.
*/
require_once('./libraries/charset_conversion.lib.php');
// Setup a default value to let the people and lazy syadmins work anyway,
// they'll get an error if the autodetect code doesn't work
if (empty($cfg['PmaAbsoluteUri'])) {
/**
* String handling
*/
require_once('./libraries/string.lib.php');
$url = array();
// At first we try to parse REQUEST_URI, it might contain full URI
if (!empty($_SERVER['REQUEST_URI'])) {
$url = parse_url($_SERVER['REQUEST_URI']);
}
// If we don't have scheme, we didn't have full URL so we need to dig deeper
if (empty($url['scheme'])) {
// Scheme
if (!empty($_SERVER['HTTP_SCHEME'])) {
$url['scheme'] = $_SERVER['HTTP_SCHEME'];
} else {
$url['scheme'] = (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http';
}
// Host and port
if (!empty($_SERVER['HTTP_HOST'])) {
if (strpos($_SERVER['HTTP_HOST'], ':') > 0) {
list($url['host'], $url['port']) = explode(':', $_SERVER['HTTP_HOST']);
} else {
$url['host'] = $_SERVER['HTTP_HOST'];
}
} else if (!empty($_SERVER['SERVER_NAME'])) {
$url['host'] = $_SERVER['SERVER_NAME'];
} else {
// Displays the error message
header( 'Location: error.php'
. '?lang=' . urlencode( $available_languages[$lang][2] )
. '&char=' . urlencode( $charset )
. '&dir=' . urlencode( $text_dir )
. '&type=' . urlencode( $strError )
. '&error=' . urlencode(
strtr( $strPmaUriError,
array( '<tt>' => '[tt]', '</tt>' => '[/tt]' ) ) )
. '&' . SID
);
exit();
}
// If we didn't set port yet...
if (empty($url['port']) && !empty($_SERVER['SERVER_PORT'])) {
$url['port'] = $_SERVER['SERVER_PORT'];
}
// And finally the path could be already set from REQUEST_URI
if (empty($url['path'])) {
if (!empty($_SERVER['PATH_INFO'])) {
$path = parse_url($_SERVER['PATH_INFO']);
} else {
// PHP_SELF in CGI often points to cgi executable, so use it as last choice
$path = parse_url($_SERVER['PHP_SELF']);
}
$url['path'] = $path['path'];
unset($path);
}
}
// Make url from parts we have
$cfg['PmaAbsoluteUri'] = $url['scheme'] . '://';
// Was there user information?
if (!empty($url['user'])) {
$cfg['PmaAbsoluteUri'] .= $url['user'];
if (!empty($url['pass'])) {
$cfg['PmaAbsoluteUri'] .= ':' . $url['pass'];
}
$cfg['PmaAbsoluteUri'] .= '@';
}
// Add hostname
$cfg['PmaAbsoluteUri'] .= $url['host'];
// Add port, if it not the default one
if (!empty($url['port']) && (($url['scheme'] == 'http' && $url['port'] != 80) || ($url['scheme'] == 'https' && $url['port'] != 443))) {
$cfg['PmaAbsoluteUri'] .= ':' . $url['port'];
}
// And finally path, without script name, the 'a' is there not to
// strip our directory, when path is only /pmadir/ without filename
$path = dirname($url['path'] . 'a');
// To work correctly within transformations overview:
if (defined('PMA_PATH_TO_BASEDIR') && PMA_PATH_TO_BASEDIR == '../../') {
$path = dirname(dirname($path));
}
$cfg['PmaAbsoluteUri'] .= $path . '/';
unset($url);
// We used to display a warning if PmaAbsoluteUri wasn't set, but now
// the autodetect code works well enough that we don't display the
// warning at all. The user can still set PmaAbsoluteUri manually.
// See https://sourceforge.net/tracker/index.php?func=detail&aid=1257134&group_id=23067&atid=377411
} else {
// The URI is specified, however users do often specify this
// wrongly, so we try to fix this.
// Adds a trailing slash et the end of the phpMyAdmin uri if it
// does not exist.
if (substr($cfg['PmaAbsoluteUri'], -1) != '/') {
$cfg['PmaAbsoluteUri'] .= '/';
}
// If URI doesn't start with http:// or https://, we will add
// this.
if (substr($cfg['PmaAbsoluteUri'], 0, 7) != 'http://' && substr($cfg['PmaAbsoluteUri'], 0, 8) != 'https://') {
$cfg['PmaAbsoluteUri'] = ((!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http') . ':'
. (substr($cfg['PmaAbsoluteUri'], 0, 2) == '//' ? '' : '//')
. $cfg['PmaAbsoluteUri'];
}
}
// some variables used mostly for cookies:
$pma_uri_parts = parse_url($cfg['PmaAbsoluteUri']);
$cookie_path = substr($pma_uri_parts['path'], 0, strrpos($pma_uri_parts['path'], '/')) . '/';
$is_https = (isset($pma_uri_parts['scheme']) && $pma_uri_parts['scheme'] == 'https') ? 1 : 0;
//
if ($cfg['ForceSLL'] && !$is_https) {
header(
'Location: ' . preg_replace(
'/^http/', 'https', $cfg['PmaAbsoluteUri'] )
. ( isset( $_SERVER['REQUEST_URI'] )
? preg_replace( '@' . $pma_uri_parts['path'] . '@',
'', $_SERVER['REQUEST_URI'] )
: '' )
. '&' . SID );
/**
* check https connection
*/
if ( $_SESSION['PMA_Config']->get( 'ForceSLL' )
&& ! $_SESSION['PMA_Config']->get( 'is_https' ) ) {
PMA_sendHeaderLocation(
preg_replace( '/^http/', 'https',
$_SESSION['PMA_Config']->get( 'PmaAbsoluteUri' ) )
. PMA_generate_common_url( $_GET ) );
exit;
}
/**
* @var array database list
*/
$dblist = array();
/**
@@ -2856,16 +2755,19 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
// must be open after this one so it would be default one for all the
// scripts)
if ($cfg['Server']['controluser'] != '') {
$controllink = PMA_DBI_connect($cfg['Server']['controluser'], $cfg['Server']['controlpass'], TRUE);
$controllink = PMA_DBI_connect( $cfg['Server']['controluser'],
$cfg['Server']['controlpass'], TRUE );
} else {
$controllink = PMA_DBI_connect($cfg['Server']['user'], $cfg['Server']['password'], TRUE);
$controllink = PMA_DBI_connect( $cfg['Server']['user'],
$cfg['Server']['password'], TRUE );
} // end if ... else
// Pass #1 of DB-Config to read in master level DB-Config will go here
// Robbat2 - May 11, 2002
// Connects to the server (validates user's login)
$userlink = PMA_DBI_connect($cfg['Server']['user'], $cfg['Server']['password'], FALSE);
$userlink = PMA_DBI_connect( $cfg['Server']['user'],
$cfg['Server']['password'], FALSE );
// Pass #2 of DB-Config to read in user level DB-Config will go here
// Robbat2 - May 11, 2002
@@ -2896,7 +2798,8 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
// The current position
if ($dblist[$i] == '*' && $dblist_asterisk_bool == FALSE) {
$dblist_asterisk_bool = TRUE;
$dblist_full = PMA_safe_db_list(FALSE, $controllink, FALSE, $rs, $userlink, $cfg, $dblist);
$dblist_full = PMA_safe_db_list(FALSE, $controllink, FALSE,
$rs, $userlink, $cfg, $dblist);
foreach ($dblist_full as $dbl_val) {
if (!in_array($dbl_val, $dblist)) {
$true_dblist[] = $dbl_val;
@@ -2931,7 +2834,8 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
PMA_DBI_free_result($rs);
}
} else {
$true_dblist[] = str_replace('\\_', '_', str_replace('\\%', '%', $dblist[$i]));
$true_dblist[] = str_replace('\\_', '_',
str_replace('\\%', '%', $dblist[$i]));
} // end if... else...
} // end for
$dblist = $true_dblist;
@@ -2945,7 +2849,8 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
} // end if (!$dblist_cnt)
if (isset($dblist_full) && !count($dblist_full)) {
$dblist = PMA_safe_db_list($only_db_check, $controllink, $dblist_cnt, $rs, $userlink, $cfg, $dblist);
$dblist = PMA_safe_db_list($only_db_check, $controllink,
$dblist_cnt, $rs, $userlink, $cfg, $dblist);
}
unset( $only_db_check, $dblist_full );
@@ -2961,20 +2866,16 @@ if ( ! defined( 'PMA_MINIMUM_COMMON' ) ) {
} // end if
/**
* save settings in cookies
* save some settings in cookies
*/
PMA_setCookie( 'pma_lang', $GLOBALS['lang'] );
PMA_setCookie( 'pma_charset', $GLOBALS['convcharset'] );
PMA_setCookie( 'pma_collation_connection', $GLOBALS['collation_connection'] );
$_SESSION['PMA_Theme_Manager']->setThemeCookie();
// Allow different theme per server
$theme_cookie_name = 'pma_theme';
if ( isset( $server ) && $GLOBALS['cfg']['ThemePerServer'] ) {
$theme_cookie_name .= '-' . $server;
}
PMA_setCookie( $theme_cookie_name, $GLOBALS['pmaTheme'] );
} // end if ! defined( 'PMA_MINIMUM_COMMON' )
$_SESSION['PMA_Config']->done = true;
?>

View File

@@ -1,203 +0,0 @@
<?php
/* $Id$ */
// vim: expandtab sw=4 ts=4 sts=4:
/**
* DEFINES VARIABLES & CONSTANTS
* Overview:
* PMA_VERSION (string) - phpMyAdmin version string
* PMA_THEME_VERSION (int) - phpMyAdmin theme version integer
* PMA_THEME_GENERATION (int) - phpMyAdmin theme generation integer
* PMA_PHP_INT_VERSION (int) - eg: 30017 instead of 3.0.17 or
* 40006 instead of 4.0.6RC3
* PMA_IS_WINDOWS (bool) - mark if phpMyAdmin running on windows
* PMA_IS_IIS (bool) - true is phpMyAdmin is running
* on Microsoft IIS server
* PMA_IS_GD2 (bool) - true if GD2 is present
* PMA_USR_OS (string) - the plateform (os) of the user
* PMA_USR_BROWSER_AGENT (string) - the browser of the user
* PMA_USR_BROWSER_VER (double) - the version of this browser
*/
// phpMyAdmin release
if (!defined('PMA_VERSION')) {
define('PMA_VERSION', '2.7.1-dev');
}
if (!defined('PMA_THEME_VERSION')) {
define('PMA_THEME_VERSION', 2);
}
if (!defined('PMA_THEME_GENERATION')) {
define('PMA_THEME_GENERATION', 2);
}
// php version
if (!defined('PMA_PHP_INT_VERSION')) {
if (!preg_match('@([0-9]{1,2}).([0-9]{1,2}).([0-9]{1,2})@', phpversion(), $match)) {
$result = preg_match('@([0-9]{1,2}).([0-9]{1,2})@', phpversion(), $match);
}
if (isset($match) && !empty($match[1])) {
if (!isset($match[2])) {
$match[2] = 0;
}
if (!isset($match[3])) {
$match[3] = 0;
}
define('PMA_PHP_INT_VERSION', (int)sprintf('%d%02d%02d', $match[1], $match[2], $match[3]));
unset($match);
} else {
define('PMA_PHP_INT_VERSION', 0);
}
define('PMA_PHP_STR_VERSION', phpversion());
}
// Whether the os php is running on is windows or not
if (!defined('PMA_IS_WINDOWS')) {
if (defined('PHP_OS') && stristr(PHP_OS, 'win')) {
define('PMA_IS_WINDOWS', 1);
} else {
define('PMA_IS_WINDOWS', 0);
}
}
// Whether the Web server php is running on is IIS
if (!defined('PMA_IS_IIS')) {
if (isset($_SERVER['SERVER_SOFTWARE'])
&& stristr($_SERVER['SERVER_SOFTWARE'], 'Microsoft/IIS')) {
define('PMA_IS_IIS', 1);
} else {
define('PMA_IS_IIS', 0);
}
}
function PMA_dl($module) {
if (!isset($GLOBALS['PMA_dl_allowed'])) {
if (!@ini_get('safe_mode') && @ini_get('enable_dl') && @function_exists('dl')) {
ob_start();
phpinfo(INFO_GENERAL); /* Only general info */
$a = strip_tags(ob_get_contents());
ob_end_clean();
/* Get GD version string from phpinfo output */
if (preg_match('@Thread Safety[[:space:]]*enabled@', $a)) {
if (preg_match('@Server API[[:space:]]*\(CGI\|CLI\)@', $a)) {
$GLOBALS['PMA_dl_allowed'] = TRUE;
} else {
$GLOBALS['PMA_dl_allowed'] = FALSE;
}
} else {
$GLOBALS['PMA_dl_allowed'] = TRUE;
}
} else {
$GLOBALS['PMA_dl_allowed'] = FALSE;
}
}
if (PMA_IS_WINDOWS) {
$suffix = '.dll';
} else {
$suffix = '.so';
}
if ($GLOBALS['PMA_dl_allowed']) {
return @dl($module . $suffix);
} else {
return FALSE;
}
}
// Whether GD2 is present
if (!defined('PMA_IS_GD2')) {
if ($cfg['GD2Available'] == 'yes') {
define('PMA_IS_GD2', 1);
} elseif ($cfg['GD2Available'] == 'no') {
define('PMA_IS_GD2', 0);
} else {
if (!@extension_loaded('gd')) {
PMA_dl('gd');
}
if (!@function_exists('imagecreatetruecolor')) {
define('PMA_IS_GD2', 0);
} else {
if (@function_exists('gd_info')) {
$gd_nfo = gd_info();
if (strstr($gd_nfo["GD Version"], '2.')) {
define('PMA_IS_GD2', 1);
} else {
define('PMA_IS_GD2', 0);
}
} else {
/* We must do hard way... */
ob_start();
phpinfo(INFO_MODULES); /* Only modules */
$a = strip_tags(ob_get_contents());
ob_end_clean();
/* Get GD version string from phpinfo output */
if (preg_match('@GD Version[[:space:]]*\(.*\)@', $a, $v)) {
if (strstr($v, '2.')) {
define('PMA_IS_GD2', 1);
} else {
define('PMA_IS_GD2', 0);
}
} else {
define('PMA_IS_GD2', 0);
}
}
}
}
}
// Determines platform (OS), browser and version of the user
// Based on a phpBuilder article:
// see http://www.phpbuilder.net/columns/tim20000821.php
if (!defined('PMA_USR_OS')) {
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
$HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
} else if (!isset($HTTP_USER_AGENT)) {
$HTTP_USER_AGENT = '';
}
// 1. Platform
if (strstr($HTTP_USER_AGENT, 'Win')) {
define('PMA_USR_OS', 'Win');
} else if (strstr($HTTP_USER_AGENT, 'Mac')) {
define('PMA_USR_OS', 'Mac');
} else if (strstr($HTTP_USER_AGENT, 'Linux')) {
define('PMA_USR_OS', 'Linux');
} else if (strstr($HTTP_USER_AGENT, 'Unix')) {
define('PMA_USR_OS', 'Unix');
} else if (strstr($HTTP_USER_AGENT, 'OS/2')) {
define('PMA_USR_OS', 'OS/2');
} else {
define('PMA_USR_OS', 'Other');
}
// 2. browser and version
// (must check everything else before Mozilla)
if (preg_match('@Opera(/| )([0-9].[0-9]{1,2})@', $HTTP_USER_AGENT, $log_version)) {
define('PMA_USR_BROWSER_VER', $log_version[2]);
define('PMA_USR_BROWSER_AGENT', 'OPERA');
} else if (preg_match('@MSIE ([0-9].[0-9]{1,2})@', $HTTP_USER_AGENT, $log_version)) {
define('PMA_USR_BROWSER_VER', $log_version[1]);
define('PMA_USR_BROWSER_AGENT', 'IE');
} else if (preg_match('@OmniWeb/([0-9].[0-9]{1,2})@', $HTTP_USER_AGENT, $log_version)) {
define('PMA_USR_BROWSER_VER', $log_version[1]);
define('PMA_USR_BROWSER_AGENT', 'OMNIWEB');
//} else if (ereg('Konqueror/([0-9].[0-9]{1,2})', $HTTP_USER_AGENT, $log_version)) {
// Konqueror 2.2.2 says Konqueror/2.2.2
// Konqueror 3.0.3 says Konqueror/3
} else if (preg_match('@(Konqueror/)(.*)(;)@', $HTTP_USER_AGENT, $log_version)) {
define('PMA_USR_BROWSER_VER', $log_version[2]);
define('PMA_USR_BROWSER_AGENT', 'KONQUEROR');
} else if (preg_match('@Mozilla/([0-9].[0-9]{1,2})@', $HTTP_USER_AGENT, $log_version)
&& preg_match('@Safari/([0-9]*)@', $HTTP_USER_AGENT, $log_version2)) {
define('PMA_USR_BROWSER_VER', $log_version[1] . '.' . $log_version2[1]);
define('PMA_USR_BROWSER_AGENT', 'SAFARI');
} else if (preg_match('@Mozilla/([0-9].[0-9]{1,2})@', $HTTP_USER_AGENT, $log_version)) {
define('PMA_USR_BROWSER_VER', $log_version[1]);
define('PMA_USR_BROWSER_AGENT', 'MOZILLA');
} else {
define('PMA_USR_BROWSER_VER', 0);
define('PMA_USR_BROWSER_AGENT', 'OTHER');
}
}
?>