/** Adminer - Compact database management* @link https://www.adminer.org/* @author Jakub Vrana, https://www.vrana.cz/* @copyright 2007 Jakub Vrana* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)* @version 5.3.0*/namespaceAdminer;constVERSION="5.3.0";error_reporting(24575);set_error_handler(function($Fc,$Hc){return!!preg_match('~^Undefined (array key|offset|index)~',$Hc);},E_WARNING|E_NOTICE);$cd=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($cd||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$sj=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($sj)$$X=$sj;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");functionconnection($h=null){return($h?:Db::$instance);}functionadminer(){returnAdminer::$instance;}functiondriver(){returnDriver::$instance;}functionconnect(){$Hb=adminer()->credentials();$J=Driver::connect($Hb[0],$Hb[1],$Hb[2]);return(is_object($J)?$J:null);}functionidf_unescape($v){if(!preg_match('~^[`\'"[]~',$v))return$v;$Ke=substr($v,-1);returnstr_replace($Ke.$Ke,$Ke,substr($v,1,-1));}functionq($Q){returnconnection()->quote($Q);}functionescape_string($X){returnsubstr(q($X),1,-1);}functionidx($xa,$y,$l=null){return($xa&&array_key_exists($y,$xa)?$xa[$y]:$l);}functionnumber($X){returnpreg_replace('~[^0-9]+~','',$X);}functionnumber_type(){return'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)';}functionremove_slashes(array$ah,$cd=false){if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){while(list($y,$X)=each($ah)){foreach($Xas$Be=>$W){unset($ah[$y][$Be]);if(is_array($W)){$ah[$y][stripslashes($Be)]=$W;$ah[]=&$ah[$y][stripslashes($Be)];}else$ah[$y][stripslashes($Be)]=($cd?$W:stripslashes($W));}}}}functionbracket_escape($v,$Ea=false){static$bj=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');returnstrtr($v,($Ea?array_flip($bj):$bj));}functionmin_version($Ij,$Ze="",$h=null){$h=connection($h);$Uh=$h->server_info;if($Ze&&preg_match('~([\d.]+)-MariaDB~',$Uh,$A)){$Uh=$A[1];$Ij=$Ze;}return$Ij&&version_compare($Uh,$Ij)>=0;}functioncharset(Db$g){return(min_version("5.5.3",0,$g)?"utf8mb4":"utf8");}functionini_bool($le){$X=ini_get($le);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}functionsid(){static$J;if($J===null)$J=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$J;}functionset_password($Hj,$N,$V,$F){$_SESSION["pwds"][$Hj][$N][$V]=($_COOKIE["adminer_key"]&&is_string($F)?array(encrypt_string($F,$_COOKIE["adminer_key"])):$F);}functionget_password(){$J=get_session("pwds");if(is_array($J))$J=($_COOKIE["adminer_key"]?decrypt_string($J[0],$_COOKIE["adminer_key"]):false);return$J;}functionget_val($H,$n=0,$vb=null){$vb=connection($vb);$I=$vb->query($H);if(!is_object($I))returnfalse;$K=$I->fetch_row();return($K?$K[$n]:false);}functionget_vals($H,$d=0){$J=array();$I=connection()->query($H);if(is_object($I)){while($K=$I->fetch_row())$J[]=$K[$d];}return$J;}functionget_key_vals($H,$h=null,$Xh=true){$h=connection($h);$J=array();$I=$h->query($H);if(is_object($I)){while($K=$I->fetch_row()){if($Xh)$J[$K[0]]=$K[1];else$J[]=$K[0];}}return$J;}functionget_rows($H,$h=null,$m="<p class='error'>"){$vb=connection($h);$J=array();$I=$vb->query($H);if(is_object($I)){while($K=$I->fetch_assoc())$J[]=$K;}elseif(!$I&&!$h&&$m&&(defined('Adminer\PAGE_HEADER')||$m=="-- "))echo$m.error()."\n";return$J;}functionunique_array($K,array$x){foreach($xas$w){if(preg_match("~PRIMARY|UNIQUE~",$w["type"])){$J=array();foreach($w["columns"]as$y){if(!isset($K[$y]))continue2;$J[$y]=$K[$y];}return$J;}}}functionescape_key($y){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$y,$A))return$A[1].idf_escape(idf_unescape($A[2])).$A[3];returnidf_escape($y);}functionwhere(array$Z,array$o=array()){$J=array();foreach((array)$Z["where"]as$y=>$X){$y=bracket_escape($y,true);$d=escape_key($y);$n=idx($o,$y,array());$ad=$n["type"];$J[]=$d.(JUSH=="sql"&&$ad=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($ad,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($n,q($X)))));if(JUSH=="sql"&&preg_match('~char|text~',$ad)&&preg_match("~[^ -@]~",$X))$J[]="$d = ".q($X)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$y)$J[]=escape_key($y)." IS NULL";returnimplode(" AND ",$J);}functionwhere_check($X,array$o=array()){parse_str($X,$Ya);remove_slashes(array(&$Ya));returnwhere($Ya,$o);}functionwhere_link($t,$d,$Y,$Xf="="){return"&where%5B$t%5D%5Bcol%5D=".urlencode($d)."&where%5B$t%5D%5Bop%5D=".urlencode(($Y!==null?$Xf:"IS NULL"))."&where%5B$t%5D%5Bval%5D=".urlencode($Y);}functionconvert_fields(array$e,array$o,array$M=array()){$J="";foreach($eas$y=>$X){if($M&&!in_array(idf_escape($y),$M))continue;$ya=convert_field($o[$y]);if($ya)$J.=", $ya AS ".idf_escape($y);}return$J;}functioncookie($B,$Y,$Se=2592000){header("Set-Cookie: $B=".urlencode($Y).($Se?"; expires=".gmdate("D, d M Y H:i:s",time()+$Se)." GMT":"")."; path=".preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]).(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}functionget_settings($Db){parse_str($_COOKIE[$Db],$Yh);return$Yh;}functionget_setting($y,$Db="adminer_settings"){$Yh=get_settings($Db);return$Yh[$y];}functionsave_settings(array$Yh,$Db="adminer_settings"){$Y=http_build_query($Yh+get_settings($Db));cookie($Db,$Y);$_COOKIE[$Db]=$Y;}functionrestart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==1))session_start();}functionstop_session($kd=false){$_j=ini_bool("session.use_cookies");if(!$_j||$kd){session_write_close();if($_j&&@ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($y){return$_SESSION[$y][DRIVER][SERVER][$_GET["username"]];}functionset_session($y,$X){$_SESSION[$y][DRIVER][SERVER][$_GET["username"]]=$X;}functionauth_url($Hj,$N,$V,$k=null){$wj=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($k!==null?"db|":"").($Hj=='mssql'||$Hj=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$wj,$A);return"$A[1]?".(sid()?SID."&":"").($Hj!="server"||$N!=""?urlencode($Hj)."=".urlencode($N)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($V).($k!=""?"&db=".urlencode($k):"").($A[2]?"&$A[2]":"");}functionis_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}functionredirect($Ve,$mf=null){if($mf!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($Ve!==null?$Ve:$_SERVER["REQUEST_URI"]))][]=$mf;}if($Ve!==null){if($Ve=="")$Ve=".";header("Location: $Ve");exit;}}functionquery_redirect($H,$Ve,$mf,$jh=true,$Mc=true,$Vc=false,$Oi=""){if($Mc){$ni=microtime(true);$Vc=!connection()->query($H);$Oi=format_time($ni);}$hi=($H?adminer()->messageQuery($H,$Oi,$Vc):"");if($Vc){adminer()->error.=error().$hi.script("messagesPrint();")."
";returnfalse;}if($jh)redirect($Ve,$mf.$hi);returntrue;}classQueries{static$queries=array();static$start=0;}functionqueries($H){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(preg_match('~;$~',$H)?"DELIMITER ;;\n$H;\nDELIMITER ":$H).";";returnconnection()->query($H);}functionapply_queries($H,array$T,$Ic='Adminer\table'){foreach($Tas$R){if(!queries("$H ".$Ic($R)))returnfalse;}returntrue;}functionqueries_redirect($Ve,$mf,$jh){$eh=implode("\n",Queries::$queries);$Oi=format_time(Queries::$start);returnquery_redirect($eh,$Ve,$mf,$jh,false,!$jh,$Oi);}functionformat_time($ni){returnlang(0,max(0,microtime(true)-$ni));}functionrelative_uri(){returnstr_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}functionremove_from_uri($ug=""){returnsubstr(preg_replace("~(?<=[?&])($ug".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}functionget_file($y,$Tb=false,$Zb=""){$bd=$_FILES[$y];if(!$bd)returnnull;foreach($bdas$y=>$X)$bd[$y]=(array)$X;$J='';foreach($bd["error"]as$y=>$m){if($m)return$m;$B=$bd["name"][$y];$Wi=$bd["tmp_name"][$y];$_b=file_get_contents($Tb&&preg_match('~\.gz$~',$B)?"compress.zlib://$Wi":$Wi);if($Tb){$ni=substr($_b,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$ni))$_b=iconv("utf-16","utf-8",$_b);elseif($ni=="\xEF\xBB\xBF")$_b=substr($_b,3);}$J.=$_b;if($Zb)$J.=(preg_match("($Zb\\s*\$)",$_b)?"":$Zb)."\n\n";}return$J;}functionupload_error($m){$hf=($m==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($m?lang(1).($hf?" ".lang(2,$hf):""):lang(3));}functionrepeat_pattern($Gg,$Qe){returnstr_repeat("$Gg{0,65535}",$Qe/65535)."$Gg{0,".($Qe%65535)."}";}functionis_utf8($X){return(preg_match('~~u',$X)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$X));}functionformat_number($X){returnstrtr(number_format($X,0,".",lang(4)),preg_split('~~u',lang(5),-1,PREG_SPLIT_NO_EMPTY));}functionfriendly_url($X){returnpreg_replace('~\W~i','-',$X);}functiontable_status1($R,$Wc=false){$J=table_status($R,$Wc);return($J?reset($J):array("Name"=>$R));}functioncolumn_foreign_keys($R){$J=array();foreach(adminer()->foreignKeys($R)as$q){foreach($q["source"]as$X)$J[$X][]=$q;}return$J;}functionfields_from_edit(){$J=array();foreach((array)$_POST["field_keys"]as$y=>$X){if($X!=""){$X=bracket_escape($X);$_POST["function"][$X]=$_POST["field_funs"][$y];$_POST["fields"][$X]=$_POST["field_vals"][$y];}}foreach((array)$_POST["fields"]as$y=>$X){$B=bracket_escape($y,true);$J[$B]=array("field"=>$B,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($y==driver()->primary),);}return$J;}functiondump_headers($Sd,$wf=false){$J=adminer()->dumpHeaders($Sd,$wf);$qg=$_POST["output"];if($qg!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($Sd).".$J".($qg!="file"&&preg_match('~^[0-9a-z]+$~',$qg)?".$qg":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$J;}functiondump_csv(array$K){foreach($Kas$y=>$X){if(preg_match('~["\n,;\t]|^0|\.\d*0$~',$X)||$X==="")$K[$y]='"'.str_replace('"','""',$X).'"';}echoimplode(($_POST["format"]=="csv"?",":($_POST["format"]=="tsv"?"\t":";")),$K)."\r\n";}functionapply_sql_function($s,$d){return($s?($s=="unixepoch"?"DATETIME($d, '$s')":($s=="count distinct"?"COUNT(DISTINCT ":strtoupper("$s("))."$d)"):$d);}functionget_temp_dir(){$J=ini_get("upload_tmp_dir");if(!$J){if(function_exists('sys_get_temp_dir'))$J=sys_get_temp_dir();else{$p=@tempnam("","");if(!$p)return'';$J=dirname($p);unlink($p);}}return$J;}functionfile_open_lock($p){if(is_link($p))return;$r=@fopen($p,"c+");if(!$r)return;chmod($p,0660);if(!flock($r,LOCK_EX)){fclose($r);return;}return$r;}functionfile_write_unlock($r,$Nb){rewind($r);fwrite($r,$Nb);ftruncate($r,strlen($Nb));file_unlock($r);}functionfile_unlock($r){flock($r,LOCK_UN);fclose($r);}functionfirst(array$xa){returnreset($xa);}functionpassword_file($i){$p=get_temp_dir()."/adminer.key";if(!$i&&!file_exists($p))return'';$r=file_open_lock($p);if(!$r)return'';$J=stream_get_contents($r);if(!$J){$J=rand_string();file_write_unlock($r,$J);}elsefile_unlock($r);return$J;}functionrand_string(){returnmd5(uniqid(strval(mt_rand()),true));}functionselect_value($X,$_,array$n,$Ni){if(is_array($X)){$J="";foreach($Xas$Be=>$W)$J.="