一、文件上傳
前台頁面:
<!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);
?>