程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 文件上傳系統手記

php 文件上傳系統手記

編輯:關於PHP編程

整個系統只有帶碼全部用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);
}
?>

由於是第一次寫...很多地方有問題,並且在寫的時候是改了又改得....忘多多指教

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved