php 文件上传系统手记
程序员文章站
2023-11-14 22:20:28
整个系统只有带码全部用php,没有js,没有正则...纯纯的php...其实别的我也不会呵呵... 下面是原表单的html带码... 上传文件表单 复制代码 代码如下: &...
整个系统只有带码全部用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);
}
?>
由于是第一次写...很多地方有问题,并且在写的时候是改了又改得....忘多多指教
下面是原表单的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);
}
?>
由于是第一次写...很多地方有问题,并且在写的时候是改了又改得....忘多多指教