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下一个非常全面获取图象信息的函数
Nov 20 PHP
劣质的PHP代码简化
Feb 08 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
Zend Framework教程之Zend_Db_Table用法详解
Mar 21 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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中上传大体积文件时需要的设置
2006/10/09 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
php检测useragent版本示例
2014/03/24 PHP
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
学习python类方法与对象方法
2016/03/15 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
python计算auc指标实例
2017/07/13 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
python中的数据结构比较
2019/05/13 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
美丽的大脚观后感
2015/06/03 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
趣味运动会标语口号
2015/12/26 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书