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与javascript对多项选择的处理
Oct 09 PHP
NT IIS下用ODBC连接数据库
Oct 09 PHP
IP攻击升级,程序改进以对付新的攻击
Nov 23 PHP
PHP安全配置详细说明
Sep 26 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 PHP
PHP中preg_match函数正则匹配的字符串长度问题
May 27 PHP
phpcms中的评论样式修改方法
Oct 21 PHP
PHP+Apache环境中如何隐藏Apache版本
Nov 24 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
PHP垃圾回收机制简单说明
2010/07/22 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
Jquery Ajax xmlhttp请求成功问题
2015/02/04 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
Python 实现简单的电话本功能
2015/08/09 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python 使用 docopt 解析json参数文件过程讲解
2019/08/13 Python
安装python及pycharm的教程图解
2019/10/10 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
使用 django orm 写 exists 条件过滤实例
2020/05/20 Python
Python实现播放和录制声音的功能
2020/08/12 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
建筑管理专业求职信
2014/07/28 职场文书
捐书倡议书
2014/08/29 职场文书
外贸英文求职信范文
2015/03/19 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python
详解Go语言中Get/Post请求测试
2022/06/01 Golang