user:admin; password:admin; 请自行修改, 理论上支持php7以上, 文件大小应该是24.2k
本文转自免费吧论坛:https://www.free8.net/thread-290402-1-1.html
<?php session_start(); $version = '3.2'; $sess_id = 'sess_suexplorer'; $prules = array( 'delfile', 'deldir', 'savefile', 'newfile', 'mkdir', 'renamefile', 'renamedir', 'chomdfile', 'chomddir', 'zip', 'unzip' ); $config = array( 'users' => array( 'admin' => array( 'admin', array( 'allow' => array(), 'forbit' => array() ) ), ), ); $login_data = isset( $_SESSION[ $sess_id ] ) ? $_SESSION[ $sess_id ] : false; $action = I( 'action' ); $view = I( 'view' ); $path = I( 'path', '/' ); $parent_path = path_getdir( $path ); switch ( $action ) { case 'login': if ( !SuExplorer::user_login( $config, $sess_id, $msg ) ) { redirect( '?r=fail', 1, $msg ); } else { redirect( '?r=ok' ); } break; case 'logout': SuExplorer::user_logout( $sess_id ); redirect( '?r=ok' ); break; case 'del': if ( !SuExplorer::act_delete_path( $path, $msg ) ) { redirect( '?path=' . $path, 1, $msg ); } else { redirect( '?path=' . path_getdir( $path ), 1, '恭喜,操作成功!' ); } break; case 'savefile': case 'save_newfile': if ( !SuExplorer::act_save_file( $msg ) ) { redirect( '?path=' . $path, 1, $msg ); } else { redirect( '?path=' . $path, 1, '恭喜,操作成功!' ); } break; case 'save_newdir': if ( !SuExplorer::act_save_newdir( $msg ) ) { redirect( '?path=' . $path, 1, $msg ); } else { redirect( '?path=' . $path, 1, '恭喜,操作成功!' ); } break; case 'upload_file': if ( !SuExplorer::act_upload_file( $msg ) ) { redirect( '?path=' . $path, 1, $msg ); } else { redirect( '?path=' . $path, 1, '恭喜,文件上传成功!' ); } break; case 'rename_path': if ( !SuExplorer::act_rename_path( $msg ) ) { redirect( '?path=' . $path, 1, $msg ); } else { redirect( '?path=' . pathinfo( $path, PATHINFO_DIRNAME ), 1, '恭喜,操作成功!' ); } break; case 'chmod_path': if ( !SuExplorer::act_chmod_path( $msg ) ) { redirect( '?path=' . $path, 1, $msg ); } else { redirect( '?path=' . $path, 1, '恭喜,操作成功!' ); } break; case 'zip': if ( !SuExplorer::act_zip( $msg ) ) { redirect( '?path=' . $path, 1, $msg ); } else { redirect( '?path=' . $path, 1, '恭喜,操作成功!' ); } break; case 'unzip': if ( !SuExplorer::act_unzip( $msg ) ) { redirect( '?path=' . $path, 1, $msg ); } else { redirect( '?path=' . $path, 1, '恭喜,操作成功!' ); } break; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>SuExplorer-<?php echo $version ?></title> <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> <style type="text/css"> body { font-size: 16px; color: #333; } a { text-decoration: none; } textarea { font-size: 16px; line-height: 18px; padding: 5px; } th { font-weight: normal; } div { margin: 15px 0 10px 0; } ul { list-style-type: none; margin: 5px 0; padding: 5px; line-height: 100%; display: flex; justify-content: space-around; flex-wrap: wrap; align-items: center; } li { margin: 10px auto; text-align: center; width: 45%; padding: 5px 10px; border-radius: 10px; border: 1px solid #999; } button { margin: 0 5px; padding: 5px 10px; font-size: 16px; background-color: #0180cf; color: white; border: none; border-radius: 4px; } h1 { margin: 10px auto; font-size: 35px; color: #0180cf; text-align: center; } .outmain { max-width: 80%; min-width: 1060px; margin: 20px auto; padding: 15px; border: 1px solid rgba(0, 0, 0, .25); border-radius: 15px; box-shadow: inset 0 0 10px rgb(50 50 200 / 40%); } .head, .footer { max-width: 80%; min-width: 1060px; margin: 20px auto; text-align: center; } .userbar a:before { content: '[' } .userbar a:after { content: ']' } .dir-contents { width: 1050px; display: table; } .dir-contents a { margin-right: 20px; line-height: 21px; text-decoration: none; float: left; } .blue { color: #0000db } .lightblue { color: #1bd1a5 } .purple { color: #9900ff } .green { color: #009900 } .red { color: #f00 } .grey { color: #000; } .nav { line-height: 18px; } .nav a { color: #333; } .nav a:before { content: ' » ' } .nav a:first-child:before { content: '' } .nav div { color: #ccc; border-bottom: solid 1px #ccc; margin-bottom: 5px; } .filesize { color: blue; float: right; margin-left: 10px; } </style> </head> <body> <div class="head"> <h1>SuExplorer skin By Yaner</h1> </div> <div class="outmain"> <?php if ($login_data): ?> <div class="userbar"> 欢迎您, <?php echo $login_data['user_name'] ?> <a href="?action=logout">注销</a> <a href="?view=newfile&path=<?php echo $parent_path ?>">新建文件</a> <a href="?view=upload&path=<?php echo $parent_path ?>">上传文件</a> <a href="?view=newdir&path=<?php echo $parent_path ?>">新建目录</a> <a href="?view=zip&path=<?php echo $parent_path ?>">打包目录</a> <a href="?view=unzip&path=<?php echo $parent_path ?>">解压目录</a> </div> <div> <form method="get" action="#" id="frm-path"> <input type="text" name="path" value="<?php echo $path ?>" style="width:50%;color:#333;padding:5px;border-radius: 5px;border: 2px solid #0180CF;" required="required" /> <input type="hidden" id="action" name="action" value="" /> <input type="hidden" id="do" name="do" value="" /> <button type="submit">转到</button> <button type="button" onclick="return del_cofirm('frm-path', '删除');">删除</button> <button type="button" data-path="<?php echo $path ?>" onclick="go_url(this, 'rename')">重命名</button> <button type="button" data-path="<?php echo $path ?>" onclick="go_url(this, 'chmod')">权限</button> </form> </div> <div> <?php SuExplorer::index($view, $path) ?> </div> <script type="text/javascript"> function del_cofirm(form_id, act_name) { if (!confirm('您确定要' + act_name + '吗?')) { return false; } var i = 0; function confirmx() { i++; return confirm(i + '.重要的操作要重复问三遍,您确定要' + act_name + '吗?'); } while (i < 3) { if (!confirmx()) { return false; } } document.getElementById("action").value = "del"; document.getElementById("do").value = "yes"; document.getElementById(form_id).submit(); } function go_url(btn, view) { location.href = '?path=' + $(btn).data('path') + '&view=' + view; } </script> <?php else: ?> <form method="post"> <table> <tr> <th>用户名:</th> <td><input type="text" name="uname" placeholder="用户名" required="required" /></td> </tr> <tr> <th>密 码:</th> <td><input type="password" name="upwd" placeholder="密码" required="required" /></td> </tr> </table> <input type="hidden" name="action" value="login" /> <button type="submit">登录</button> <button type="reset">重置</button> </form> <?php endif; ?> </div> <div class="footer">SuExplorer skin By Yaner<script type="text/javascript" src="https://js.users.51.la/3591374.js"></script></div> </body> </html> <?php function I( $name, $defv = '' ) { if ( isset( $_GET[ $name ] ) ) { return $_GET[ $name ]; } return isset( $_POST[ $name ] ) ? $_POST[ $name ] : $defv; } function redirect( $url, $time = 0, $msg = '' ) { $url = str_replace( array( "\n", "\r" ), '', $url ); if ( empty( $msg ) ) $msg = "系统将在{$time}秒之后自动跳转到{$url}!"; if ( !headers_sent() ) { if ( 0 === $time ) { header( 'Location: ' . $url ); } else { header( "refresh:{$time};url={$url}" ); echo( $msg ); } exit(); } else { $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>"; if ( $time != 0 ) $str .= $msg; exit( $str ); } } function get_exten_catetory( $exten ) { if ( $exten ) { $filetypes = array( 'zip' => array( 'zip', 'rar', '7-zip', 'tar', 'gz', 'gzip' ), 'doc' => array( 'txt', 'rtf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'wps', 'et' ), 'script' => array( 'php', 'js', 'css', 'c', 'html', 'htm', 'shtml' ), 'image' => array( 'jpg', 'jpeg', 'png', 'gif', 'tiff', 'psd', 'bmp', 'ico' ) ); foreach ( $filetypes as $catetory => $extens ) { if ( in_array( $exten, $extens ) ) { return $catetory; } } } return ''; } function path_ator( $path ) { $root = $_SERVER[ 'DOCUMENT_ROOT' ]; $path = substr( $path, strlen( $root ) ); if ( '/' != DIRECTORY_SEPARATOR ) { $path = str_replace( DIRECTORY_SEPARATOR, '/', $path ); } return $path; } function path_rtoa( $path ) { $root = $_SERVER[ 'DOCUMENT_ROOT' ]; if ( '/' != DIRECTORY_SEPARATOR ) { $path = str_replace( '/', DIRECTORY_SEPARATOR, $path ); } return $root . $path; } function path_getdir( $path, $is_r = true ) { if ( !$path || is_dir( $is_r ? path_rtoa( $path ) : $path ) ) { return $path; } return pathinfo( $path, PATHINFO_DIRNAME ); } class SuExplorer { CONST VERSION = '3.0.0'; static function index( $view, $path ) { self::location_to_breadcrumb( $path ); switch ( $view ) { case 'newfile': self::view_create_file( $path ); break; case 'newdir': self::view_create_dir( $path ); break; case 'upload': self::view_upload_file( $path ); break; case 'rename': self::view_rename_path( $path ); break; case 'chmod': self::view_chmod_path( $path ); break; case 'zip': self::view_zip(); break; case 'unzip': self::view_unzip(); break; default: $sapath = path_rtoa( $path ); if ( is_dir( $sapath ) ) { $files = self::get_dir_contents_sorted( $path ); self::view_content_list_sorted( $files ); } else if ( is_file( $sapath ) ) { self::view_edit_file( $path ); } else { echo '<strong class="red">文件或目录不存在或已删除!</strong>'; } break; } } static function get_dir_contents_sorted( $path ) { $files = self::get_dir_contents( $path, array( 'name' => true, 'path' => false, 'real_path' => false, 'relative_path' => true, 'exten' => false, 'ctime' => false, 'mtime' => false, 'size' => true, 'is_dir' => true, 'is_file' => false, 'is_link' => true, 'is_executable' => true, 'is_readable' => false, 'is_writable' => false, 'filetype' => true ) ); usort( $files, function ( $a, $b ) { if ( $a[ 'is_dir' ] && !$b[ 'is_dir' ] ) { return -1; } elseif ( !$a[ 'is_dir' ] && $b[ 'is_dir' ] ) { return 1; } else { return strnatcasecmp( $a[ 'name' ], $b[ 'name' ] ); } } ); return $files; } static function user_login( $config, $sess_id, & $msg = '' ) { if ( !$_POST || !isset( $_POST[ 'uname' ] ) ) { $msg = '表单数据无效!'; return false; } $uname = $_POST[ 'uname' ]; if ( !array_key_exists( $uname, $config[ 'users' ] ) ) { $msg = '用户不存在'; return false; } $login_data = $config[ 'users' ][ $uname ]; if ( $login_data[ 0 ] != $_POST[ 'upwd' ] ) { $msg = '密码错误!'; return false; } $_SESSION[ $sess_id ] = array( 'user_name' => $uname, 'rules' => isset( $login_data[ 1 ] ) ? $login_data[ 1 ] : false ); return true; } static function user_logout( $sess_id ) { if ( isset( $_SESSION[ $sess_id ] ) ) { unset( $_SESSION[ $sess_id ] ); } return true; } static function act_delete_path( $path, & $msg = '' ) { if ( 'yes' != I( 'do' ) ) { $msg = '非法操作!'; return false; } if ( '/' == $path ) { $msg = '根目录无法删除!'; return false; } $path = path_rtoa( $path ); if ( is_file( $path ) ) { if ( !@unlink( $path ) ) { $msg = '文件删除失败!'; return false; } return true; } if ( is_dir( $path ) ) { if ( !@rmdir( $path ) ) { $msg = '目录删除失败!(非空目录或权限不足)'; return false; } return true; } $msg = '不是有效文件或目录!'; return false; } static function act_save_file( & $msg = '' ) { $filename = I( 'filename' ); if ( !$filename || !strpos( $filename, '.' ) ) { $msg = '文件扩展名无效!'; return false; } $content = I( 'content' ); $path = I( 'path' ); $path = path_rtoa( $path ); if ( is_file( $path ) ) { $path = path_getdir( $path, false ); } $newpath = $path . DIRECTORY_SEPARATOR . $filename; try { file_put_contents( $newpath, $content ); return true; } catch ( Exception $ex ) { $msg = $ex->getMessage(); return false; } } static function act_save_newdir( & $msg = '' ) { $filename = I( 'filename' ); if ( !$filename ) { $msg = '目录名称无效'; return false; } $path = path_rtoa( I( 'path' ) ); $newpath = $path . DIRECTORY_SEPARATOR . $filename; try { mkdir( $newpath, I( 'mode' ) ); return true; } catch ( Exception $ex ) { $msg = $ex->getMessage(); return false; } } static function act_upload_file( & $msg = '' ) { if ( $_FILES[ "file" ][ "error" ] > 0 ) { $msg = $_FILES[ "file" ][ "error" ]; return false; } $path = I( 'path' ); $path = path_rtoa( $path ); $filename = $_FILES[ "file" ][ "name" ]; if ( file_exists( $path . $filename ) ) { $msg = $filename . " 文件已存在!"; return false; } move_uploaded_file( $_FILES[ "file" ][ "tmp_name" ], $path . $filename ); return true; } static function act_rename_path( & $msg = '' ) { $filename2 = I( 'filename2' ); if ( !$filename2 ) { $msg = '新名称未填写!'; return false; } $path = path_rtoa( I( 'path' ) ); if ( is_file( $path ) && !strpos( $filename2, '.' ) ) { $msg = '文件扩展名无效!'; return false; } try { $newname = pathinfo( $path, PATHINFO_DIRNAME ) . DIRECTORY_SEPARATOR . $filename2; @rename( $path, $newname ); return true; } catch ( Exception $ex ) { $msg = $ex->getMessage(); return false; } } static function act_chmod_path( & $msg = '' ) { $mode = I( 'mode' ); if ( !$mode ) { $msg = '权限模式无效!'; return false; } $path = path_rtoa( I( 'path' ) ); try { chmod( $path, $mode ); return true; } catch ( Exception $ex ) { $msg = $ex->getMessage(); return false; } } static function act_zip( & $msg = '' ) { $filename = I( 'filename' ); $content = I( 'content' ); if ( !$filename || !strpos( $filename, '.' ) ) { $msg = '压缩文件名无效!'; return false; } if ( !$content ) { $msg = '压缩内容无效!'; return false; } $include = array(); $exclude = array(); $paths = explode( PHP_EOL, $content ); foreach ( $paths as $path ) { if ( 0 === strpos( $path, 'exclude ' ) ) { $exclude[] = trim( substr( $path, 8 ) ); } else { $include[] = $path; } } if ( !$include ) { $msg = '压缩内容无效!'; return false; } $zip = new ZipHelper(); return $zip->zip( $filename, $msg, $include, $exclude, I( 'rootpath' ) ); } static function act_unzip( & $msg = '' ) { $root = I( 'root' ); $filename = I( 'filename' ); if ( !$filename ) { $msg = '压缩文件路径无效!'; return false; } if ( !$root ) { $msg = '解压缩路径无效!'; return false; } $zip = new ZipHelper(); return $zip->unzip( $filename, $root, $msg ); } static function view_content_list_sorted( $files ) { echo '<div class="dir-contents" title="蓝色表示目录,绿色表示可执行文件,浅蓝色表示链接文件,红色表示压缩文件,紫色表示图形文件,黑色表示其他文件"><ul>'; foreach ( $files as $file ) { $size = $file[ 'is_dir' ] ? '-' : self::format_file_size( $file[ 'size' ] ); if ( $file[ 'is_dir' ] ) { echo '<li><a href="?path=' . $file[ 'relative_path' ] . '" class="blue"><strong>' . $file[ 'name' ] . '</strong></a></li>' . "\n"; } else { $class = ''; if ( $file[ 'is_link' ] ) { $class = 'lightblue'; } else if ( $file[ 'is_executable' ] ) { $class = 'green'; } else { switch ( $file[ 'filetype' ] ) { case 'zip': $class = 'red'; break; case 'image': $class = 'purple'; break; default: $class = 'grey'; break; } } echo '<li><a href="?path=' . $file[ 'relative_path' ] . '" class="' . $class . '">' . $file[ 'name' ] . '</a> <span class="filesize">(' . $size . ')</span></li>' . "\n"; } } echo '</ul><div style="clear:both"></div></div>'; } static function format_file_size( $size ) { $units = array( 'B', 'KB', 'MB', 'GB', 'TB' ); for ( $i = 0; $size >= 1024 && $i < 4; $i++ )$size /= 1024; return round( $size, 2 ) . ' ' . $units[ $i ]; } static function view_edit_file( $path ) { $sapath = path_rtoa( $path ); if ( !is_file( $sapath ) ) { return; } $category = get_exten_catetory( pathinfo( $path, PATHINFO_EXTENSION ) ); switch ( $category ) { case 'doc': case 'script': $btns = '<button type="submit">保存</button><button type="reset">重置</button>'; if ( !is_writable( $sapath ) ) { echo '<div style="color:#F00">文件不可写</div>'; $btns = ''; } echo '<div> <form method="post"> ', $btns, '<div><textarea name="content" cols="60" rows="36" style="width:90%">' . htmlspecialchars( file_get_contents( $sapath ) ) . '</textarea></div>', $btns, ' <input type="hidden" name="action" value="savefile" /> <input type="hidden" name="filename" value="' . basename( $path ) . '" /> <input type="hidden" name="path" value="' . $path . '" /> </form> </div>'; break; case 'image': echo '<img src="', $path, '" alt="" style="max-width:800px;max-height:640px;" /><br />'; echo basename( $path ); echo ' <a href="', $path, '" target="_blank">[原图]</a>'; break; default: echo basename( $path ); echo ' <a href="', $path, '" target="_blank">[下载]</a>'; break; } } static function view_create_file( $path ) { echo '<div> <form method="post"> <table> <tr><th>文件名:</th><td><input type="text" name="filename" required="required" placeholder="如:newfile.txt" /></td></tr> <tr><th valign="top">内容:</th><td><textarea name="content" cols="90" rows="12"></textarea></td></tr> <tr><td> </td><td><button type="submit">创建文件</button><button type="reset">重置</button></td></tr> </table> <input type="hidden" name="action" value="save_newfile" /> <input type="hidden" name="path" value="' . $path . '" /> </form> </div>'; } static function view_create_dir( $path ) { echo '<div> <form method="post"> 目录名:<input type="text" name="filename" required="required" /><br /> 权限模式:<input type="text" name="mode" required="required" value="0777" /><br /> <button type="submit">创建目录</button> <button type="reset">重置</button> <input type="hidden" name="action" value="save_newdir" /> <input type="hidden" name="path" value="' . $path . '" /> </form> </div>'; } static function view_upload_file( $path ) { echo '<div> <form method="post" enctype="multipart/form-data"> <table> <tr><th>选择文件:</th><td><input type="file" name="file" required="required" /></td></tr> <tr><td> </td><td><button type="submit">立即上传</button> <button type="reset">重置</button></td></tr> </table> <input type="hidden" name="action" value="upload_file" /> <input type="hidden" name="path" value="' . $path . '" /> </form> </div>'; } static function view_rename_path( $path ) { echo '<div> <form method="post"> 原名称:<input type="hidden" name="filename" value="' . basename( $path ) . '" />' . basename( $path ) . '<br /> 新名称:<input type="text" name="filename2" required="required" /><br /> <button type="submit">重命名</button> <button type="reset">重置</button> <input type="hidden" name="action" value="rename_path" /> <input type="hidden" name="path" value="' . $path . '" /> </form> </div>'; } static function view_chmod_path( $path ) { echo '<div> <form method="post"> 名称:' . basename( $path ) . '<br /> 权限模式:<input type="text" name="mode" required="required" value="0777" /><br /> <button type="submit">设置</button> <button type="reset">重置</button> <input type="hidden" name="action" value="chmod_path" /> <input type="hidden" name="path" value="' . $path . '" /> </form> </div>'; } static function view_zip() { echo '<div> <form method="post"> <table> <tr><th>压缩文件名:</th><td><input type="text" name="filename" required="required" size="89" placeholder="绝对路径,如:C:\public\www\website1\newfile.zip" /></td></tr> <tr><th valign="top">压缩内容:</th><td><textarea name="content" cols="90" rows="12" placeholder="每个路径一行,必需是绝对路径"></textarea></td></tr> <tr><th>去除根路径:</th><td><input type="text" name="rootpath" size="89" placeholder="绝对路径,如:C:\public\www\website1" /></td></tr> <tr><td> </td><td class="red"> 注意,所有路径都必需是绝对路径!<br /> 包含路径示例:C:\public\www\website1\app<br /> 排除路径示例: exclude C:\public\www\website1\app\runtime<br /> 如果填写跟路径地址,则压缩内容会自动去除跟路径信息(解压缩的时候,可以解压缩到任意目录下),如果根路径为空则保留根路径信息(解压缩的时候,无法解压缩到任意目录下,系统会自动创建和压缩前路径一样的目录) </td></tr> <tr><td> </td><td><button type="submit">创建压缩文件</button><button type="reset">重置</button></td></tr> </table> <input type="hidden" name="action" value="zip" /> </form> </div>'; } static function view_unzip() { echo '<div> <form method="post"> <table> <tr><th>压缩文件名:</th><td><input type="text" name="filename" required="required" size="89" placeholder="绝对路径,如:C:\public\www\website1\newfile.zip" /></td></tr> <tr><th>解压缩路径:</th><td><input type="text" name="root" required="required" size="89" placeholder="绝对路径,如:C:\public\www\website1" /></td></tr> <tr><td> </td><td><button type="submit">解压缩文件</button><button type="reset">重置</button></td></tr> </table> <input type="hidden" name="action" value="unzip" /> </form> </div>'; } static function get_dir_contents( $directory, $options = array() ) { $config = array( 'name' => true, 'path' => true, 'real_path' => true, 'relative_path' => false, 'exten' => false, 'ctime' => false, 'mtime' => false, 'size' => false, 'is_dir' => true, 'is_file' => false, 'is_link' => false, 'is_executable' => false, 'is_readable' => false, 'is_writable' => false, 'filetype' => false ); if ( $options ) { $config = array_merge( $config, $options ); } try { $dir = new DirectoryIterator( path_rtoa( $directory ) ); } catch ( Exception $e ) { throw new Exception( $directory . ' is not readable' ); } $files = array(); foreach ( $dir as $file ) { if ( $file->isDot() ) { continue; } if ( $config[ 'name' ] ) { $item[ 'name' ] = $file->getFileName(); } if ( $config[ 'path' ] ) { $item[ 'path' ] = $file->getPath(); } if ( $config[ 'real_path' ] ) { $item[ 'real_path' ] = $file->getRealPath(); } if ( $config[ 'relative_path' ] ) { $item[ 'relative_path' ] = path_ator( $file->getRealPath() ); } $exten = $file->getExtension(); if ( $config[ 'exten' ] ) { $item[ 'exten' ] = $exten; } if ( $config[ 'filetype' ] ) { $item[ 'filetype' ] = get_exten_catetory( $exten ); } if ( $config[ 'mtime' ] ) { $item[ 'mtime' ] = $file->getMTime(); } if ( $config[ 'ctime' ] ) { $item[ 'ctime' ] = $file->getCTime(); } if ( $config[ 'size' ] ) { $item[ 'size' ] = $file->getSize(); } if ( $config[ 'is_dir' ] ) { $item[ 'is_dir' ] = $file->isDir(); } if ( $config[ 'is_file' ] ) { $item[ 'is_file' ] = $file->isFile(); } if ( $config[ 'is_link' ] ) { $item[ 'is_link' ] = $file->isLink(); } if ( $config[ 'is_executable' ] ) { $item[ 'is_executable' ] = $file->isExecutable(); } if ( $config[ 'is_readable' ] ) { $item[ 'is_readable' ] = $file->isReadable(); } if ( $config[ 'is_writable' ] ) { $item[ 'is_writable' ] = $file->isWritable(); } $files[] = $item; } return $files; } static function location_to_breadcrumb( $path ) { echo '<div class="nav"><a href="?path=/">/</a>'; if ( '/' != $path ) { $asubpath = explode( '/', substr( $path, 1 ) ); if ( $asubpath ) { $str = ''; foreach ( $asubpath as $sub ) { $str .= '/' . $sub; echo '<a href="?path=', $str, '">', $sub, '</a>'; } } } echo '<div>', path_rtoa( $path ), '</div>'; echo '</div>'; } } class ZipHelper { function unzip( $filename, $root, & $msg = '' ) { if ( !$filename ) { $msg = '压缩文件名无效!'; return false; } $zip = new ZipArchive(); $msg = $zip->open( $filename ); if ( true !== $msg ) { $msg = var_export( $msg, true ); return false; } $zip->extractTo( $root ); $zip->close(); return true; } function zip( $filename, & $msg = '', $include = array(), $exclude = array(), $trimpath = '', $comment = 'default' ) { if ( !$filename ) { $msg = '压缩文件名无效!'; return false; } if ( !$include ) { $msg = '压缩内容无效!'; return false; } if ( 'default' == $comment ) { $comment = basename( $filename ) . PHP_EOL . 'Generate at ' . date( 'Y-m-d H:i:s' ) . PHP_EOL . 'Powerd by SuExplorer.'; } try { $zip = new ZipArchive(); $msg = $zip->open( $filename, ZIPARCHIVE::OVERWRITE ); if ( true !== $msg ) { $msg = var_export( $msg, true ); return false; } if ( $comment ) { $zip->setArchiveComment( $comment ); } if ( $trimpath ) { $trimpath = rtrim( $trimpath, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR; } $substart = strlen( $trimpath ); foreach ( $include as $source ) { $this->zip_dir( $zip, $source, $exclude, $substart ); } $zip->close(); return true; } catch ( Exception $ex ) { $msg = $ex->getMessage(); return false; } } function zip_dir( & $zip, $source, $exclude, $substart = 0 ) { if ( is_dir( $source ) ) { $source = rtrim( $source, DIRECTORY_SEPARATOR ); if ( $handle = opendir( $source ) ) { while ( false !== ( $f = readdir( $handle ) ) ) { if ( '.' == $f || '..' == $f ) { continue; } $filename = $source . DIRECTORY_SEPARATOR . $f; if ( is_dir( $filename ) ) { if ( $exclude && in_array( $filename, $exclude ) ) { continue; } $this->zip_dir( $zip, $filename, $exclude, $substart ); } else { if ( $exclude && in_array( $filename, $exclude ) ) { continue; } $zip->addFile( $filename, substr( $filename, $substart ) ); } } closedir( $handle ); } } else { if ( $exclude && in_array( $source, $exclude ) ) { return; } $zip->addFile( $source ); } } }