php 文件管理器

本文介绍如何使用PHP构建一个强大的文件管理器,涵盖上传、下载、预览、删除和组织文件等核心功能,同时讨论安全措施以防止未授权访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php

/**
 * 文件管理器 兼容 win/linux 系统  兼容pc/mobile 多语言版
 */
header("Content-type:text/html;charset=utf-8");
error_reporting(0);
set_time_limit(0);
date_default_timezone_set('Asia/Chongqing');
session_start();
$RootDir = __DIR__;
$http_host = $_SERVER['HTTP_HOST'];
$packpath = 'updatapack';
$iscopy = 0;
$adminlist = [['admin', '654321']];
$act = isset($_REQUEST['act']) ? $_REQUEST['act'] : '';
$time = isset($_REQUEST['time']) ? $_REQUEST['time'] : 1; //更新时间查询 1天内
$showtime = isset($_REQUEST['showtime']) ? $_REQUEST['showtime'] : 0; //显示修改时间
$pcdir = $dir = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : ['/']; //排除文件夹列表
//echo basename(__FILE__);
//print_r($dir);


if ($pcdir) {
	$pcdir1 = [];
	foreach ($dirlist as $key => $val) {
		if (!in_array($val, $pcdir)) {
			$pcdir1[] = $val;
		}
	}
	$pcdir = $pcdir1;
}
/*判断用户登录 */
function check_admin_info()
{
	if (!in_array(I('act'), ['login', 'logout']) && !$_SESSION['fm_admin']) {
		fm_set_msg('还没有登录', 'error');
		redirect('?act=login');
	}
}
check_admin_info();
function get_dir_info()
{
	$file = I('file', '');

	$dir = explode(DIRECTORY_SEPARATOR, $file);
	if (is_file($file)) {
		array_pop($dir);
	}
	$arr = [];
	foreach ($dir as $k => $v) {
		if ($k == 0) {
			$arr[$k]['list'][] = $v;
			$arr[$k]['name'] = $v;
		}
		foreach ($dir as $kk => $vv) {
			if ($k >= 1) $arr[$k]['list'][] = $vv;
			$arr[$k]['name'] = $v;
			if ($kk >= $k) break;
		}
	}
	$arra = [];
	foreach ($arr as $k => $v) {
		$url = join(DIRECTORY_SEPARATOR, $v['list']);
		$arra[$k] = '<a href="?act=view&file=' . $url . '">' . $v['name'] . '</a>';
	}
	if (join(DIRECTORY_SEPARATOR, $arra)) echo DIRECTORY_SEPARATOR . join(DIRECTORY_SEPARATOR, $arra);
	else echo join(DIRECTORY_SEPARATOR, $arra);
}
if ($act == 'login') {
	$g = I('go');
	if ($g) {
		$ok = 0;
		foreach ($adminlist as $k => $v) {
			if ($v[0] == I('fm_user') && $v[1] == I('fm_password')) {
				$ok = 1;
			}
		}
		if ($ok) {
			$_SESSION['fm_admin'] = I('fm_user');
			fm_set_msg('登录成功');
			redirect('?');
		} else {
			fm_set_msg('管理员账号或者密码错误!', 'error');
			redirect('?act=login');
		}
	}
}
if ($act == 'logout') {
	unset($_SESSION['fm_admin']);
	fm_set_msg('退出登录');
	redirect('?act=login');
}
if ($act == 'batch') {
	$delete = I('delete', 0);
	if ($delete) {
		$dir = I('dir');
		if ($_REQUEST['file']) {
			foreach ($_REQUEST['file'] as $k => $v) {
				$file = $v;
				if (is_dir($file)) {
					deleteDir($file);
				} else {
					@unlink($file);
				}
			}
			fm_set_msg('文件删除成功!');
		} else {
			fm_set_msg('没有选择任何文件!', 'alert');
		}
		if ($dir) redirect('?act=view&file=' . $dir);
		else redirect(basename(__FILE__));
	}
	$zip = I('zip', 0);
	if ($zip) {
		$dir = I('dir');
		$filea = [];

		if ($_REQUEST['file']) {
			foreach ($_REQUEST['file'] as $k => $v) {
				$filea[] = $v;
			}
			$newzipfile = date('YmdHis') . '.zip';
			if ($dir) $newzipfile = $dir . '_' . $newzipfile;
			if ($dir) $newzipfile = $dir . DIRECTORY_SEPARATOR . $newzipfile;
			$result = zip($filea, __DIR__ . DIRECTORY_SEPARATOR . $newzipfile);
			if ($result) fm_set_msg('压缩成功' . $newzipfile);
			else fm_set_msg('压缩失败' . $newzipfile, 'error');
		} else {
			fm_set_msg('没有选择任何文件!', 'alert');
		}
		if ($dir) redirect('?act=view&file=' . $dir);
		else redirect(basename(__FILE__));
	}
}

if ($act == 'unzip') {
	$file = I('file');
	$dir = '';
	if (is_file($file)) {
		$dir = explode(DIRECTORY_SEPARATOR, $file);
		array_pop($dir);
		$dir = join(DIRECTORY_SEPARATOR, $dir);
	}
	$fileA = explode('.', $file);
	$path = $fileA[0];
	if ($fileA) {
		$result = @mkdirs($fileA[0]);
	}
	$res = unzip($file, $path);
	if ($res) {
		fm_set_msg('压缩文件已解压');
	} else {
		fm_set_msg('压缩文件未解压', 'error');
	}
	if ($dir) redirect('?act=view&file=' . $dir);
	else redirect(basename(__FILE__));
}
if ($act == 'upload') {
	$file = isset($_REQUEST['file']) ? $_REQUEST['file'] : '';
	$g = I('g');
	if ($g) {
		$copytodir = I('copytodir');
		if ($_FILES['filelist']) {
			$newdir = __DIR__ . DIRECTORY_SEPARATOR;
			if ($copytodir) $newdir .= $copytodir . DIRECTORY_SEPARATOR;
			$total = count($_FILES['filelist']['name']);
			$index = 0;
			for ($i = 0; $i < count($_FILES['filelist']['name']); $i++) {
				$filename = iconv("UTF-8", "GBK", $_FILES['filelist']['name'][$i]);
				if (is_uploaded_file($_FILES['filelist']['tmp_name'][$i])) {
					$uploads = move_uploaded_file($_FILES['filelist']['tmp_name'][$i], $newdir . $filename);
					if ($uploads) {
						$index++;
					}
				}
			}
			fm_set_msg("共<b>" . $total . "</b>个文件 ");
		} else {
			fm_set_msg('未选择上传任何文件', 'alert');
		}
		redirect('?act=view&file=' . I('copytodir'));
	}
}
if ($act == 'newdir') {
	$file = I('p');
	$new = I('new');
	$newdir = $new;
	if ($file) {
		$file = str_replace('/', '\\', $file);
		$newdir = $file . DIRECTORY_SEPARATOR . $new;
	}
	if (!is_dir($newdir)) {
		$result = @mkdirs($newdir);
		//echo $result;exit;
		fm_set_msg("新建文件夹 <b>" . $newdir . "</b> 成功!");
	} else {
		fm_set_msg("新建文件夹 <b>" . $newdir . "</b> 失败!", 'error');
	}
	if ($file) {
		redirect('?act=view&file=' . $file);
	} else {
		redirect(basename(__FILE__));
	}
}
if ($act == 'del') {
	$file = I('file');
	if (is_dir($file)) {
		deleteDir($file);
	} else {
		@unlink($file);
	}
	$dir = '';
	if ($file) {
		$dir = explode(DIRECTORY_SEPARATOR, $file);
		array_pop($dir);
		$dir = join(DIRECTORY_SEPARATOR, $dir);
	}
	fm_set_msg("文件 <b>" . $file . "</b> 删除成功");
	if ($dir) {
		redirect('?act=view&file=' . $dir);
	} else {
		redirect(basename(__FILE__));
	}
}
if ($act == 'edit') {
	$file = isset($_REQUEST['file']) ? $_REQUEST['file'] : '';
	$fileinfo = explode('.', $file);
	$save = I('save');
	if ($save) {
		//print_r($_REQUEST);
		$content = I('content');
		$dir = '';
		if ($file) {
			$dir = explode(DIRECTORY_SEPARATOR, $file);
			array_pop($dir);
			$dir = join(DIRECTORY_SEPARATOR, $dir);
		
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值