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

PHP
用IP地址来统计访问人数!以天为间限!
怎样用PHP来给网页做导航栏
全面測試email的有效性
桌面中心(一) 创建数据库
桌面中心(二) 数据库写入
桌面中心(三) 修改数据库
桌面中心(四) 数据显示
一个个人网页自动化生成系统(1)
一个个人网页自动化生成系统(2)
一个个人网页自动化生成系统(3)
一个个人网页自动化生成系统(4)
一个个人网页自动化生成系统(5)
一个个人网页自动化生成系统(6)
一个模仿oso的论坛程序(之一)
一个模仿oso的论坛程序(之二)
一个模仿oso的论坛程序(之三)
一个简单的图形计数器
一个自定义位数的多用户计数器
MySQL通用查询程序
pop3邮件收取一例

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 262 ::
收藏到网摘: 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);
}
?>

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