php 文件上傳系統(tǒng)手記
更新時間:2009年10月26日 17:18:55 作者:
說是手記,實際上整個程序已經(jīng)寫完了,雖然有點難看,但還行..畢竟是自己動手寫得第一個程序...
整個系統(tǒng)只有帶碼全部用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"的意思,是設(shè)置表單的MIME編碼。默認(rèn)情況,這個編碼格式是 application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數(shù)據(jù),進(jìn)行下面的操作.enctype="multipart/form-data"是上傳二進(jìn)制數(shù)據(jù); form里面的值以2進(jìn)制流的方式傳過去。
<input type="hidden" name="MAX_FILE_SIZE" value="8000000">這句好像是沒有用的...我原以為這個可以限制上傳文件大小呢,上傳文件大小只有在php.ini里或后面上傳的文件的腳本里設(shè)置了...我程序里是直接設(shè)置php.ini中upload_max_filesize=6M的.
下面是上傳程序
Code
$uploaddir="./map/";
$typearr=array("rar","zip","w3m","w3x");
$findstr=array("/","\\"," ","<",">"); //對名稱進(jìn)行過濾
$mapname=str_replace($findstr,'',($_POST['mapname']));
//取擴(kuò)展名
function upfiletype($filename){
$arr=explode('.',$filename);
$a=count($arr)-1;
return $arr[$a];
}
//字符串是不是純數(shù)字
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");
}
//判斷是不是重復(fù)上傳
$clintfilename=str_replace($findstr,'',$_FILES['map']['name']);
if(isset($_COOKIE['upload'])){
foreach($_COOKIE['upload'] as $value){
if($value==$clintfilename){
html();
exit("請不要重復(fù)上傳");
}
}
}
$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)){
//設(shè)置一個cookie用來看有沒有重復(fù)上傳
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帶碼...
上傳文件表單
復(fù)制代碼 代碼如下:
<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"的意思,是設(shè)置表單的MIME編碼。默認(rèn)情況,這個編碼格式是 application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數(shù)據(jù),進(jìn)行下面的操作.enctype="multipart/form-data"是上傳二進(jìn)制數(shù)據(jù); form里面的值以2進(jìn)制流的方式傳過去。
<input type="hidden" name="MAX_FILE_SIZE" value="8000000">這句好像是沒有用的...我原以為這個可以限制上傳文件大小呢,上傳文件大小只有在php.ini里或后面上傳的文件的腳本里設(shè)置了...我程序里是直接設(shè)置php.ini中upload_max_filesize=6M的.
下面是上傳程序
Code
復(fù)制代碼 代碼如下:
$uploaddir="./map/";
$typearr=array("rar","zip","w3m","w3x");
$findstr=array("/","\\"," ","<",">"); //對名稱進(jìn)行過濾
$mapname=str_replace($findstr,'',($_POST['mapname']));
//取擴(kuò)展名
function upfiletype($filename){
$arr=explode('.',$filename);
$a=count($arr)-1;
return $arr[$a];
}
//字符串是不是純數(shù)字
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");
}
//判斷是不是重復(fù)上傳
$clintfilename=str_replace($findstr,'',$_FILES['map']['name']);
if(isset($_COOKIE['upload'])){
foreach($_COOKIE['upload'] as $value){
if($value==$clintfilename){
html();
exit("請不要重復(fù)上傳");
}
}
}
$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)){
//設(shè)置一個cookie用來看有沒有重復(fù)上傳
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);
}
?>
由于是第一次寫...很多地方有問題,并且在寫的時候是改了又改得....忘多多指教
您可能感興趣的文章:
- PHP 圖片文件上傳實現(xiàn)代碼
- PHP中文件上傳的一個問題
- php 文件上傳后綴名與文件類型對照表(幾乎涵蓋所有文件)
- PHP 文件上傳全攻略
- PHP 一個比較完善的簡單文件上傳
- php 文件上傳代碼(限制jpg文件)
- PHP 文件上傳源碼分析(RFC1867)
- php ftp文件上傳函數(shù)(基礎(chǔ)版)
- 最新的php 文件上傳模型,支持多文件上傳
- PHP 文件上傳功能實現(xiàn)代碼
- 利用discuz實現(xiàn)PHP大文件上傳應(yīng)用實例代碼
- PHP5+UTF8多文件上傳類
- swfupload 多文件上傳實現(xiàn)代碼
- PHP 文件上傳進(jìn)度條的兩種實現(xiàn)方法的代碼
- php文件上傳表單摘自drupal的代碼
相關(guān)文章
淺析PHP中json_encode與json_decode的區(qū)別
這篇文章主要介紹了淺析PHP中json_encode與json_decode的區(qū)別,PHP提供json_encode()和json_decode()函數(shù),前者用于編碼,后者用于解碼。下面來分析下這兩個函數(shù),感興趣的可以了解一下2020-07-07mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函數(shù)
mysql日期函數(shù)From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT(后者只能格式化標(biāo)準(zhǔn)日期格式,時間戳的不行)2010-03-03php獲取服務(wù)器端mac和客戶端mac的地址支持WIN/LINUX
這篇文章主要介紹了php獲取服務(wù)器端mac和客戶端mac地址的方法,需要的朋友可以參考下2014-05-05PHP 如何利用phpexcel導(dǎo)入數(shù)據(jù)庫
以下是對PHP中利用phpexcel導(dǎo)入數(shù)據(jù)庫的實現(xiàn)代碼進(jìn)行了介紹,需要的朋友可以過來參考下2013-08-08安裝apache2.2.22配置php5.4(具體操作步驟)
本篇文章是對安裝apache2.2.22配置php5.4的具體操作步驟進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06