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初学者头疼问题总结
Jul 08 PHP
教你IIS6的PHP最佳配置方法
Sep 05 PHP
php cookie的操作实现代码(登录)
Dec 29 PHP
php _autoload自动加载类与机制分析
Feb 10 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
Jun 25 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
php 生成Tab键或逗号分隔的CSV
Sep 24 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 27 PHP
php在linux环境中如何使用redis详解
Dec 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
详解php中反射的应用
2016/03/15 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
如何基于Python按行合并两个txt
2020/11/03 Python
python归并排序算法过程实例讲解
2020/11/04 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
详解px单位html5响应式方案
2018/03/08 HTML / CSS
SQL Server面试题
2013/04/04 面试题
服务中心夜班服务员岗位职责
2013/11/27 职场文书
公司年会主持词
2014/03/22 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS