php 文件上传系统手记


Posted in PHP onOctober 26, 2009

整个系统只有带码全部用PHP,没有JS,没有正则...纯纯的PHP...其实别的我也不会呵呵...
下面是原表单的html带码...
上传文件表单

<form id="upload" action="uplpad.php" enctype="multipart/form-data" method="post"> 
<div id="upload"> 
Map Name: <br /> 
<input type="text" name="mapname" size="12" maxlength="20" /> 
<br /> 
File Path:<br /> 
<input type="file" name="map" size="12" contentEditable="false" /> 
<input type="hidden" name="MAX_FILE_SIZE" value="8000000"> 
<br /> 
<input type="submit" value="Upload" id="x" /> 
</div> 
</form>

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是 application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.enctype="multipart/form-data"是上传二进制数据; form里面的值以2进制流的方式传过去。
<input type="hidden" name="MAX_FILE_SIZE" value="8000000">这句好像是没有用的...我原以为这个可以限制上传文件大小呢,上传文件大小只有在php.ini里或后面上传的文件的脚本里设置了...我程序里是直接设置php.ini中upload_max_filesize=6M的.
下面是上传程序
Code
$uploaddir="./map/"; 
$typearr=array("rar","zip","w3m","w3x"); 
$findstr=array("/","\\"," ","<",">"); //对名称进行过滤 
$mapname=str_replace($findstr,'',($_POST['mapname'])); 
//取扩展名 
function upfiletype($filename){ 
$arr=explode('.',$filename); 
$a=count($arr)-1; 
return $arr[$a]; 
} 
//字符串是不是纯数字 
function isNo($str){ 
$intarr=array('1','2','3','4','5','6','7','8','9','0','.'); 
$a=str_replace($intarr,'',$str); 
return ($a=="")?1:0; 
} 
//////控制窗口大小/////// 
function html(){ 
echo <<<eof 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>文件上传</title> 
<head> 
<script> 
function ResetSize(){ 
self.resizeTo(300,300) 
self.moveTo(300,200) 
} 
</script> 
</head> 
<body onload="ResetSize()"> 
eof; 
} 
if (isNo($mapname)){ 
html(); 
exit ('有输入正确的地图名称'); 
} 
//判断是否有文件上传 
if(!is_uploaded_file($_FILES['map']['tmp_name'])){ 
html(); 
exit("你没有上传文件或上传文件大于6M"); 
} 
//判断是不是重复上传 
$clintfilename=str_replace($findstr,'',$_FILES['map']['name']); 
if(isset($_COOKIE['upload'])){ 
foreach($_COOKIE['upload'] as $value){ 
if($value==$clintfilename){ 
html(); 
exit("请不要重复上传"); 
} 
} 
} 
$filetype=strtolower(upfiletype($_FILES['map']['name'])); 
if(!in_array($filetype,$typearr)){ 
html(); 
exit("请上传正确的地图文件,支持rar,zip,w3m,w3x"); 
} 
//判断server文件是否存在 
$filename=$mapname.'.'.$filetype; 
for($a=1;$fopen=@fopen(($uploaddir.$filename),"r");$a++){ 
$filename=$mapname."$a".'.'.$filetype; 
fclose($fopen); 
} 
//传输文件开始; 
$filepath=$uploaddir.$filename; 
if(move_uploaded_file($_FILES['map']['tmp_name'],$filepath)){ 
//设置一个cookie用来看有没有重复上传 
setcookie("upload[]",$clintfilename,time()+60*12); 
html(); 
echo "上传成功"; 
$log=fopen("upload.log","a7"); 
$logtxt=date("Ymd")."|".date("H:i")."|".$_SERVER["REMOTE_ADDR"]."|".$filename."\r\n"; 
fwrite($log,$logtxt); 
} 
?>

由于是第一次写...很多地方有问题,并且在写的时候是改了又改得....忘多多指教
PHP 相关文章推荐
PHP 命令行参数详解及应用
May 18 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 PHP
$_GET['goods_id']+0 的使用详解
Jun 06 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
Mar 27 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 PHP
php中数组最简单的使用方法
Dec 27 PHP
php后台程序与Javascript的两种交互方式
Oct 25 #PHP
PHP 数组教程 定义数组
Oct 23 #PHP
PHP 判断变量类型实现代码
Oct 23 #PHP
PHP 变量类型的强制转换
Oct 23 #PHP
PHP教程 预定义变量
Oct 23 #PHP
PHP 处理图片的类实现代码
Oct 23 #PHP
PHP教程 变量定义
Oct 23 #PHP
You might like
建立动态的WML站点(一)
2006/10/09 PHP
PHP 开发工具
2006/12/06 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
vue中如何去掉空格的方法实现
2018/11/09 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
VC++笔试题
2014/10/13 面试题
本科毕业自我鉴定
2014/03/20 职场文书
给公司的建议书范文
2014/05/13 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
建筑安全标语
2014/06/07 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
怒海潜将观后感
2015/06/11 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle