当前位置: 首页 > 图文教程 > 网络编程 > PHP > php 文件上传系统手记

PHP
用PHP调用Oracle存储过程的方法
FleaPHP的安全设置方法
PHP cron中的批处理
php 301转向实现代码
PHP面向对象分析设计的经验原则
PHP伪造referer实例代码
什么是phpDocumentor
php下防止单引号,双引号在接受页面转义的设置方法
php横向重复区域显示二法
PHP集成FCK的函数代码
php 三维饼图的实现代码
php不用GD库生成当前时间的PNG格式图象的程序
10条PHP编程习惯助你找工作
PHP网站基础优化方法小结
40个迹象表明你还是PHP菜鸟
PHP EOT定界符的使用详解
php数组总结篇(一)
利用PHP制作简单的内容采集器的原理分析
php之对抗Web扫描器的脚本技巧
PHP在字符串中查找指定字符串并删除的代码

PHP 中的 php 文件上传系统手记


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 138 ::
收藏到网摘: n/a

说是手记,实际上整个程序已经写完了,虽然有点难看,但还行..毕竟是自己动手写得第一个程序... 整个系统只有带码全部用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);
}
?>

由于是第一次写...很多地方有问题,并且在写的时候是改了又改得....忘多多指教