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 相关文章推荐
Blitz templates 最快的PHP模板引擎
Apr 06 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
Jun 19 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
Apr 15 PHP
Smarty分页实现方法完整实例
May 11 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
详解laravel passport OAuth2.0的4种模式
Nov 04 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图片验证码代码
2008/03/27 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
微信小程序 Toast自定义实例详解
2017/01/20 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
简单介绍Python中的struct模块
2015/04/28 Python
python选择排序算法实例总结
2015/07/01 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
Python实现网站表单提交和模板
2019/01/15 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
使用keras内置的模型进行图片预测实例
2020/06/17 Python
解析python 类方法、对象方法、静态方法
2020/08/15 Python
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
公立医院改革实施方案
2014/03/14 职场文书
社区交通安全实施方案
2014/03/22 职场文书
小学亲子活动总结
2014/07/01 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers