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 相关文章推荐
多文件上载系统完整版
Oct 09 PHP
WIN98下Apache1.3.14+PHP4.0.4的安装
Oct 09 PHP
php函数之子字符串替换&amp;#65279; str_replace
Mar 23 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
PHP实现的一致性哈希算法完整实例
Nov 14 PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
PHP实现小程序批量通知推送
Nov 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
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
取得传值的函数
2006/10/27 Javascript
js实现的网页颜色代码表全集
2007/07/17 Javascript
Prototype 学习 Prototype对象
2009/07/12 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python日志logging模块使用方法分析
2019/05/23 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
python yield关键词案例测试
2019/10/15 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
常见的软件开发流程有哪些
2015/11/14 面试题
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
合伙经营协议书
2014/04/18 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
大学生就业意向书
2015/05/11 职场文书
原生JS实现分页
2022/04/19 Javascript
Python实现聚类K-means算法详解
2022/07/15 Python