一、文件上傳
前台頁面:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>文件上傳</title> </head> <body> <div> <form method="post" action="upload.php" enctype="multipart/form-data" > 用戶名<input type="text" name="username"></input> <br> 文件簡單介紹<br><textarea name="fileintro" rows="8" cols="50"></textarea> <br>選擇要上傳的文件<br><input type="file" name="myfile"></input><br> <input type="submit" value="上傳文件"></input> </form> </div> </body> </html>
後台處理:
<?php //接收提交頁面傳送的相關信息 $name = $_POST['username']; $intro = $_POST['fileintro']; //$_FILES中存放著文件的相關信息 // echo "<pre>"; // print_r($_FILES); // echo "</pre>"; //可以在這裡對文件大小進行限制 /*$filesize = $_FILES['myfile']['size']; if($filesize>2*1024*1024){ echo "文件過大,不能上傳"; exit(); }*/ //可以對文件類型進行限制 /*$filetype = $_FILES['myfile']['type']; if($filetype!='image/jpg'&&$filetype!='application/pdf'){ echo "文件類型只能是jpg和pdf"; exit(); }*/ if (is_uploaded_file($_FILES['myfile']['tmp_name'])) { //把文件轉存到你希望存放的目錄 $uploaded = $_FILES['myfile']['tmp_name']; //每個用戶動態創建一個文件夾 $userpath = $_SERVER['DOCUMENT_ROOT']."/up/".$name; //判斷該用戶是否已經有文件夾 if(!file_exists($userpath)){ mkdir($userpath); } //防止同一用戶上傳同名文件,可在文件中添加時間戳。 //$moveto = $userpath."/".time().$_FILES['myfile']['name']; //或者對文件名進行修改,但是需要使用字符串處理截得文件後綴名 $truename = $_FILES['myfile']['name']; $moveto = $userpath."/".time().substr($truename,strrpos($truename,".")); if(move_uploaded_file($uploaded,iconv("utf-8", "gb2312", $moveto))){ echo "上傳文件".$_FILES['myfile']['name']."成功"; }else{ echo "上傳文件".$_FILES['myfile']['name']."失敗"; } }else{ echo "上傳文件".$FILES['myfile']['name']."失敗"; } ?>
二、文件下載:
單文件下載:
<?php function down_file($file_name,$file_path){ //$file_name = iconv("uft-8","gb2312",$file_name); //如果文件名是中文,需要對中文名稱轉碼gb2312 //要下載的文件讀取到服務器的內存中 //服務器返回文件數據給浏覽器 //浏覽器將文件寫入用戶指定的位置 //1.判斷文件是否存在 if(!file_exists($file_name)){ echo "111"; return ; } $fp = fopen($file_name,"r"); $file_size = filesize($file_name); //獲取文件大小 //可通過file_size限制浏覽器下載文件大小。 //返回的文件 header("Content-type:application/octet-stream"); //按字節大小返回 header("Accept-Ranges:bytes"); //返回文件大小 header("Accept-Length:$file_size"); //客戶端彈出對話框,對應的文件名 header("Content-Disposition:attachment;filename=".$file_name); $buffer = 1024; //定義緩沖區 //為了下載的安全,最好使用文件字節讀取計數器 $file_count = 0; //feof用於判斷文件是否讀取到文檔尾 while(!feof($fp) && ($file_size-$file_count>0)){ $file_data = fread($fp,$buffer); //統計讀了多少個字節 $file_count+$buffer; echo $file_data; //把部分數據會送給浏覽器 } fclose($fp); //關閉文件 } ?>
多個文件下載:
DownList.php:
<a href="downprocess.php?filename=1.jpg">down</a><img src="1.jpg" width="50px" height="50px"><br><br> <a href="downprocess.php?filename=2.jpg">down</a><img src="2.jpg" width="50px" height="50px"><br><br> <a href="downprocess.php?filename=3.jpg">down</a><img src="3.jpg" width="50px" height="50px"><br><br> <a href="downprocess.php?filename=4.jpg">down</a><img src="4.jpg" width="50px" height="50px"><br><br>
downprocess.php:
<?php $filename = $_REQUEST['filename']; function down_file($file_name){ if(!file_exists($file_name)){ echo "111"; return ; } $fp = fopen($file_name,"r"); $file_size = filesize($file_name); header("Content-type:application/octet-stream"); //按字節大小返回 header("Accept-Ranges:bytes"); //返回文件大小 header("Accept-Length:$file_size"); //客戶端彈出對話框,對應的文件名 header("Content-Disposition:attachment;filename=".$file_name); $buffer = 1024; //定義緩沖區 $file_count = 0; //feof用於判斷文件是否讀取到文檔尾 while(!feof($fp) && ($file_size-$file_count>0)){ $file_data = fread($fp,$buffer); //統計讀了多少個字節 $file_count+$buffer; echo $file_data; //把部分數據會送給浏覽器 } fclose($fp); } down_file($filename); ?>