📄 index.php
字号:
if (eregi('^.*\.(mp3)$',$filename)) return 'audio/mp3'; if (eregi('^.*\.(inc|phtml|php(3-4)?)$',$filename)) return 'text/phps'; if (eregi('^.*\.(htm|html)$',$filename)) return 'text/html'; if (eregi('^.*\.(doc|dot)$',$filename)) return 'text/msword'; if (eregi('^.*\.(xls|xlt)$',$filename)) return 'text/msexcel'; if (eregi('^.*\.rtf$',$filename)) return 'text/rtf'; if (eregi('^.*\.pdf$',$filename)) return 'text/pdf'; if (eregi('^.*\.ps$',$filename)) return 'text/ps'; // DETERMINE BY FILE CONTENTS ----------------------------------------------- // // ... using the first $default['PAGER_BYTES'] bytes of the file // (we have to avoid reading the entire file into memory) $content = ''; $file = fopen($filename,'r'); $content = fread($file, $default['PAGER_BYTES']); fclose($file); // IMAGE by content ------------------------------- $dimensions = strlen($content) ? linpha_getimagesize($filename) : ''; if (is_array($dimensions)) return 'image'; // BINARY by content ------------------------------ if (preg_replace('/[^\x09\x0c\x0d\x0a\x20-\x7f\x9f-\xfe]/', '.',$content)!=$content) return 'binary'; // WHEN IT'S NOT BINARY NOR A KNOWN FILETYPE => TEXT return 'text/plain';}// ----------------------------------------------------------------------------function display_file($filename) {global $dirleft, $default; include_once(TOP_DIR.'/plugins/ftp/includes/viewer.inc.php'); $pager_bytes = $default['PAGER_BYTES']; if (isset($_COOKIE['pager_bytes'])) $pager_bytes = $_COOKIE['pager_bytes']; $start = 0; if (isset($_REQUEST['start'])) $start = $_REQUEST['start']; $type = determine_filetype($filename); switch ($type) { case 'image': view_image($filename, $pager_bytes); break; case 'audio/mp3': view_with_content_type($filename,'audio/mpeg'); break; case 'text/plain': view_text($filename, $start, $pager_bytes); break; case 'text/html': view_html($filename, $start, $pager_bytes); break; case 'text/phps': view_php($filename, $start, $pager_bytes); break; case 'text/msword': view_with_content_type($filename,'application/msword'); break; case 'text/msexcel': view_with_content_type($filename,'application/msexcel'); break; case 'text/pdf': view_with_content_type($filename,'application/pdf'); break; case 'text/rtf': view_with_content_type($filename,'application/rtf'); break; case 'text/ps': view_with_content_type($filename,'application/postscript'); break; default: view_binary($filename, $start, $pager_bytes); break; }}// ----------------------------------------------------------------------------function edit_file($filename) {global $dirleft, $default; include_once(TOP_DIR.'/plugins/ftp/includes/editor.inc.php'); $start = 0; if (isset($_REQUEST['start'])) $start = $_REQUEST['start']; $type = determine_filetype($filename); switch ($type) { case 'text/plain': edit_text($filename); break; case 'text/phps': edit_text($filename); break; default: edit_binary($filename); break; }}// ----------------------------------------------------------------------------function save_textfile() {global $message; if (is_writable($_REQUEST['f'])) { $f = fopen ( $_REQUEST['f'], 'w' ); fputs ( $f, $_REQUEST['contents'] ) ; fclose ( $f ) ; } else $message .= sprintf(STR_EDITOR_SAVE_ERROR,$_REQUEST['f']);}// ----------------------------------------------------------------------------function save_binaryfile() {global $message, $default; if (is_writable($_REQUEST['f'])) { $string = ''; $start = $_REQUEST['start']; $i = $start; while (isset($_REQUEST['i_'.$i])) { if ($default['EDITOR_BINEDITOR_DECIMAL_EDIT']) // decimal edit $check = ereg('^[0-9]{1,2}$',$_REQUEST['i_'.$i]); else // hexadecimal editing $check = ereg('^[0-9a-fA-F]{1,2}$',$_REQUEST['i_'.$i]); if (!$check) { $message .= sprintf( STR_EDITOR_SAVE_ERROR_WRONG_VALUE . ( $default['EDITOR_BINEDITOR_DECIMAL_EDIT'] ? STR_EDITOR_SAVE_ERROR_DEC_VALUE_NEEDED : STR_EDITOR_SAVE_ERROR_HEX_VALUE_NEEDED ), $_REQUEST['f'], $i, $_REQUEST['i_'.$i] ); unset($_REQUEST['i_'.$i]); } else { $string .= chr(hexdec(trim($_REQUEST['i_'.$i]))); $i++; } } if (!strlen($message)) { $f = fopen( $_REQUEST['f'], 'rb+' ); flock($f, LOCK_EX); fseek($f, $start); fputs($f, $string, strlen($string)); flock($f, LOCK_UN); fclose($f); } } else $message .= sprintf(STR_EDITOR_SAVE_ERROR,$_REQUEST['f']);}// ----------------------------------------------------------------------------function panel($dir, $sideflag) {global $default, $sortpass, $dirleft, $message, $filetypes, $filealts; if (!($hnd = @opendir($dir))) return '<TR><TD>'.STR_ERROR_DIR.'</TD></TR>'; $dirleftparent = fixed_dirname($dirleft); // COLLECT DIRECTORY INFORMATION // // $files is a kinda pervert multi-dimensional array // (uses eg. $files['filesize'][$number_of_file] instead of // $files[$number_of_file]['filesize']) // but I had to use this approach because the multisort() function // expects arrays of this structure $files = Array( 'rowbegin' => Array(), 'icon' => Array(), 'dir' => Array(), 'isdotdir' => Array(), 'isdotdir1' => Array(), 'sortname' => Array(), 'filename' => Array(), 'size' => Array(), 'link' => Array(), 'ctime' => Array(), 'atime' => Array(), 'mtime' => Array(), 'rights' => Array() ); $i = 0; $sum['size'] = 0; $sum['files'] = 0; $use_posix = check_posix(); if($use_posix) { $uid = @posix_getuid(); // get user id of current process } else { $uid = 0; } while(($filename = readdir($hnd))!==false) { $isdotdir1 = ($filename == '.'); $isdotdir2 = ($filename == '..'); $isdotdir = $isdotdir1 || $isdotdir2; $dir = is_dir($dirleft . '/' . $filename ); $passdirleft = $dirleft; if (!$sideflag && $dir) $passdirleft = $isdotdir2 ? $dirleftparent : $dirleft . ($isdotdir1 ? '' : '/' . $filename); $icon = ''; $iconalt = ''; eregi("^.*(\.([^\.]+))$", $filename, $nameparts); if (isset($nameparts[2])) { $ext = strtolower($nameparts[2]); foreach ($filetypes as $key=>$value) { $extensions = explode(',' , $value); if (in_array( $ext, $extensions )) { $icon = $key; $iconalt = $filealts[$key]; } } unset($nameparts); } if ($dir && !$isdotdir) { $icon = 'folder'; $iconalt = $filealts['folder']; } if ($isdotdir2) { $icon = 'back'; $iconalt = $filealts['parentdir']; } $thisfileWithPath = $dirleft . '/' . $filename; $link = htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES)."?lt=".urlencode($passdirleft). AMP . "page=ftp" . AMP . $sortpass . ($dir ? '' : AMP . 'todo=openfile' . AMP . 'f=' . urlencode($thisfileWithPath)); $stat = stat($thisfileWithPath); if ( !$isdotdir ) { $sum['size'] += $stat['size']; $sum['files']++; } if($use_posix) { $owner_info = @posix_getpwuid($stat['uid']); // use @ because check_posix() can return true even if it fails... $group_info = @posix_getgrgid($stat['gid']); } else { $owner_info['name'] = ''; $group_info['name'] = ''; } /** * pay attention!!!!! * if you add entries in $files, you have to add them also in the array_multisort() function in line ~1043 !! */ $files['icon'][$i] = ( strlen($icon) ? "<IMG BORDER=0 ALT='$iconalt' TITLE='$iconalt' SRC='plugins/ftp/images/icons/$icon.png'>" : SP); $files['dir'][$i] = $dir; $files['isdotdir'][$i] = $isdotdir; $files['isdotdir1'][$i] = $isdotdir1; $files['filename'][$i] = htmlspecialchars($filename, ENT_QUOTES); $files['sortname'][$i] = strtoupper($filename); $files['link'][$i] = $link; $files['size'][$i] = $stat['size'];// $files['ctime'][$i] = date("Y-m-d H:i:s",$stat['ctime']);// $files['atime'][$i] = date("Y-m-d H:i:s",$stat['atime']);// $files['mtime'][$i] = date("Y-m-d H:i:s",$stat['mtime']); $files['ctime'][$i] = linpha_strftime('',$stat['ctime']); $files['atime'][$i] = linpha_strftime('',$stat['atime']); $files['mtime'][$i] = linpha_strftime('',$stat['mtime']); $files['uid'][$i] = $stat['uid']; $files['gid'][$i] = $stat['gid']; $files['ownername'][$i] = $owner_info['name']; $files['groupname'][$i] = $group_info['name']; // file permissions if(getOS() == 'win') { $files['rights'][$i] = '[' . (is_readable($thisfileWithPath) ? '<FONT CLASS="green">r</FONT>' : SP) . (is_writable($thisfileWithPath) ? '<FONT CLASS="red">w</FONT>' : SP) . (function_exists('is_executable') ? (is_executable($thisfileWithPath) ? '<FONT CLASS="blue">x</FONT>' : SP) : SP ) . ']'; } else { $perm = '['.get_readable_fileperms($thisfileWithPath).']'; $perm = str_replace('r','<FONT CLASS="green">r</FONT>',$perm); $perm = str_replace('w','<FONT CLASS="red">w</FONT>',$perm); $perm = str_replace('x','<FONT CLASS="blue">x</FONT>',$perm); if($uid == $stat['uid']) { $files['rights'][$i] = '<a href="'.htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES).'?lt='.urlencode($dirleft). AMP . 'todo=change_perm_form'. AMP . 'f='.urlencode($thisfileWithPath). AMP . 'page=ftp">'. $perm . '</a>'; } else { $files['rights'][$i] = $perm; } } $i++; } closedir($hnd); // SORT CONTENTS ------------------------------------------------------------ // 'sort by' field per side and 'sort by' field of current panel ------------ $sortby0 = $default['PANEL_SORTBY']; if (isset($_REQUEST['sortby0']) && in_array($_REQUEST['sortby0'],Array('name','size','mtime'))) $sortby0 = $_REQUEST['sortby0']; $sortby = $sortby0; // 'sort direction' per side and 'sort direction' of current panel ---------- $sortdir0 = $default['PANEL_SORTDIRECTION']; if (isset($_REQUEST['sortdir0']) && ($_REQUEST['sortdir0']=='desc')) $sortdir0 = SORT_DESC; $sortdir = $sortdir0; // the $sort array is going to be a two-dimensional array. // it's gonna contain arrays that are containing the parameter- // triples for multisort(): // // $sort[n] = Array('field_name_of_files_array', sort_direction, sort_type); // // as defined below ($bydir, $byfilename, etc.) // these arrays are going to be inserted into the $sort array // in the order needed // $bydir = Array('dir', SORT_DESC, SORT_STRING); $byfilename = Array('sortname', SORT_ASC, SORT_STRING); $bysize = Array('size', SORT_ASC, SORT_NUMERIC); $bymtime = Array('mtime', SORT_ASC, SORT_STRING); $sort = Array(); // in the parameter-array corresponding the user-chosen sort // field (eg. $by...) we always change the second field (the // sort direction), that's what $by...[1] = $sortdir; is for. // other fields' sort order are used as defaults // if the user wants to see the directories first, // we only have to change the order of arrays if ($default['PANEL_DIRSFIRST']) switch ($sortby) { case 'size': $bysize[1] = $sortdir; $sort = Array($bydir, $bysize, $byfilename, $bymtime); break; case 'mtime': $bymtime[1] = $sortdir; $sort = Array($bydir, $bymtime, $byfilename, $bysize); break; default: $byfilename[1] = $sortdir; $sort = Array($bydir, $byfilename, $bysize, $bymtime); break; } else switch ($sortby) { case 'size': $bysize[1] = $sortdir; $sort = Array($bysize, $byfilename, $bymtime, $bydir); break; case 'mtime': $bymtime[1] = $sortdir; $sort = Array($bymtime, $byfilename, $bysize, $bydir); break; default: $byfilename[1] = $sortdir; $sort = Array($byfilename, $bysize, $bymtime, $bydir); break; } array_multisort( // 'dot directories' (eg. '.' and '..') are always // in the first place $files['isdotdir'], SORT_DESC, SORT_STRING, $files['isdotdir1'], SORT_DESC, SORT_STRING, $files[ $sort[0][0] ], $sort[0][1], $sort[0][2], $files[ $sort[1][0] ], $sort[1][1], $sort[1][2], $files[ $sort[2][0] ], $sort[2][1], $sort[2][2], $files[ $sort[3][0] ], $sort[3][1], $sort[3][2], /* we have to include remaining fields in the sorting procedure too, to keep the multi-dimensional array consistent */ $files['atime'],
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -