php 文件上傳系統(tǒng)手記
更新時(shí)間:2009年10月26日 17:18:55 作者:
說(shuō)是手記,實(shí)際上整個(gè)程序已經(jīng)寫(xiě)完了,雖然有點(diǎn)難看,但還行..畢竟是自己動(dòng)手寫(xiě)得第一個(gè)程序...
整個(gè)系統(tǒng)只有帶碼全部用PHP,沒(méi)有JS,沒(méi)有正則...純純的PHP...其實(shí)別的我也不會(huì)呵呵...
下面是原表單的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)情況,這個(gè)編碼格式是 application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數(shù)據(jù),進(jìn)行下面的操作.enctype="multipart/form-data"是上傳二進(jìn)制數(shù)據(jù); form里面的值以2進(jìn)制流的方式傳過(guò)去。
<input type="hidden" name="MAX_FILE_SIZE" value="8000000">這句好像是沒(méi)有用的...我原以為這個(gè)可以限制上傳文件大小呢,上傳文件大小只有在php.ini里或后面上傳的文件的腳本里設(shè)置了...我程序里是直接設(shè)置php.ini中upload_max_filesize=6M的.
下面是上傳程序
Code
$uploaddir="./map/";
$typearr=array("rar","zip","w3m","w3x");
$findstr=array("/","\\"," ","<",">"); //對(duì)名稱(chēng)進(jìn)行過(guò)濾
$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 ('有輸入正確的地圖名稱(chēng)');
}
//判斷是否有文件上傳
if(!is_uploaded_file($_FILES['map']['tmp_name'])){
html();
exit("你沒(méi)有上傳文件或上傳文件大于6M");
}
//判斷是不是重復(fù)上傳
$clintfilename=str_replace($findstr,'',$_FILES['map']['name']);
if(isset($_COOKIE['upload'])){
foreach($_COOKIE['upload'] as $value){
if($value==$clintfilename){
html();
exit("請(qǐng)不要重復(fù)上傳");
}
}
}
$filetype=strtolower(upfiletype($_FILES['map']['name']));
if(!in_array($filetype,$typearr)){
html();
exit("請(qǐng)上傳正確的地圖文件,支持rar,zip,w3m,w3x");
}
//判斷server文件是否存在
$filename=$mapname.'.'.$filetype;
for($a=1;$fopen=@fopen(($uploaddir.$filename),"r");$a++){
$filename=$mapname."$a".'.'.$filetype;
fclose($fopen);
}
//傳輸文件開(kāi)始;
$filepath=$uploaddir.$filename;
if(move_uploaded_file($_FILES['map']['tmp_name'],$filepath)){
//設(shè)置一個(gè)cookie用來(lái)看有沒(méi)有重復(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);
}
?>
由于是第一次寫(xiě)...很多地方有問(wèn)題,并且在寫(xiě)的時(shí)候是改了又改得....忘多多指教
下面是原表單的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)情況,這個(gè)編碼格式是 application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數(shù)據(jù),進(jìn)行下面的操作.enctype="multipart/form-data"是上傳二進(jìn)制數(shù)據(jù); form里面的值以2進(jìn)制流的方式傳過(guò)去。
<input type="hidden" name="MAX_FILE_SIZE" value="8000000">這句好像是沒(méi)有用的...我原以為這個(gè)可以限制上傳文件大小呢,上傳文件大小只有在php.ini里或后面上傳的文件的腳本里設(shè)置了...我程序里是直接設(shè)置php.ini中upload_max_filesize=6M的.
下面是上傳程序
Code
復(fù)制代碼 代碼如下:
$uploaddir="./map/";
$typearr=array("rar","zip","w3m","w3x");
$findstr=array("/","\\"," ","<",">"); //對(duì)名稱(chēng)進(jìn)行過(guò)濾
$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 ('有輸入正確的地圖名稱(chēng)');
}
//判斷是否有文件上傳
if(!is_uploaded_file($_FILES['map']['tmp_name'])){
html();
exit("你沒(méi)有上傳文件或上傳文件大于6M");
}
//判斷是不是重復(fù)上傳
$clintfilename=str_replace($findstr,'',$_FILES['map']['name']);
if(isset($_COOKIE['upload'])){
foreach($_COOKIE['upload'] as $value){
if($value==$clintfilename){
html();
exit("請(qǐng)不要重復(fù)上傳");
}
}
}
$filetype=strtolower(upfiletype($_FILES['map']['name']));
if(!in_array($filetype,$typearr)){
html();
exit("請(qǐng)上傳正確的地圖文件,支持rar,zip,w3m,w3x");
}
//判斷server文件是否存在
$filename=$mapname.'.'.$filetype;
for($a=1;$fopen=@fopen(($uploaddir.$filename),"r");$a++){
$filename=$mapname."$a".'.'.$filetype;
fclose($fopen);
}
//傳輸文件開(kāi)始;
$filepath=$uploaddir.$filename;
if(move_uploaded_file($_FILES['map']['tmp_name'],$filepath)){
//設(shè)置一個(gè)cookie用來(lái)看有沒(méi)有重復(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);
}
?>
由于是第一次寫(xiě)...很多地方有問(wèn)題,并且在寫(xiě)的時(shí)候是改了又改得....忘多多指教
您可能感興趣的文章:
- PHP 圖片文件上傳實(shí)現(xiàn)代碼
- PHP中文件上傳的一個(gè)問(wèn)題
- php 文件上傳后綴名與文件類(lèi)型對(duì)照表(幾乎涵蓋所有文件)
- PHP 文件上傳全攻略
- PHP 一個(gè)比較完善的簡(jiǎn)單文件上傳
- php 文件上傳代碼(限制jpg文件)
- PHP 文件上傳源碼分析(RFC1867)
- php ftp文件上傳函數(shù)(基礎(chǔ)版)
- 最新的php 文件上傳模型,支持多文件上傳
- PHP 文件上傳功能實(shí)現(xiàn)代碼
- 利用discuz實(shí)現(xiàn)PHP大文件上傳應(yīng)用實(shí)例代碼
- PHP5+UTF8多文件上傳類(lèi)
- swfupload 多文件上傳實(shí)現(xiàn)代碼
- PHP 文件上傳進(jìn)度條的兩種實(shí)現(xiàn)方法的代碼
- php文件上傳表單摘自drupal的代碼
相關(guān)文章
4種Windows系統(tǒng)下Laravel框架的開(kāi)發(fā)環(huán)境安裝及部署方法詳解
這篇文章主要介紹了4種Windows系統(tǒng)下Laravel框架的開(kāi)發(fā)環(huán)境安裝及部署方法詳解,需要的朋友可以參考下2020-04-04
PHP安全技術(shù)之 實(shí)現(xiàn)php基本安全
php開(kāi)發(fā)過(guò)程中,需要注意的一些安全小細(xì)節(jié),屏蔽錯(cuò)誤提示,多考慮下安全問(wèn)題。2010-09-09
php導(dǎo)出中文內(nèi)容excel文件類(lèi)實(shí)例
這篇文章主要介紹了php導(dǎo)出中文內(nèi)容excel文件類(lèi),實(shí)例分析了php操作帶有中文內(nèi)容的Excel文件及文件導(dǎo)出的實(shí)現(xiàn)方法,需要的朋友可以參考下2015-07-07
PHP中通過(guò)fopen()函數(shù)訪(fǎng)問(wèn)遠(yuǎn)程文件示例
這篇文章主要介紹了PHP中通過(guò)fopen()函數(shù)訪(fǎng)問(wèn)遠(yuǎn)程文件示例,本文講解了fopen函數(shù)的作用、使用它需要的配置問(wèn)題、超時(shí)問(wèn)題等內(nèi)容,并給出了代碼實(shí)例,需要的朋友可以參考下2014-11-11
yii框架源碼分析之創(chuàng)建controller代碼
我們可以看到有時(shí)會(huì)使用protected目錄下的controller,有時(shí)會(huì)使用module中controller,具體是如何處理的呢,請(qǐng)看如下的分析2011-06-06
淺析PHP類(lèi)的反射來(lái)實(shí)現(xiàn)依賴(lài)注入過(guò)程
這篇文章主要介紹了PHP類(lèi)的反射來(lái)實(shí)現(xiàn)依賴(lài)注入過(guò)程以及相關(guān)知識(shí)點(diǎn)分享,對(duì)此有興趣的朋友跟著小編學(xué)習(xí)下吧。2018-02-02
將CMYK顏色值和RGB顏色相互轉(zhuǎn)換的PHP代碼
本節(jié)主要介紹了將CMYK顏色值和RGB顏色相互轉(zhuǎn)換的PHP代碼,需要的朋友可以參考下2014-07-07

