現在的位置: 首頁 > 綜合 > 正文

php基礎實例–圖片上傳與下載

2018年05月03日 ⁄ 綜合 ⁄ 共 3002字 ⁄ 字型大小 評論關閉

--------------------------------------------------------
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);
   ?>

抱歉!評論已關閉.