admbrowse.php
来自「eGroupWare is a multi-user, web-based gr」· PHP 代码 · 共 356 行
PHP
356 行
<?php/**************************************************************************** copyright : (C) 2001-2003 Advanced Internet Designs Inc.* email : forum@prohost.org* $Id: admbrowse.php,v 1.3 2004/07/08 14:25:47 iliaa Exp $** This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or * (at your option) any later version.***************************************************************************/ if (isset($_POST['btn_mini_cancel']) || isset($_GET['btn_mini_cancel'])) { exit('<html><script>window.close();</script></html>'); } require('./GLOBALS.php'); fud_egw(); fud_use('adm.inc', true); fud_use('widgets.inc', true);function bit_test($val, $mask){ return (($val & $mask) == $mask) ? $mask : 0;}function mode_string($mode, $de){ /* determine string mode 01234567890 */ $mode_str = 'drwxrwxrwxt'; if (!is_dir($de)) {/* directory */ $mode_str[0] = '-'; } if (!bit_test($mode, 00400)) {/* owner read */ $mode_str[1] = '-'; } if (!bit_test($mode, 00200)) {/* owner write */ $mode_str[2] = '-'; } if (!bit_test($mode, 00100)) {/* owner exec */ $mode_str[3] = '-'; } if (bit_test($mode, 0004000)) {/* setuid */ $mode_str[3] = 's'; } if (!bit_test($mode, 00040)) {/* group read */ $mode_str[4] = '-'; } if (!bit_test($mode, 00020)) {/* group write */ $mode_str[5] = '-'; } if (!bit_test($mode, 00010)) {/* group exec */ $mode_str[6] = '-'; } if (bit_test($mode, 0002000)) {/* setgid */ $mode_str[6] = 's'; } if (!bit_test($mode, 00004)) {/* world read */ $mode_str[7] = '-'; } if (!bit_test($mode, 00002)) {/* world write */ $mode_str[8] = '-'; } if (!bit_test($mode, 00001)) {/* world exec */ $mode_str[9] = '-'; } if (!bit_test($mode, 0001000)) {/* sticky (warning: NOT POSIX) */ $mode_str[10] = '-'; } return $mode_str;}function fud_rmdir($dir){ if (!($d = opendir($dir))) { return; } while ($f = readdir($d)) { if ($f == '.' || $f == '..') continue; if (@is_dir($dir . '/' . $f)) { if (!fud_rmdir($dir . '/' . $f)) { return; } } else { if (!@unlink($dir . '/' . $f)) { return; } } } closedir($d); return @rmdir($dir);}if (!function_exists('posix_getpwuid')) { function posix_getpwuid($id) { return array('name' => $id); } function posix_getgrgid($id) { return array('name' => $id); }} /* Figure out the ROOT paths based on the location of web browseable dir & data dir */ $ROOT_PATH[0] = realpath($GLOBALS['WWW_ROOT_DISK']); $ROOT_PATH[1] = realpath($GLOBALS['DATA_DIR']); $cur_dir = realpath(isset($_POST['cur']) ? $_POST['cur'] : (isset($_GET['cur']) ? $_GET['cur'] : $ROOT_PATH[0])); $dest = isset($_POST['dest']) ? basename($_POST['dest']) : (isset($_GET['dest']) ? basename($_GET['dest']) : ''); /* make sure that the specified path is within the forum directories */ if (strpos($cur_dir, $ROOT_PATH[1]) !== 0 && strpos($cur_dir, $ROOT_PATH[0]) !== 0) { $cur = $cur_dir = $ROOT_PATH[0]; $dest = ''; } /* Directory creation code */ if (isset($_GET['btn_mkdir']) && !empty($_GET['mkdir'])) { $u = umask(0); if (!mkdir($cur_dir . '/' . basename($_GET['mkdir']), ($FUD_OPT_2 & 8388608 ? 0700 : 0777))) { echo '<h2 color="red">ERROR: failed to create '.$cur_dir . '/' . basename($_GET['mkdir']).'</h2>'; } umask($u); } /* File upload code */ if (isset($_FILES['fname']) && $_FILES['fname']['size']) { $fdest = !empty($_POST['d_name']) ? $_POST['d_name'] : $_FILES['fname']['name']; $fdest = $cur_dir . '/' . basename($fdest); move_uploaded_file($_FILES['fname']['tmp_name'], $fdest); @chmod($fdest, ($FUD_OPT_2 & 8388608 ? 0600 : 0666)); } /* Download file code */ if (isset($_GET['down']) && $dest && @file_exists($cur_dir . '/' . $dest)) { header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$dest); fpassthru(fopen($cur_dir . '/' . $dest, 'rb')); exit; } /* Delete file/directory code */ if (isset($_GET['del']) && $dest && @file_exists($cur_dir . '/' . $dest)) { if (isset($_GET['del_conf'])) { if (@is_dir($cur_dir . '/' . $dest) && !fud_rmdir($cur_dir . '/' . $dest)) { exit('<h2 color="red">ERROR: failed to remove directory '.$cur_dir . '/' . $dest.'</h2>'); } else if (@is_file($cur_dir.'/'.$dest) && !unlink($cur_dir.'/'.$dest)) { exit('<h2 color="red">ERROR: failed to remove file '.$cur_dir . '/' . $dest.'</h2>'); } else { exit('<html><script> window.opener.location = \'admbrowse.php?'._rsidl.'&cur='.urlencode($cur_dir).'\'; window.close();</script></html>'); } } else { $file = $cur_dir.'/'.$dest; $type = @is_dir($file) ? 'directory' : 'file'; ?> <html> <h2>File/Directory Deletion</h2> Are you sure you want to delete <?php echo $type.' <font color="#ff0000"><b>'.$file.'</b></font>'; ?><p> <form method="GET" action="admbrowse.php"> <input type="hidden" name="cur" value="<?php echo $cur_dir; ?>"> <input type="hidden" name="dest" value="<?php echo $dest; ?>"> <input type="hidden" name="del" value="1"> <?php echo _hs; ?> <div align="center"><input type="submit" name="btn_mini_cancel" value="No"> <input type="submit" name="del_conf" value="Yes"></div> </form> </html> <?php exit; } } if (isset($_GET['chmod'])) { $file = $cur_dir.'/'.$dest; $st = stat($file); if (!isset($st[2])) { $st[2] = $st['mode']; } $mode_o = sprintf('%o', 0x0FFF & $st[2]);?> <html> <h2>Change File Permissions</h2> <?php echo $file.' is currenly <b>'.mode_string($st[2], $file).' ('.$mode_o.')</b>'; ?><br> change it to:<br> <form method="post" action="admbrowse.php"> <?php echo _hs; ?> <input type="hidden" name="chmod" value="1"> <input type="hidden" name="cur" value="<?php echo $cur_dir; ?>"> <input type="hidden" name="dest" value="<?php echo $dest; ?>"> <table border=0> <tr><td>Group:</td><td>Read</td><td>Write</td><td>Execute</td></tr> <tr><td>Owner:</td> <td><?php draw_checkbox('oread', 0400, bit_test($st[2], 0400)); ?></td> <td><?php draw_checkbox('owrite', 0200, bit_test($st[2], 0200)); ?></td> <td><?php draw_checkbox('oexec', 0100, bit_test($st[2], 0100)); ?></td></tr> <tr><td>Group:</td> <td><?php draw_checkbox('gread', 0040, bit_test($st[2], 0040)); ?></td> <td><?php draw_checkbox('gwrite', 0020, bit_test($st[2], 0020)); ?></td> <td><?php draw_checkbox('gexec', 0010, bit_test($st[2], 0010)); ?></td></tr> <tr><td>World:</td> <td><?php draw_checkbox('wread', 0004, bit_test($st[2], 0004)); ?></td> <td><?php draw_checkbox('wwrite', 0002, bit_test($st[2], 0002)); ?></td> <td><?php draw_checkbox('wexec', 0001, bit_test($st[2], 0001)); ?></td></tr> <tr><td colspan=4><?php draw_checkbox('setuid', 0004000, bit_test($st[2], 0004000)); ?> setuid</td></tr> <tr><td colspan=4><?php draw_checkbox('setgid', 0002000, bit_test($st[2], 0002000)); ?> setgid</td></tr> <tr><td colspan=4><?php draw_checkbox('sticky', 0001000, bit_test($st[2], 0001000)); ?> sticky</td></tr> <tr><td colspan=4 align=right><input type="submit" name="btn_submit" value="Apply"> <input type="submit" name="btn_mini_cancel" value="Cancel"></td></tr> </table> </form> </html><?php exit; } /* change file/directory permissions */ if (isset($_POST['chmod'])) { $file = $cur_dir.'/'.$dest; $perm_bits = array('oread', 'owrite', 'oexec', 'gread', 'gwrite', 'gexec', 'wread', 'wwrite', 'wexec', 'setuid', 'setgid', 'sticky'); $new_mode = 0; foreach ($perm_bits as $v) { if (isset($_POST[$v])) { $new_mode |= $_POST[$v] + 0; } } if (!@chmod($file, $new_mode)) { exit('<html>Unable to chmod <b>'.$file.'</b><br><a href="javscript: return false;" onClick="javascript: window.close();">close</a></html>'); } else { exit('<html><script> window.opener.location = \'admbrowse.php?'._rsidl.'&cur='.urlencode($cur_dir).'\'; window.close();</script></html>'); } } require($WWW_ROOT_DISK . 'adm/admpanel.php');?><h2>File Adminstration System</h2><?php if (!@is_dir($cur_dir)) { $cur_dir = $ROOT_PATH[0]; } echo 'WWW_SERVER_ROOT: <a href="admbrowse.php?'._rsid.'&cur='.urlencode($ROOT_PATH[0]).'">'.$ROOT_PATH[0].'</a><br> DATA_ROOT: <a href="admbrowse.php?'._rsid.'&cur='.urlencode($ROOT_PATH[1]).'">'.$ROOT_PATH[1].'</a><br>'; echo 'Currently Browsing: <b>'.htmlspecialchars($cur_dir)."</b><br>\n"; clearstatcache(); if (!($dp = opendir($cur_dir))) { echo '<b>PERMISSION DENINED ACCSESING '.$cur_dir.'</b><br>'; $dp = opendir($ROOT_PATH[0]); }?><br><table class="datatable"> <form method="get" action="admbrowse.php"><input type="hidden" name="cur" value="<?php echo $cur_dir; ?>"><?php echo _hs; ?> <tr style="font-size: x-small;"> <td>Directory Name:</td> <td><input type="text" name="mkdir" value=""></td> <td align="right" colspan=2><input style="font-size: x-small;" type="submit" name="btn_mkdir" value="Create Directory"> </tr> </form></table><br><table cellspacing=2 cellpadding=2 border=0> <form method="post" action="admbrowse.php" enctype="multipart/form-data"><input type="hidden" name="cur" value="<?php echo $cur_dir; ?>"><?php echo _hs; ?> <tr style="font-size: x-small;"> <td colspan=2><b>File Upload</b></td> </tr> <tr style="font-size: x-small;"> <td>File To Upload:</td> <td><input type="file" name="fname"></td> </tr> <tr style="font-size: x-small;"> <td>File Name:<br>(leave blank if want the uploaded filename to remain unchanged)</td> <td><input type="text" name="d_name" value=""></td> </tr> <tr style="font-size: x-small;"> <td colspan=2 align="right"><input type="submit" name="file_upload" value="Upload File"></td> </tr> </form></table><br><table border=0 cellspacing=1 cellpadding=3><tr class="admin_fixed resulttopic"><td>Mode</td><td>Owner</td><td>Group</td><td>Size</td><td>Date</td><td>Time</td><td>Name</td><td align="center" colspan=3>Action</td></tr><?php $file_list = array(); $dir_list = array(); while ($de = readdir($dp)) { if (@is_dir($cur_dir . '/' . $de)) { $dir_list[] = $de; } else { $file_list[] = $de; } } closedir($dp); sort($dir_list); sort($file_list); $dir_data = array_merge($dir_list, $file_list); $cur_enc = urlencode($cur_dir); foreach($dir_data as $de) { $fpath = $cur_dir . '/' . $de; if (@is_file($fpath)) { $name = htmlspecialchars($de); $st = stat($fpath); } else if (@is_dir($fpath)) { $name = '<a href="admbrowse.php?cur='.urlencode($fpath).'&'._rsidl.'">'.htmlspecialchars($de).'</a>'; $st = stat($fpath); } $mode = isset($st[2]) ? $st[2] : $st['mode']; $mode_str = mode_string($mode, $de); $de_enc = urlencode($de); $passwdent = posix_getpwuid((isset($st[4])?$st[4]:$st['uid'])); $owner = $passwdent['name']; $groupsent = posix_getgrgid((isset($st[5])?$st[5]:$st['gid'])); $group = $groupsent['name']; $date_str = strftime("%b %d", (isset($st[9])?$st[9]:$st['mtime'])); $time_str = strftime("%T", (isset($st[9])?$st[9]:$st['mtime'])); $mode_o = sprintf('%o', 0x0FFF&$mode); $size = round((isset($st[7])?$st[7]:$st['size'])/1024); echo '<tr class="admin_fixed"><td nowrap>'.$mode_str.' ('.$mode_o.')</td><td>'.$owner.'</td><td>'.$group.'</td><td nowrap>'.$size.' KB</td><td nowrap>'.$date_str.'</td><td>'.$time_str.'</td><td>'.$name.'</td>'; if (@is_readable($fpath)) { if (@is_writeable($fpath)) { echo '<td style="border: #AEBDC4; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;"><a href="javascript: return false;" onClick="javascript: window.open(\'admbrowse.php?chmod=1&cur='.$cur_enc.'&dest='.$de_enc.'&'._rsidl.'\', \'chmod_window\', \'width=500,height=350,menubar=no\');">chmod</a></td>'; } else { echo '<td style="border: #AEBDC4; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;" align="center">n/a</td>'; } if (@is_file($fpath)) { echo '<td style="border: #AEBDC4; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;"><a href="admbrowse.php?down=1&cur='.$cur_enc.'&dest='.$de_enc.'&'._rsidl.'">download</a></td>'; } else { echo '<td style="border: #AEBDC4; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;" align="center">n/a</td>'; } if (@is_writeable($fpath)) { echo '<td style="border: #AEBDC4; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;"><a href="javascript: return false;" onClick="javascript: window.open(\'admbrowse.php?del=1&cur='.$cur_enc.'&dest='.$de_enc.'&'._rsidl.'\', \'chmod_window\', \'width=500,height=350,menubar=no\');">delete</a></td>'; } else { echo '<td style="border: #AEBDC4; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;" align="center">n/a</td>'; } } else { echo '<td style="border: #AEBDC4; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px;" colspan=3 align="center">n/a</td>'; } echo '</tr>'; }require($WWW_ROOT_DISK . 'adm/admclose.php');?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?