--------------------------------------------------------
php基礎實例--圖片上傳與下載
--------------------------------------------------------
實現目標:通過圖片上傳來了解php中文件上傳的流程
1、創建圖片上傳的存放目錄
2、創建index.php文件,瀏覽上傳後的圖片,並提供上傳表單
注意:上傳表單中的發送方式必須為post,類型enctype="multipart/form-data"
3、doupload.php 執行圖片上傳
接收文件上傳使用的是$_FILES[]全局數組接收
每個上傳的文件都有5個上傳的信息組成數組
array(1) {
["pic"]=> //上傳文件的變數名字
array(5) {
["name"]=>//上傳文件名
string(36) "23627248_1374493649038_1024x1024.jpg"
["type"]=>//文件類型
string(10) "image/jpeg"
["tmp_name"]=>//上傳文件成功後臨時文件名
string(24) "E:\xampp\tmp\php5113.tmp"
["error"]=>//和該文件上傳相關的錯誤代碼
int(0)
["size"]=>//上傳文件大小
int(30516)
}
}
var_dump — 列印變數的相關信息
s_uploaded_file — 判斷文件是否是通過 HTTP POST 上傳的
pathinfo — 返迴文件路徑的信息
getimagesize — 取得圖像大小
4、download.php下載文件
代碼片段:
<html> <head> <title>圖片上傳與下載示例</title> </head> <body> <h2>圖片上傳與下載示例</h2> 上傳圖片: <!-- 文件上傳表單方法必須為post --> <form action="doupload.php" method="post"enctype="multipart/form-data"> <input type="file" name="pic"/> <input type="submit" value="上傳"/> </form> <table width="500" border="0" > <tr align="left"bgcolor ="#cccccc"> <th>序號</th><th>圖片</th><th>添加時間</th><th>操作</th> </tr> <?php //1打開目錄uploads $dir = opendir("./uploads"); //2遍歷目錄輸出裡面的圖片信息 $i = 0; while ($f = readdir($dir)) { if ($f != "."&&$f!="..") { $i++; echo "<tr>"; echo "<td>{$i}</td>"; echo "<td><img src='./uploads/{$f}'width='80' height='50'/></td>"; echo "<td>".date("Y-m-n",filectime("./uploads/".$f))."</td>"; echo "<td><a href='./uploads/{$f}'>查看</a>|| <a href='download.php?name={$f}'>下載</a></td>"; echo "</tr>"; } } //3.關閉目錄 closedir($dir); //4. ?> <tr bgcolor ="#cccccc"> <td cospla></td> </tr> </table> </body> </html>
<?php //執行文件(圖片)上傳 echo "<pre>"; var_dump($_FILES); echo "</pre>"; //1、獲取上傳文件信息 $upfile = $_FILES["pic"]; $typelist = array("image/jpeg","image/jpg","image/png","image/gif"); //定義上傳圖片的類型 //定義上傳後文件路徑 $path = "./uploads/"; //2、過濾上傳文件的錯誤號 if($upfile["error"]>0) { //獲取錯誤信息 switch($upfile["error"]) { case 1: $info = "其值為 1,上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。"; break; case 2: $info = "其值為 2,上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。 "; break; case 3: $info = "其值為 3,文件只有部分被上傳。"; break; case 4: $info = "其值為 4,沒有文件被上傳。"; break; case 6: $info = "其值為 6,找不到臨時文件夾。PHP 4.3.10 和 PHP 5.0.3 引進。"; break; case 7: $info = "其值為 7,文件寫入失敗。"; break; } dir("上傳文件錯誤 ,原因:".$info) ; } //3本次上傳文件大小的過濾 if($upfile["size"]>10000000000) { die("上傳文件大小超出限制"); } //4類型的過濾 if(!in_array($upfile["type"],$typelist)) { die("上傳文件類型非法!".$upfile["type"]); } //5、上傳後的文件名的定義 ,隨機獲取文件名(保持後綴名不變) $fileinfo = pathinfo($upfile["namE"]); //解析上傳文件名字 do{ $newfile = date("YmnHis").rand(1000,9999).$fileinfo["extension"]; }while(file_exits($path.$newfile)); //6、執行文件上傳 if(is_uploaded_file($upfile["tmp_name"])) { // 執行文件上傳(移動上傳文件) if( move_uploaded_file($upfile["tmp_name"],$path.$newfile)) { echo "文件上傳成功!"; echo "<h2><a href='index.php'>瀏覽</a></h2>"; }else { echo"上傳文件失敗!!!"; } }else { echo "不是要上傳的文件類型"; } //7、 ?>
<?php
//執行圖片下載
//1.獲取要下載的圖片名(加上路徑)
$file ="./uploads/".$_GET["name"];
// 2.重設相應類型
$info = getimagesize($file);
header("Content-Type:".$info["mime"]);
// 指定下載的文件名;
header("Content-Disposition:attachment:filename".$_GET["name"]);
// 指定文件的大小
header("Content-Length:".filesize($file));
//響應內容
readfile($file);
?>