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 相关文章推荐
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
php 输出双引号&quot;与单引号'的方法
May 09 PHP
浅析PHP递归函数返回值使用方法
Feb 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
php实现建立多层级目录的方法
Jul 19 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
PHP模拟asp.net的StringBuilder类实现方法
Aug 08 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
javascript 面向对象继承
2009/11/26 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
2014/12/31 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
create-react-app 修改为多入口编译的方法
2018/08/01 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
Python random模块常用方法
2014/11/03 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
国际贸易专业个人鉴定
2014/02/22 职场文书
实践单位评语
2014/04/26 职场文书
珠宝的促销活动方案
2014/08/31 职场文书
初中作文评语
2014/12/25 职场文书
贫困证明怎么写
2015/06/16 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
如何使用flask将模型部署为服务
2021/05/13 Python
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Python 实现定积分与二重定积分的操作
2021/05/26 Python