From bfb0be07e6e8e3a360cd1c0b0ef46683de6c685e Mon Sep 17 00:00:00 2001 From: A99US Date: Thu, 17 Feb 2022 17:40:10 +0700 Subject: [PATCH] unset() instead of session_destroy() --- phpminiadmin.php | 2571 +++++++++++++++++++------------------ samples/phpminiconfig.php | 43 +- 2 files changed, 1311 insertions(+), 1303 deletions(-) diff --git a/phpminiadmin.php b/phpminiadmin.php index 18d84a0..5453246 100644 --- a/phpminiadmin.php +++ b/phpminiadmin.php @@ -1,1284 +1,1287 @@ - http://osalabs.com - - Light standalone PHP script for quick and easy access MySQL databases. - http://phpminiadmin.sourceforge.net - - Dual licensed: GPL v2 and MIT, see texts at http://opensource.org/licenses/ -*/ - -$ACCESS_PWD=''; #!!!IMPORTANT!!! this is script access password, SET IT if you want to protect you DB from public access - -#DEFAULT db connection settings -# --- WARNING! --- if you set defaults - it's recommended to set $ACCESS_PWD to protect your db! -$DBDEF=array( -'user'=>"",#required -'pwd'=>"", #required -#optional: -'db'=>"", #default DB -'host'=>"", -'port'=>"", -'socket'=>"", -'chset'=>"utf8mb4",#optional, default charset -#optional paths for ssl -'ssl_key'=>NULL, -'ssl_cert'=>NULL, -'ssl_ca'=>'',#minimum this is required for ssl connections, if set - ssl connection will try to be established. Example: /path/to/cacert.pem -); -$IS_COUNT=false; #set to true if you want to see Total records when pagination occurs (SLOWS down all select queries!) -$DUMP_FILE=dirname(__FILE__).'/pmadump'; #path to file without extension used for server-side exports (timestamp, .sql/.csv/.gz extension added) or imports(.sql) -file_exists($f=dirname(__FILE__) . '/phpminiconfig.php')&&require($f); // Read from config (easier to update) -if (function_exists('date_default_timezone_set')) date_default_timezone_set('UTC');#required by PHP 5.1+ - -//constants -$VERSION='1.9.210705'; -$MAX_ROWS_PER_PAGE=50; #max number of rows in select per one page -$D="\r\n"; #default delimiter for export -$BOM=chr(239).chr(187).chr(191); -$SHOW_D="SHOW DATABASES"; -$SHOW_T="SHOW TABLE STATUS"; -$DB=array(); #working copy for DB settings - -$self=$_SERVER['PHP_SELF']; - -session_set_cookie_params(0, null, null, false, true); -session_start(); -if (!isset($_SESSION['XSS'])) $_SESSION['XSS']=get_rand_str(16); -$xurl='XSS='.$_SESSION['XSS']; - -ini_set('display_errors',0); #turn on to debug db or script issues -error_reporting(E_ALL ^ E_NOTICE); - -if ($_REQUEST['login']){ - if ($_REQUEST['pwd']!=$ACCESS_PWD){ - $err_msg="Invalid password. Try again"; - }else{ - $_SESSION['is_logged']=true; - loadcfg(); - } -} - -if ($_REQUEST['logoff']){ - check_xss(); - $_SESSION = array(); - savecfg(); - session_destroy(); - $url=$self; - if (!$ACCESS_PWD) $url='/'; - header("location: $url"); - exit; -} - -if (!$_SESSION['is_logged']){ - if (!$ACCESS_PWD) { - $_SESSION['is_logged']=true; - loadcfg(); - }else{ - print_login(); - exit; - } - -} -if ($_REQUEST['savecfg']){ - check_xss(); - savecfg(); -} - -loadsess(); - -if ($_REQUEST['showcfg']){ - print_cfg(); - exit; -} - -//get initial values -$SQLq=trim(b64d($_REQUEST['q'])); -$page=intval($_REQUEST['p']); -if ($_REQUEST['refresh'] && $DB['db'] && preg_match('/^show/',$SQLq) ) $SQLq=$SHOW_T; - -if (db_connect('nodie')){ - $time_start=microtime_float(); - - if ($_REQUEST['pi']){ - ob_start();phpinfo();$html=ob_get_clean();preg_match("/]*>(.*?)<\/body>/is",$html,$m); - $sqldr='
'.$m[1].'
'; - }else{ - if ($DB['db']){ - if ($_REQUEST['shex']){ - print_export(); - }elseif ($_REQUEST['doex']){ - check_xss();do_export(); - }elseif ($_REQUEST['shim']){ - print_import(); - }elseif ($_REQUEST['doim']){ - check_xss();do_import(); - }elseif ($_REQUEST['dosht']){ - check_xss();do_sht(); - }elseif (!$_REQUEST['refresh'] || preg_match('/^select|show|explain|desc/i',$SQLq) ){ - if ($SQLq)check_xss(); - do_sql($SQLq);#perform non-select SQL only if not refresh (to avoid dangerous delete/drop) - } - }else{ - if ( $_REQUEST['refresh'] ){ - check_xss();do_sql($SHOW_D); - }elseif ($_REQUEST['crdb']){ - check_xss();do_sql('CREATE DATABASE `'.$_REQUEST['new_db'].'`');do_sql($SHOW_D); - }elseif ( preg_match('/^(?:show\s+(?:databases|status|variables|process)|create\s+database|grant\s+)/i',$SQLq) ){ - check_xss();do_sql($SQLq); - }else{ - $err_msg="Select Database first"; - if (!$SQLq) do_sql($SHOW_D); - } - } - } - $time_all=ceil((microtime_float()-$time_start)*10000)/10000; - - print_screen(); -}else{ - print_cfg(); -} - -function do_sql($q){ - global $dbh,$last_sth,$last_sql,$reccount,$out_message,$SQLq,$SHOW_T; - $SQLq=$q; - - if (!do_multi_sql($q)){ - $out_message="Error: ".mysqli_error($dbh); - }else{ - if ($last_sth && $last_sql){ - $SQLq=$last_sql; - if (preg_match("/^select|show|explain|desc/i",$last_sql)) { - if ($q!=$last_sql) $out_message="Results of the last select displayed:"; - display_select($last_sth,$last_sql); - } else { - $reccount=mysqli_affected_rows($dbh); - $out_message="Done."; - if (preg_match("/^insert|replace/i",$last_sql)) $out_message.=" Last inserted id=".get_identity(); - if (preg_match("/^drop|truncate/i",$last_sql)) do_sql($SHOW_T); - } - } - } -} - -function display_select($sth,$q){ - global $dbh,$DB,$sqldr,$reccount,$is_sht,$xurl,$is_sm; - $rc=array("o","e"); - $dbn=ue($DB['db']); - $sqldr=''; - - $is_shd=(preg_match('/^show\s+databases/i',$q)); - $is_sht=(preg_match('/^show\s+tables|^SHOW\s+TABLE\s+STATUS/',$q)); - $is_show_crt=(preg_match('/^show\s+create\s+table/i',$q)); - - if ($sth===FALSE or $sth===TRUE) return;#check if $sth is not a mysql resource - - $reccount=mysqli_num_rows($sth); - $fields_num=mysqli_field_count($dbh); - - $w=''; - if ($is_sm) $w='sm '; - if ($is_sht || $is_shd) {$w='wa'; - $url='?'.$xurl."&db=$dbn"; - $sqldr.="
- MySQL Server: - · Show Configuration Variables - · Show Statistics - · Show Processlist "; - if ($is_shd) $sqldr.="· "; - $sqldr.="
"; - if ($is_sht) $sqldr.="Database: · Show Table Status"; - $sqldr.="
"; - } - $abtn=''; - if ($is_sht){ - $abtn="
- - - - selected tables
"; - $sqldr.=$abtn.""; - } - - $sqldr.="
"; - $headers=""; - if ($is_sht) $headers.=""; - for($i=0;$i<$fields_num;$i++){ - if ($is_sht && $i>0) break; - $meta=mysqli_fetch_field($sth); - $headers.=""; - } - if ($is_shd) $headers.=""; - if ($is_sht) $headers.=""; - $headers.="\n"; - $sqldr.=$headers; - $swapper=false; - $swp=0; - while($row=mysqli_fetch_row($sth)){ - $sqldr.=""; - $v=$row[0]; - if ($is_sht){ - $vq='`'.$v.'`'; - $url='?'.$xurl."&db=$dbn&t=".b64u($v); - $sqldr.="" - ."" - ."" - ."" - ."" - ."" - ."" - ."" - ."" - ."" - ."" - ."" - ."" - ."" - .""; - }elseif ($is_shd){ - $url='?'.$xurl."&db=".ue($v); - $sqldr.="" - ."" - ."" - .""; - }else{ - for($i=0;$i<$fields_num;$i++){ - $v=$row[$i]; - if (is_null($v)) $v="NULL"; - elseif (preg_match('/[\x00-\x09\x0B\x0C\x0E-\x1F]+/',$v)){#all chars <32, except \n\r(0D0A) - $vl=strlen($v);$pf=''; - if ($vl>16 && $fields_num>1){#show full dump if just one field - $v=substr($v, 0, 16);$pf='...'; - } - $v='BINARY: '.chunk_split(strtoupper(bin2hex($v)),2,' ').$pf; - }else $v=hs($v); - if ($is_show_crt) $v="
$v
"; - $sqldr.=""; - } - } - $sqldr.="\n"; - } - $sqldr.="
".hs($meta->name)."
show create databaseshow table statusshow triggersengine~rowsdata sizeindex sizeshow create tableexplainindexesexportdroptruncateoptimizerepaircomment
".hs($v)."".hs($row[1])."".hs($row[4])."".hs($row[6])."".hs($row[8])."·sct·exp·ind·export·dr·tr·opt·rpr".hs($row[$fields_num-1])."".hs($v)."scdstatustrig
$v".(!strlen($v)?"
":'')."
\n".$abtn; -} - -function print_header(){ - global $err_msg,$VERSION,$DB,$dbh,$self,$is_sht,$xurl,$SHOW_T; - $dbn=$DB['db']; -?> - - -phpMiniAdmin - - - - - - - -
- - - - -
-phpMiniAdmin - - | ">Databases: - -'>show tables -&shex=1'>export -&shim=1'>import - - | Settings - - | Logoff - | phpinfo -
- -
- -=$MAX_ROWS_PER_PAGE) ){ - $nav=""; - } - - print_header(); -?> - -
- 
-
- - - - -
- - - - -

- -
-
-
-Records: in sec
- -
- - -
-
© 2004-2021 Oleg Savchuk
- - -
-

Access protected by password

-
- - - -
-
- -
-

DB Connection Settings

-
-
-
-
advanced settings
- -
- - -
-
-
-\n".mysqli_error($dbh1)."
\n$sql"); - return $sth; -} - -function db_array($sql, $dbh1=NULL, $skiperr=0, $isnum=0){#array of rows - $sth=db_query($sql, $dbh1, $skiperr, MYSQLI_USE_RESULT); - if (!$sth) return; - $res=array(); - if ($isnum){ - while($row=mysqli_fetch_row($sth)) $res[]=$row; - }else{ - while($row=mysqli_fetch_assoc($sth)) $res[]=$row; - } - mysqli_free_result($sth); - return $res; -} - -function db_row($sql){ - $sth=db_query($sql); - return mysqli_fetch_assoc($sth); -} - -function db_value($sql,$dbh1=NULL,$skiperr=0){ - $sth=db_query($sql,$dbh1,$skiperr); - if (!$sth) return; - $row=mysqli_fetch_row($sth); - return $row[0]; -} - -function get_identity($dbh1=NULL){ - $dbh1=db_checkconnect($dbh1); - return mysqli_insert_id($dbh1); -} - -function get_db_select($sel=''){ - global $DB,$SHOW_D; - if (is_array($_SESSION['sql_sd']) && $_REQUEST['db']!='*'){//check cache - $arr=$_SESSION['sql_sd']; - }else{ - $arr=db_array($SHOW_D,NULL,1); - if (!is_array($arr)){ - $arr=array( 0 => array('Database' => $DB['db']) ); - } - $_SESSION['sql_sd']=$arr; - } - return @sel($arr,'Database',$sel); -} - -function chset_select($sel=''){ - global $DBDEF; - $result=''; - if ($_SESSION['sql_chset']){ - $arr=$_SESSION['sql_chset']; - }else{ - $arr=db_array("show character set",NULL,1); - if (!is_array($arr)) $arr=array(array('Charset'=>$DBDEF['chset'])); - $_SESSION['sql_chset']=$arr; - } - - return @sel($arr,'Charset',$sel); -} - -function sel($arr,$n,$sel=''){ - foreach($arr as $a){ -# echo $a[0]; - $b=$a[$n]; - $res.=""; - } - return $res; -} - -function microtime_float(){ - list($usec,$sec)=explode(" ",microtime()); - return ((float)$usec+(float)$sec); -} - -/* page nav - $pg=int($_[0]); #current page - $all=int($_[1]); #total number of items - $PP=$_[2]; #number if items Per Page - $ptpl=$_[3]; #page url /ukr/dollar/notes.php?page= for notes.php - $show_all=$_[5]; #print Totals? -*/ -function get_nav($pg, $all, $PP, $ptpl, $show_all=''){ - $n=' '; - $sep=" $n|$n\n"; - if (!$PP) $PP=10; - $allp=floor($all/$PP+0.999999); - - $pname=''; - $res=''; - $w=array('Less','More','Back','Next','First','Total'); - - $sp=$pg-2; - if($sp<0) $sp=0; - if($allp-$sp<5 && $allp>=5) $sp=$allp-5; - - $res=""; - - if($sp>0){ - $pname=pen($sp-1,$ptpl); - $res.="$w[0]"; - $res.=$sep; - } - for($p_p=$sp;$p_p<$allp && $p_p<$sp+5;$p_p++){ - $first_s=$p_p*$PP+1; - $last_s=($p_p+1)*$PP; - $pname=pen($p_p,$ptpl); - if($last_s>$all){ - $last_s=$all; - } - if($p_p==$pg){ - $res.="$first_s..$last_s"; - }else{ - $res.="$first_s..$last_s"; - } - if($p_p+1<$allp) $res.=$sep; - } - if($sp+5<$allp){ - $pname=pen($sp+5,$ptpl); - $res.="$w[1]"; - } - $res.="
\n"; - - if($pg>0){ - $pname=pen($pg-1,$ptpl); - $res.="$w[2] $n|$n "; - $pname=pen(0,$ptpl); - $res.="$w[4]"; - } - if($pg>0 && $pg+1<$allp) $res.=$sep; - if($pg+1<$allp){ - $pname=pen($pg+1,$ptpl); - $res.="$w[3]"; - } - if ($show_all) $res.=" ($w[5] - $all) "; - - return $res; -} - -function pen($p,$np=''){ - return str_replace('%p%',$p, $np); -} - -function savecfg(){ - global $DBDEF; - $v=$_REQUEST['v']; - if(!is_array($v))$v=array(); - unset($v['ssl_ca']);unset($v['ssl_key']);unset($v['ssl_cert']);#don't allow override ssl paths from web - $_SESSION['DB']=array_merge($DBDEF,$v); - unset($_SESSION['sql_sd']); - - if ($_REQUEST['rmb']){ - $tm=time()+60*60*24*30; - newcookie("conn[db]", $v['db'],$tm); - newcookie("conn[user]",$v['user'],$tm); - newcookie("conn[pwd]", $v['pwd'],$tm); - newcookie("conn[host]",$v['host'],$tm); - newcookie("conn[port]",$v['port'],$tm); - newcookie("conn[socket]",$v['socket'],$tm); - newcookie("conn[chset]",$v['chset'],$tm); - }else{ - newcookie("conn[db]", FALSE,-1); - newcookie("conn[user]",FALSE,-1); - newcookie("conn[pwd]", FALSE,-1); - newcookie("conn[host]",FALSE,-1); - newcookie("conn[port]",FALSE,-1); - newcookie("conn[socket]",FALSE,-1); - newcookie("conn[chset]",FALSE,-1); - } -} - -// Allow httponly cookies, or the password is stored plain text in a cookie -function newcookie($n,$v,$e){$x='';return setcookie($n,$v,$e,$x,$x,!!$x,!$x);} - -//during login only - from cookies or use defaults; -function loadcfg(){ - global $DBDEF; - - if( isset($_COOKIE['conn']) ){ - $_SESSION['DB']=array_merge($DBDEF,$_COOKIE['conn']); - }else{ - $_SESSION['DB']=$DBDEF; - } - if (!strlen($_SESSION['DB']['chset'])) $_SESSION['DB']['chset']=$DBDEF['chset'];#don't allow empty charset -} - -//each time - from session to $DB_* -function loadsess(){ - global $DB, $is_sm; - - $DB=$_SESSION['DB']; - - $rdb=$_REQUEST['db']; - if ($rdb=='*') $rdb=''; - if ($rdb) { - $DB['db']=$rdb; - } - if($_REQUEST['GoSQL']) $_SESSION['is_sm']=$_REQUEST['is_sm']+0; - $is_sm=$_SESSION['is_sm']+0; -} - -function print_export(){ - global $self,$xurl,$DB,$DUMP_FILE; - $t=$_REQUEST['rt']; - $l=($t)?"Table $t":"whole DB"; - print_header(); -?> -
-

Export

-
- Structure
- Data

-
 
-
- - - - (to export as csv - go to 'show tables' and export just ONE table) - -
-
-
-
-
- - - - - -

"Dump on Server" exports to file:

-
-
-name).(($i<$fn-1)?",":"")); - } - ex_w($D); - while($row=mysqli_fetch_row($sth)) ex_w(to_csv_row($row)); - mysqli_free_result($sth); - }else{ - ex_start('.sql'); - ex_hdr($ctp?$ctp:'text/plain',"$DB[db]".(($ct==1&&$t[0])?".$t[0]":(($ct>1)?'.'.$ct.'tables':'')).".sql$aext"); - ex_w("-- phpMiniAdmin dump $VERSION$D-- Datetime: ".date('Y-m-d H:i:s')."$D-- Host: $DB[host]$D-- Database: $DB[db]$D$D"); - if ($DB['chset']) ex_w("/*!40030 SET NAMES $DB[chset] */;$D"); - $ex_super && ex_w("/*!40030 SET GLOBAL max_allowed_packet=16777216 */;$D$D"); - ex_w("/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;$D$D"); - - $sth=db_query("show full tables from `$DB[db]`"); - while($row=mysqli_fetch_row($sth)){ - if (!$rt||array_key_exists($row[0],$th)) do_export_table($row[0],$row[1],$MAXI); - } - - ex_w("/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;$D$D"); - ex_w("$D-- phpMiniAdmin dump end$D"); - } - ex_end(); - if (!$ex_issrv) exit; - $out_message='Export done successfully'; -} - -function do_export_table($t='',$tt='',$MAXI=838860){ - global $D,$ex_issrv; - @set_time_limit(600); - - if($_REQUEST['s']){ - $sth=db_query("show create table `$t`"); - $row=mysqli_fetch_row($sth); - $ct=preg_replace("/\n\r|\r\n|\n|\r/",$D,$row[1]); - ex_w("DROP TABLE IF EXISTS `$t`;$D$ct;$D$D"); - } - - if ($_REQUEST['d']&&$tt!='VIEW'){//no dump for views - $exsql=''; - ex_w("/*!40000 ALTER TABLE `$t` DISABLE KEYS */;$D"); - $sth=db_query("select * from `$t`",NULL,0,MYSQLI_USE_RESULT); - while($row=mysqli_fetch_row($sth)){ - $values=''; - foreach($row as $v) $values.=(($values)?',':'').dbq($v); - $exsql.=(($exsql)?',':'')."(".$values.")"; - if (strlen($exsql)>$MAXI) { - ex_w("INSERT INTO `$t` VALUES $exsql;$D");$exsql=''; - } - } - mysqli_free_result($sth); - if ($exsql) ex_w("INSERT INTO `$t` VALUES $exsql;$D"); - ex_w("/*!40000 ALTER TABLE `$t` ENABLE KEYS */;$D$D"); - } - if (!$ex_issrv) flush(); -} - -function ex_hdr($ct,$fn){ - global $ex_issrv; - if ($ex_issrv) return; - header("Content-type: $ct"); - header("Content-Disposition: attachment; filename=\"$fn\""); -} -function ex_start($ext){ - global $ex_isgz,$ex_gz,$ex_tmpf,$ex_issrv,$ex_f,$DUMP_FILE; - if ($ex_isgz){ - $ex_tmpf=($ex_issrv?export_fname($DUMP_FILE,true).$ext:tmp_name()).'.gz'; - if (!($ex_gz=gzopen($ex_tmpf,'wb9'))) die("Error trying to create gz tmp file"); - }else{ - if ($ex_issrv) { - if (!($ex_f=fopen(export_fname($DUMP_FILE,true).$ext,'wb'))) die("Error trying to create dump file"); - } - } -} -function ex_w($s){ - global $ex_isgz,$ex_gz,$ex_issrv,$ex_f; - if ($ex_isgz){ - gzwrite($ex_gz,$s,strlen($s)); - }else{ - if ($ex_issrv){ - fwrite($ex_f,$s); - }else{ - echo $s; - } - } -} -function ex_end(){ - global $ex_isgz,$ex_gz,$ex_tmpf,$ex_issrv,$ex_f; - if ($ex_isgz){ - gzclose($ex_gz); - if (!$ex_issrv){ - readfile($ex_tmpf); - unlink($ex_tmpf); - } - }else{ - if ($ex_issrv) fclose($ex_f); - } -} - -function print_import(){ - global $self,$xurl,$DB,$DUMP_FILE; - print_header(); -?> -
-

Import DB

-
-
-
-
-
-
- - -
-


- -
- '(? '(? '\*\/', - '#' => '[\r\n]+', - '--' => '[\r\n]+', - ); - if ( $aCLOSE[$ochar] && preg_match("/(".$aCLOSE[$ochar].")/", $str, $m, PREG_OFFSET_CAPTURE, $pos ) ) { - $clchar=$m[1][0]; - $clpos=$m[1][1]; - $sl=strlen($m[2][0]); - if ($ochar=="'" && $sl){ - if ($sl % 2){ #don't count as CLOSE char if number of slashes before ' ODD - list($clchar, $clpos)=get_close_char($str, $clpos+strlen($clchar), $ochar); - }else{ - $clpos+=strlen($clchar)-1;$clchar="'";#correction - } - } - } - return array($clchar, $clpos); -} - -function do_one_sql($sql){ - global $last_sth,$last_sql,$MAX_ROWS_PER_PAGE,$page,$is_limited_sql,$last_count,$IS_COUNT; - $sql=trim($sql); - $sql=preg_replace("/;$/","",$sql); - if ($sql){ - $last_sql=$sql;$is_limited_sql=0; - $last_count=NULL; - if (preg_match("/^select/i",$sql) && !preg_match("/limit +\d+/i", $sql)){ - if ($IS_COUNT){ - #get total count - $sql1='select count(*) from ('.$sql.') ___count_table'; - $last_count=db_value($sql1,NULL,'noerr'); - } - $offset=$page*$MAX_ROWS_PER_PAGE; - $sql.=" LIMIT $offset,$MAX_ROWS_PER_PAGE"; - $is_limited_sql=1; - } - $last_sth=db_query($sql,0,'noerr'); - return $last_sth; - } - return 1; -} - -function do_sht(){ - global $SHOW_T; - $cb=$_REQUEST['cb']; - if (!is_array($cb)) $cb=array(); - $sql=''; - switch ($_REQUEST['dosht']){ - case 'exp':$_REQUEST['t']=join(",",$cb);print_export();exit; - case 'drop':$sq='DROP TABLE';break; - case 'trunc':$sq='TRUNCATE TABLE';break; - case 'opt':$sq='OPTIMIZE TABLE';break; - } - if ($sq){ - foreach($cb as $v){ - $sql.=$sq." $v;\n"; - } - } - if ($sql) do_sql($sql); - do_sql($SHOW_T); -} - -function to_csv_row($adata){ - global $D; - $r=''; - foreach ($adata as $a){ - $r.=(($r)?",":"").qstr($a); - } - return $r.$D; -} -function qstr($s){ - $s=nl2br($s); - $s=str_replace('"','""',$s); - return '"'.$s.'"'; -} - -function get_rand_str($len){ - $result=''; - $chars=preg_split('//','ABCDEFabcdef0123456789'); - for($i=0;$i<$len;$i++) $result.=$chars[rand(0,count($chars)-1)]; - return $result; -} - -function check_xss(){ - global $self; - if ($_SESSION['XSS']!=trim($_REQUEST['XSS'])){ - unset($_SESSION['XSS']); - header("location: $self"); - exit; - } -} - -function rw($s){#for debug - echo hs(var_dump($s))."
\n"; -} - -function tmp_name() { - if ( function_exists('sys_get_temp_dir')) return tempnam(sys_get_temp_dir(),'pma'); - - if( !($temp=getenv('TMP')) ) - if( !($temp=getenv('TEMP')) ) - if( !($temp=getenv('TMPDIR')) ) { - $temp=tempnam(__FILE__,''); - if (file_exists($temp)) { - unlink($temp); - $temp=dirname($temp); - } - } - return $temp ? tempnam($temp,'pma') : null; -} - -function hs($s){ - return htmlspecialchars($s, ENT_COMPAT|ENT_HTML401,'UTF-8'); -} -function eo($s){//echo+escape - echo hs($s); -} -function ue($s){ - return urlencode($s); -} - -function b64e($s){ - return base64_encode($s); -} -function b64u($s){ - return ue(base64_encode($s)); -} -function b64d($s){ - return base64_decode($s); -} -?> + http://osalabs.com + + Light standalone PHP script for quick and easy access MySQL databases. + http://phpminiadmin.sourceforge.net + + Dual licensed: GPL v2 and MIT, see texts at http://opensource.org/licenses/ +*/ + +$ACCESS_PWD=''; #!!!IMPORTANT!!! this is script access password, SET IT if you want to protect you DB from public access + +#DEFAULT db connection settings +# --- WARNING! --- if you set defaults - it's recommended to set $ACCESS_PWD to protect your db! +$DBDEF=array( +'user'=>"",#required +'pwd'=>"", #required +#optional: +'db'=>"", #default DB +'host'=>"", +'port'=>"", +'socket'=>"", +'chset'=>"utf8mb4",#optional, default charset +#optional paths for ssl +'ssl_key'=>NULL, +'ssl_cert'=>NULL, +'ssl_ca'=>'',#minimum this is required for ssl connections, if set - ssl connection will try to be established. Example: /path/to/cacert.pem +); +$IS_COUNT=false; #set to true if you want to see Total records when pagination occurs (SLOWS down all select queries!) +$DUMP_FILE=dirname(__FILE__).'/pmadump'; #path to file without extension used for server-side exports (timestamp, .sql/.csv/.gz extension added) or imports(.sql) +if (function_exists('date_default_timezone_set')) date_default_timezone_set('UTC');#required by PHP 5.1+ + +//constants +$VERSION='1.9.210705'; +$MAX_ROWS_PER_PAGE=50; #max number of rows in select per one page +$D="\r\n"; #default delimiter for export +$BOM=chr(239).chr(187).chr(191); +$SHOW_D="SHOW DATABASES"; +$SHOW_T="SHOW TABLE STATUS"; +$DB=array(); #working copy for DB settings + +$self=$_SERVER['PHP_SELF']; + +session_set_cookie_params(0, null, null, false, true); +session_start(); +if (!isset($_SESSION['pmAdmin']['XSS'])) $_SESSION['pmAdmin']['XSS']=get_rand_str(16); +$xurl='XSS='.$_SESSION['pmAdmin']['XSS']; + +ini_set('display_errors',0); #turn on to debug db or script issues +error_reporting(E_ALL ^ E_NOTICE); + +file_exists($f=dirname(__FILE__) . '/phpminiconfig.php')&&require($f); // Read from config (easier to update) +if(isset($authPage) AND $authPage != "" AND file_exists($authPage)) + include_once($authPage); // If authPage exist, include it + +if ($_REQUEST['login']){ + if ($_REQUEST['pwd']!=$ACCESS_PWD){ + $err_msg="Invalid password. Try again"; + }else{ + $_SESSION['pmAdmin']['is_logged']=true; + loadcfg(); + } +} + +if ($_REQUEST['logoff']){ + check_xss(); + $_SESSION['pmAdmin'] = array(); + savecfg(); + unset($_SESSION['pmAdmin']); // instead of session_destroy(); + $url=$self; + if (!$ACCESS_PWD) $url='/'; + header("location: $url"); + exit; +} + +if (!$_SESSION['pmAdmin']['is_logged']){ + if (!$ACCESS_PWD) { + $_SESSION['pmAdmin']['is_logged']=true; + loadcfg(); + }else{ + print_login(); + exit; + } + +} +if ($_REQUEST['savecfg']){ + check_xss(); + savecfg(); +} + +loadsess(); + +if ($_REQUEST['showcfg']){ + print_cfg(); + exit; +} + +//get initial values +$SQLq=trim(b64d($_REQUEST['q'])); +$page=intval($_REQUEST['p']); +if ($_REQUEST['refresh'] && $DB['db'] && preg_match('/^show/',$SQLq) ) $SQLq=$SHOW_T; + +if (db_connect('nodie')){ + $time_start=microtime_float(); + + if ($_REQUEST['pi']){ + ob_start();phpinfo();$html=ob_get_clean();preg_match("/]*>(.*?)<\/body>/is",$html,$m); + $sqldr='
'.$m[1].'
'; + }else{ + if ($DB['db']){ + if ($_REQUEST['shex']){ + print_export(); + }elseif ($_REQUEST['doex']){ + check_xss();do_export(); + }elseif ($_REQUEST['shim']){ + print_import(); + }elseif ($_REQUEST['doim']){ + check_xss();do_import(); + }elseif ($_REQUEST['dosht']){ + check_xss();do_sht(); + }elseif (!$_REQUEST['refresh'] || preg_match('/^select|show|explain|desc/i',$SQLq) ){ + if ($SQLq)check_xss(); + do_sql($SQLq);#perform non-select SQL only if not refresh (to avoid dangerous delete/drop) + } + }else{ + if ( $_REQUEST['refresh'] ){ + check_xss();do_sql($SHOW_D); + }elseif ($_REQUEST['crdb']){ + check_xss();do_sql('CREATE DATABASE `'.$_REQUEST['new_db'].'`');do_sql($SHOW_D); + }elseif ( preg_match('/^(?:show\s+(?:databases|status|variables|process)|create\s+database|grant\s+)/i',$SQLq) ){ + check_xss();do_sql($SQLq); + }else{ + $err_msg="Select Database first"; + if (!$SQLq) do_sql($SHOW_D); + } + } + } + $time_all=ceil((microtime_float()-$time_start)*10000)/10000; + + print_screen(); +}else{ + print_cfg(); +} + +function do_sql($q){ + global $dbh,$last_sth,$last_sql,$reccount,$out_message,$SQLq,$SHOW_T; + $SQLq=$q; + + if (!do_multi_sql($q)){ + $out_message="Error: ".mysqli_error($dbh); + }else{ + if ($last_sth && $last_sql){ + $SQLq=$last_sql; + if (preg_match("/^select|show|explain|desc/i",$last_sql)) { + if ($q!=$last_sql) $out_message="Results of the last select displayed:"; + display_select($last_sth,$last_sql); + } else { + $reccount=mysqli_affected_rows($dbh); + $out_message="Done."; + if (preg_match("/^insert|replace/i",$last_sql)) $out_message.=" Last inserted id=".get_identity(); + if (preg_match("/^drop|truncate/i",$last_sql)) do_sql($SHOW_T); + } + } + } +} + +function display_select($sth,$q){ + global $dbh,$DB,$sqldr,$reccount,$is_sht,$xurl,$is_sm; + $rc=array("o","e"); + $dbn=ue($DB['db']); + $sqldr=''; + + $is_shd=(preg_match('/^show\s+databases/i',$q)); + $is_sht=(preg_match('/^show\s+tables|^SHOW\s+TABLE\s+STATUS/',$q)); + $is_show_crt=(preg_match('/^show\s+create\s+table/i',$q)); + + if ($sth===FALSE or $sth===TRUE) return;#check if $sth is not a mysql resource + + $reccount=mysqli_num_rows($sth); + $fields_num=mysqli_field_count($dbh); + + $w=''; + if ($is_sm) $w='sm '; + if ($is_sht || $is_shd) {$w='wa'; + $url='?'.$xurl."&db=$dbn"; + $sqldr.="
+ MySQL Server: + · Show Configuration Variables + · Show Statistics + · Show Processlist "; + if ($is_shd) $sqldr.="· "; + $sqldr.="
"; + if ($is_sht) $sqldr.="Database: · Show Table Status"; + $sqldr.="
"; + } + $abtn=''; + if ($is_sht){ + $abtn="
+ + + + selected tables
"; + $sqldr.=$abtn.""; + } + + $sqldr.="
"; + $headers=""; + if ($is_sht) $headers.=""; + for($i=0;$i<$fields_num;$i++){ + if ($is_sht && $i>0) break; + $meta=mysqli_fetch_field($sth); + $headers.=""; + } + if ($is_shd) $headers.=""; + if ($is_sht) $headers.=""; + $headers.="\n"; + $sqldr.=$headers; + $swapper=false; + $swp=0; + while($row=mysqli_fetch_row($sth)){ + $sqldr.=""; + $v=$row[0]; + if ($is_sht){ + $vq='`'.$v.'`'; + $url='?'.$xurl."&db=$dbn&t=".b64u($v); + $sqldr.="" + ."" + ."" + ."" + ."" + ."" + ."" + ."" + ."" + ."" + ."" + ."" + ."" + ."" + .""; + }elseif ($is_shd){ + $url='?'.$xurl."&db=".ue($v); + $sqldr.="" + ."" + ."" + .""; + }else{ + for($i=0;$i<$fields_num;$i++){ + $v=$row[$i]; + if (is_null($v)) $v="NULL"; + elseif (preg_match('/[\x00-\x09\x0B\x0C\x0E-\x1F]+/',$v)){#all chars <32, except \n\r(0D0A) + $vl=strlen($v);$pf=''; + if ($vl>16 && $fields_num>1){#show full dump if just one field + $v=substr($v, 0, 16);$pf='...'; + } + $v='BINARY: '.chunk_split(strtoupper(bin2hex($v)),2,' ').$pf; + }else $v=hs($v); + if ($is_show_crt) $v="
$v
"; + $sqldr.=""; + } + } + $sqldr.="\n"; + } + $sqldr.="
".hs($meta->name)."
show create databaseshow table statusshow triggersengine~rowsdata sizeindex sizeshow create tableexplainindexesexportdroptruncateoptimizerepaircomment
".hs($v)."".hs($row[1])."".hs($row[4])."".hs($row[6])."".hs($row[8])."·sct·exp·ind·export·dr·tr·opt·rpr".hs($row[$fields_num-1])."".hs($v)."scdstatustrig
$v".(!strlen($v)?"
":'')."
\n".$abtn; +} + +function print_header(){ + global $err_msg,$VERSION,$DB,$dbh,$self,$is_sht,$xurl,$SHOW_T; + $dbn=$DB['db']; +?> + + +phpMiniAdmin + + + + + + + +
+ + + + +
+phpMiniAdmin + + | ">Databases: + +'>show tables +&shex=1'>export +&shim=1'>import + + | Settings + + | Logoff + | phpinfo +
+ +
+ +=$MAX_ROWS_PER_PAGE) ){ + $nav=""; + } + + print_header(); +?> + +
+ 
+
+ + + + +
+ + + + +

+ +
+
+
+Records: in sec
+ +
+ + +
+
© 2004-2021 Oleg Savchuk
+ + +
+

Access protected by password

+
+ + + +
+
+ +
+

DB Connection Settings

+
+
+
+ + +
+ + +
+
+
+\n".mysqli_error($dbh1)."
\n$sql"); + return $sth; +} + +function db_array($sql, $dbh1=NULL, $skiperr=0, $isnum=0){#array of rows + $sth=db_query($sql, $dbh1, $skiperr, MYSQLI_USE_RESULT); + if (!$sth) return; + $res=array(); + if ($isnum){ + while($row=mysqli_fetch_row($sth)) $res[]=$row; + }else{ + while($row=mysqli_fetch_assoc($sth)) $res[]=$row; + } + mysqli_free_result($sth); + return $res; +} + +function db_row($sql){ + $sth=db_query($sql); + return mysqli_fetch_assoc($sth); +} + +function db_value($sql,$dbh1=NULL,$skiperr=0){ + $sth=db_query($sql,$dbh1,$skiperr); + if (!$sth) return; + $row=mysqli_fetch_row($sth); + return $row[0]; +} + +function get_identity($dbh1=NULL){ + $dbh1=db_checkconnect($dbh1); + return mysqli_insert_id($dbh1); +} + +function get_db_select($sel=''){ + global $DB,$SHOW_D; + if (is_array($_SESSION['pmAdmin']['sql_sd']) && $_REQUEST['db']!='*'){//check cache + $arr=$_SESSION['pmAdmin']['sql_sd']; + }else{ + $arr=db_array($SHOW_D,NULL,1); + if (!is_array($arr)){ + $arr=array( 0 => array('Database' => $DB['db']) ); + } + $_SESSION['pmAdmin']['sql_sd']=$arr; + } + return @sel($arr,'Database',$sel); +} + +function chset_select($sel=''){ + global $DBDEF; + $result=''; + if ($_SESSION['pmAdmin']['sql_chset']){ + $arr=$_SESSION['pmAdmin']['sql_chset']; + }else{ + $arr=db_array("show character set",NULL,1); + if (!is_array($arr)) $arr=array(array('Charset'=>$DBDEF['chset'])); + $_SESSION['pmAdmin']['sql_chset']=$arr; + } + + return @sel($arr,'Charset',$sel); +} + +function sel($arr,$n,$sel=''){ + foreach($arr as $a){ +# echo $a[0]; + $b=$a[$n]; + $res.=""; + } + return $res; +} + +function microtime_float(){ + list($usec,$sec)=explode(" ",microtime()); + return ((float)$usec+(float)$sec); +} + +/* page nav + $pg=int($_[0]); #current page + $all=int($_[1]); #total number of items + $PP=$_[2]; #number if items Per Page + $ptpl=$_[3]; #page url /ukr/dollar/notes.php?page= for notes.php + $show_all=$_[5]; #print Totals? +*/ +function get_nav($pg, $all, $PP, $ptpl, $show_all=''){ + $n=' '; + $sep=" $n|$n\n"; + if (!$PP) $PP=10; + $allp=floor($all/$PP+0.999999); + + $pname=''; + $res=''; + $w=array('Less','More','Back','Next','First','Total'); + + $sp=$pg-2; + if($sp<0) $sp=0; + if($allp-$sp<5 && $allp>=5) $sp=$allp-5; + + $res=""; + + if($sp>0){ + $pname=pen($sp-1,$ptpl); + $res.="$w[0]"; + $res.=$sep; + } + for($p_p=$sp;$p_p<$allp && $p_p<$sp+5;$p_p++){ + $first_s=$p_p*$PP+1; + $last_s=($p_p+1)*$PP; + $pname=pen($p_p,$ptpl); + if($last_s>$all){ + $last_s=$all; + } + if($p_p==$pg){ + $res.="$first_s..$last_s"; + }else{ + $res.="$first_s..$last_s"; + } + if($p_p+1<$allp) $res.=$sep; + } + if($sp+5<$allp){ + $pname=pen($sp+5,$ptpl); + $res.="$w[1]"; + } + $res.="
\n"; + + if($pg>0){ + $pname=pen($pg-1,$ptpl); + $res.="$w[2] $n|$n "; + $pname=pen(0,$ptpl); + $res.="$w[4]"; + } + if($pg>0 && $pg+1<$allp) $res.=$sep; + if($pg+1<$allp){ + $pname=pen($pg+1,$ptpl); + $res.="$w[3]"; + } + if ($show_all) $res.=" ($w[5] - $all) "; + + return $res; +} + +function pen($p,$np=''){ + return str_replace('%p%',$p, $np); +} + +function savecfg(){ + global $DBDEF; + $v=$_REQUEST['v']; + if(!is_array($v))$v=array(); + unset($v['ssl_ca']);unset($v['ssl_key']);unset($v['ssl_cert']);#don't allow override ssl paths from web + $_SESSION['pmAdmin']['DB']=array_merge($DBDEF,$v); + unset($_SESSION['pmAdmin']['sql_sd']); + + if ($_REQUEST['rmb']){ + $tm=time()+60*60*24*30; + newcookie("conn[db]", $v['db'],$tm); + newcookie("conn[user]",$v['user'],$tm); + newcookie("conn[pwd]", $v['pwd'],$tm); + newcookie("conn[host]",$v['host'],$tm); + newcookie("conn[port]",$v['port'],$tm); + newcookie("conn[socket]",$v['socket'],$tm); + newcookie("conn[chset]",$v['chset'],$tm); + }else{ + newcookie("conn[db]", FALSE,-1); + newcookie("conn[user]",FALSE,-1); + newcookie("conn[pwd]", FALSE,-1); + newcookie("conn[host]",FALSE,-1); + newcookie("conn[port]",FALSE,-1); + newcookie("conn[socket]",FALSE,-1); + newcookie("conn[chset]",FALSE,-1); + } +} + +// Allow httponly cookies, or the password is stored plain text in a cookie +function newcookie($n,$v,$e){$x='';return setcookie($n,$v,$e,$x,$x,!!$x,!$x);} + +//during login only - from cookies or use defaults; +function loadcfg(){ + global $DBDEF; + + if( isset($_COOKIE['conn']) ){ + $_SESSION['pmAdmin']['DB']=array_merge($DBDEF,$_COOKIE['conn']); + }else{ + $_SESSION['pmAdmin']['DB']=$DBDEF; + } + if (!strlen($_SESSION['pmAdmin']['DB']['chset'])) $_SESSION['pmAdmin']['DB']['chset']=$DBDEF['chset'];#don't allow empty charset +} + +//each time - from session to $DB_* +function loadsess(){ + global $DB, $is_sm; + + $DB=$_SESSION['pmAdmin']['DB']; + + $rdb=$_REQUEST['db']; + if ($rdb=='*') $rdb=''; + if ($rdb) { + $DB['db']=$rdb; + } + if($_REQUEST['GoSQL']) $_SESSION['pmAdmin']['is_sm']=$_REQUEST['is_sm']+0; + $is_sm=$_SESSION['pmAdmin']['is_sm']+0; +} + +function print_export(){ + global $self,$xurl,$DB,$DUMP_FILE; + $t=$_REQUEST['rt']; + $l=($t)?"Table $t":"whole DB"; + print_header(); +?> +
+

Export

+
+ Structure
+ Data

+
 
+
+ + + + (to export as csv - go to 'show tables' and export just ONE table) + +
+
+
+
+
+ + + + + +

"Dump on Server" exports to file:

+
+
+name).(($i<$fn-1)?",":"")); + } + ex_w($D); + while($row=mysqli_fetch_row($sth)) ex_w(to_csv_row($row)); + mysqli_free_result($sth); + }else{ + ex_start('.sql'); + ex_hdr($ctp?$ctp:'text/plain',"$DB[db]".(($ct==1&&$t[0])?".$t[0]":(($ct>1)?'.'.$ct.'tables':'')).".sql$aext"); + ex_w("-- phpMiniAdmin dump $VERSION$D-- Datetime: ".date('Y-m-d H:i:s')."$D-- Host: $DB[host]$D-- Database: $DB[db]$D$D"); + if ($DB['chset']) ex_w("/*!40030 SET NAMES $DB[chset] */;$D"); + $ex_super && ex_w("/*!40030 SET GLOBAL max_allowed_packet=16777216 */;$D$D"); + ex_w("/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;$D$D"); + + $sth=db_query("show full tables from `$DB[db]`"); + while($row=mysqli_fetch_row($sth)){ + if (!$rt||array_key_exists($row[0],$th)) do_export_table($row[0],$row[1],$MAXI); + } + + ex_w("/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;$D$D"); + ex_w("$D-- phpMiniAdmin dump end$D"); + } + ex_end(); + if (!$ex_issrv) exit; + $out_message='Export done successfully'; +} + +function do_export_table($t='',$tt='',$MAXI=838860){ + global $D,$ex_issrv; + @set_time_limit(600); + + if($_REQUEST['s']){ + $sth=db_query("show create table `$t`"); + $row=mysqli_fetch_row($sth); + $ct=preg_replace("/\n\r|\r\n|\n|\r/",$D,$row[1]); + ex_w("DROP TABLE IF EXISTS `$t`;$D$ct;$D$D"); + } + + if ($_REQUEST['d']&&$tt!='VIEW'){//no dump for views + $exsql=''; + ex_w("/*!40000 ALTER TABLE `$t` DISABLE KEYS */;$D"); + $sth=db_query("select * from `$t`",NULL,0,MYSQLI_USE_RESULT); + while($row=mysqli_fetch_row($sth)){ + $values=''; + foreach($row as $v) $values.=(($values)?',':'').dbq($v); + $exsql.=(($exsql)?',':'')."(".$values.")"; + if (strlen($exsql)>$MAXI) { + ex_w("INSERT INTO `$t` VALUES $exsql;$D");$exsql=''; + } + } + mysqli_free_result($sth); + if ($exsql) ex_w("INSERT INTO `$t` VALUES $exsql;$D"); + ex_w("/*!40000 ALTER TABLE `$t` ENABLE KEYS */;$D$D"); + } + if (!$ex_issrv) flush(); +} + +function ex_hdr($ct,$fn){ + global $ex_issrv; + if ($ex_issrv) return; + header("Content-type: $ct"); + header("Content-Disposition: attachment; filename=\"$fn\""); +} +function ex_start($ext){ + global $ex_isgz,$ex_gz,$ex_tmpf,$ex_issrv,$ex_f,$DUMP_FILE; + if ($ex_isgz){ + $ex_tmpf=($ex_issrv?export_fname($DUMP_FILE,true).$ext:tmp_name()).'.gz'; + if (!($ex_gz=gzopen($ex_tmpf,'wb9'))) die("Error trying to create gz tmp file"); + }else{ + if ($ex_issrv) { + if (!($ex_f=fopen(export_fname($DUMP_FILE,true).$ext,'wb'))) die("Error trying to create dump file"); + } + } +} +function ex_w($s){ + global $ex_isgz,$ex_gz,$ex_issrv,$ex_f; + if ($ex_isgz){ + gzwrite($ex_gz,$s,strlen($s)); + }else{ + if ($ex_issrv){ + fwrite($ex_f,$s); + }else{ + echo $s; + } + } +} +function ex_end(){ + global $ex_isgz,$ex_gz,$ex_tmpf,$ex_issrv,$ex_f; + if ($ex_isgz){ + gzclose($ex_gz); + if (!$ex_issrv){ + readfile($ex_tmpf); + unlink($ex_tmpf); + } + }else{ + if ($ex_issrv) fclose($ex_f); + } +} + +function print_import(){ + global $self,$xurl,$DB,$DUMP_FILE; + print_header(); +?> +
+

Import DB

+
+
+
+
+
+
+ + +
+


+ +
+ '(? '(? '\*\/', + '#' => '[\r\n]+', + '--' => '[\r\n]+', + ); + if ( $aCLOSE[$ochar] && preg_match("/(".$aCLOSE[$ochar].")/", $str, $m, PREG_OFFSET_CAPTURE, $pos ) ) { + $clchar=$m[1][0]; + $clpos=$m[1][1]; + $sl=strlen($m[2][0]); + if ($ochar=="'" && $sl){ + if ($sl % 2){ #don't count as CLOSE char if number of slashes before ' ODD + list($clchar, $clpos)=get_close_char($str, $clpos+strlen($clchar), $ochar); + }else{ + $clpos+=strlen($clchar)-1;$clchar="'";#correction + } + } + } + return array($clchar, $clpos); +} + +function do_one_sql($sql){ + global $last_sth,$last_sql,$MAX_ROWS_PER_PAGE,$page,$is_limited_sql,$last_count,$IS_COUNT; + $sql=trim($sql); + $sql=preg_replace("/;$/","",$sql); + if ($sql){ + $last_sql=$sql;$is_limited_sql=0; + $last_count=NULL; + if (preg_match("/^select/i",$sql) && !preg_match("/limit +\d+/i", $sql)){ + if ($IS_COUNT){ + #get total count + $sql1='select count(*) from ('.$sql.') ___count_table'; + $last_count=db_value($sql1,NULL,'noerr'); + } + $offset=$page*$MAX_ROWS_PER_PAGE; + $sql.=" LIMIT $offset,$MAX_ROWS_PER_PAGE"; + $is_limited_sql=1; + } + $last_sth=db_query($sql,0,'noerr'); + return $last_sth; + } + return 1; +} + +function do_sht(){ + global $SHOW_T; + $cb=$_REQUEST['cb']; + if (!is_array($cb)) $cb=array(); + $sql=''; + switch ($_REQUEST['dosht']){ + case 'exp':$_REQUEST['t']=join(",",$cb);print_export();exit; + case 'drop':$sq='DROP TABLE';break; + case 'trunc':$sq='TRUNCATE TABLE';break; + case 'opt':$sq='OPTIMIZE TABLE';break; + } + if ($sq){ + foreach($cb as $v){ + $sql.=$sq." $v;\n"; + } + } + if ($sql) do_sql($sql); + do_sql($SHOW_T); +} + +function to_csv_row($adata){ + global $D; + $r=''; + foreach ($adata as $a){ + $r.=(($r)?",":"").qstr($a); + } + return $r.$D; +} +function qstr($s){ + $s=nl2br($s); + $s=str_replace('"','""',$s); + return '"'.$s.'"'; +} + +function get_rand_str($len){ + $result=''; + $chars=preg_split('//','ABCDEFabcdef0123456789'); + for($i=0;$i<$len;$i++) $result.=$chars[rand(0,count($chars)-1)]; + return $result; +} + +function check_xss(){ + global $self; + if ($_SESSION['pmAdmin']['XSS']!=trim($_REQUEST['XSS'])){ + unset($_SESSION['pmAdmin']['XSS']); + header("location: $self"); + exit; + } +} + +function rw($s){#for debug + echo hs(var_dump($s))."
\n"; +} + +function tmp_name() { + if ( function_exists('sys_get_temp_dir')) return tempnam(sys_get_temp_dir(),'pma'); + + if( !($temp=getenv('TMP')) ) + if( !($temp=getenv('TEMP')) ) + if( !($temp=getenv('TMPDIR')) ) { + $temp=tempnam(__FILE__,''); + if (file_exists($temp)) { + unlink($temp); + $temp=dirname($temp); + } + } + return $temp ? tempnam($temp,'pma') : null; +} + +function hs($s){ + return htmlspecialchars($s, ENT_COMPAT|ENT_HTML401,'UTF-8'); +} +function eo($s){//echo+escape + echo hs($s); +} +function ue($s){ + return urlencode($s); +} + +function b64e($s){ + return base64_encode($s); +} +function b64u($s){ + return ue(base64_encode($s)); +} +function b64d($s){ + return base64_decode($s); +} +?> \ No newline at end of file diff --git a/samples/phpminiconfig.php b/samples/phpminiconfig.php index 3c1ee49..10b6392 100644 --- a/samples/phpminiconfig.php +++ b/samples/phpminiconfig.php @@ -1,19 +1,24 @@ -'',#required - 'pwd'=>'', #required - 'db'=>'', #optional, default DB - 'host'=>'',#optional - 'port'=>'',#optional - 'socket'=>'',#optional - 'chset'=>'utf8mb4',#optional, default charset - #optional paths for ssl - 'ssl_key'=>NULL, - 'ssl_cert'=>NULL, - 'ssl_ca'=>"",#minimum this is required for ssl connections, if set - ssl connection will try to be established. Example: /path/to/cacert.pem - ); - +'',#required + 'pwd'=>'', #required + 'db'=>'', #optional, default DB + 'host'=>'',#optional + 'port'=>'',#optional + 'socket'=>'',#optional + 'chset'=>'utf8mb4',#optional, default charset + #optional paths for ssl + 'ssl_key'=>NULL, + 'ssl_cert'=>NULL, + 'ssl_ca'=>"",#minimum this is required for ssl connections, if set - ssl connection will try to be established. Example: /path/to/cacert.pem + ); +?>