php 文件上传系统手记
2018-09-08 01:02
整个系统只有带码全部用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-,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.enctype=multipart/form-data是上传二进制数据; form里面的值以2进制流的方式传过去。
<input type=hidden name=MAX_FILE_SIZE value=8000000>这句好像是没有用的...我原以为这个可以限制上传文件大小呢,上传文件大小只有在里或后面上传的文件的脚本里设置了...我程序里是直接设置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);
}
?>
由于是第一次写...很多地方有问题,并且在写的时候是改了又改得....忘多多指教