zoukankan      html  css  js  c++  java
  • PHP上传图片例子

    PHP上传图片例子  源码下载

    两个文件:

    tu.php

    upload.php

     

    tu.php 代码:

      1 <?php
      2 ini_set("display_errors", "On");
      3 error_reporting(E_ALL | E_STRICT);
      4 ?>
      5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      6 <html xmlns="http://www.w3.org/1999/xhtml">
      7 <head>
      8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      9 <title>上传图片</title>
     10 </head>
     11 
     12 <body>
     13 <h1>上传图片</h1>
     14 
     15 <div id="divPreview">
     16         <img id="imgHeadPhoto" src="noperson.jpg" style=" 160px; height: 170px; border: solid 1px #d2e2e2;"
     17             alt="" />
     18 </div>
     19 <!--enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码,"multipart/form-data"在使用包含文件上传控件的表单时,必须使用该值。-->
     20 <form action="upload.php" method="post" enctype="multipart/form-data">
     21 <!--file定义输入字段和 "浏览"按钮,供文件上传。-->
     22     <input type="file" name="file" onchange="PreviewImage(this,'imgHeadPhoto','divPreview');" size="20" />
     23     <input  type="submit" value="上传"/>
     24 
     25 </form>
     26 
     27 
     28 
     29 <div>
     30 <?php
     31 $page=isset($_GET['page'])?$_GET['page']:0;//从零开始
     32 $imgnums = 5;    //每页显示的图片数
     33 $path="./img/";   //图片保存的目录
     34 $handle = opendir($path); 
     35 $i=0;
     36 while (false !== ($file = readdir($handle))) {
     37 list($filesname,$ext)=explode(".",$file);
     38 if($ext=="gif" or $ext=="jpg" or $ext=="JPG" or $ext=="png" ) {
     39 if (!is_dir('./'.$file)) {
     40 $array[]=$file;//保存图片名称
     41 ++$i;
     42 } } } 
     43 
     44  if($array){  
     45 rsort($array);//修改日期倒序排序
     46 }
     47 
     48 for($j=$imgnums*$page; $j<($imgnums*$page+$imgnums)&&$j<$i; ++$j){
     49 echo '<div>';
     50 echo $array[$j].'<br />';
     51 $img_info = getimagesize($path.$array[$j]);
     52 echo $img_info[0].'<br />';
     53 if ($img_info[0]>180){//图片宽度大于180像素的,以宽180显示,高以等比例缩小,宽小于180像素的图片,不作任何改变
     54     echo "<img src=".$path.$array[$j]." width='180' height='".($img_info[1]*(180/$img_info[0]))."'><br />";
     55     }else{
     56     echo "<img src=".$path.$array[$j]." ><br />";
     57     
     58     }
     59 echo '</div>';
     60 } 
     61 
     62                 $realpage = @ceil($i / $imgnums) - 1;
     63                 $Prepage = $page-1;
     64                 $Nextpage = $page+1; 
     65         if($Prepage<0){  
     66                 echo "上一页 ";
     67                 echo "<a href=?page=$Nextpage>下一页</a> ";
     68                 echo "<a href=?page=$realpage>最末页</a> ";
     69         }elseif($Nextpage >= $realpage){
     70                 echo "<a href=?page=0>首页</a> ";
     71                 echo " <a href=?page=$Prepage>上一页</a> ";
     72                 echo " 下一页";
     73         }else{
     74                 echo "<a href=?page=0>首页</a> "; 
     75                 echo "<a href=?page=$Prepage>上一页</a> ";
     76                 echo "<a href=?page=$Nextpage>下一页</a> ";
     77                 echo "<a href=?page=$realpage>最末页</a> ";
     78         }
     79 
     80 
     81 
     82 
     83 ?>
     84 
     85 </div>
     86 </body>
     87 <script type="text/javascript">
     88         //js本地图片预览,兼容ie[6-9]、火狐、Chrome17+、Opera11+、Maxthon3
     89         function PreviewImage(fileObj, imgPreviewId, divPreviewId) {
     90             var allowExtention = ".jpg,.bmp,.gif,.png"; //允许上传文件的后缀名document.getElementById("hfAllowPicSuffix").value;
     91             var extention = fileObj.value.substring(fileObj.value.lastIndexOf(".") + 1).toLowerCase();
     92             var browserVersion = window.navigator.userAgent.toUpperCase();
     93             if (allowExtention.indexOf(extention) > -1) {
     94                 if (fileObj.files) {//HTML5实现预览,兼容chrome、火狐7+等
     95                     if (window.FileReader) {
     96                         var reader = new FileReader();
     97                         reader.onload = function (e) {
     98                             document.getElementById(imgPreviewId).setAttribute("src", e.target.result);
     99                         }
    100                         reader.readAsDataURL(fileObj.files[0]);
    101                     } else if (browserVersion.indexOf("SAFARI") > -1) {
    102                         alert("不支持Safari6.0以下浏览器的图片预览!");
    103                     }
    104                 } else if (browserVersion.indexOf("MSIE") > -1) {
    105                     if (browserVersion.indexOf("MSIE 6") > -1) {//ie6
    106                         document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);
    107                     } else {//ie[7-9]
    108                         fileObj.select();
    109                         if (browserVersion.indexOf("MSIE 9") > -1)
    110                             fileObj.blur(); //不加上document.selection.createRange().text在ie9会拒绝访问
    111                         var newPreview = document.getElementById(divPreviewId + "New");
    112                         if (newPreview == null) {
    113                             newPreview = document.createElement("div");
    114                             newPreview.setAttribute("id", divPreviewId + "New");
    115                             newPreview.style.width = document.getElementById(imgPreviewId).width + "px";
    116                             newPreview.style.height = document.getElementById(imgPreviewId).height + "px";
    117                             newPreview.style.border = "solid 1px #d2e2e2";
    118                         }
    119                         newPreview.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod='scale',src='" + document.selection.createRange().text + "')";
    120                         var tempDivPreview = document.getElementById(divPreviewId);
    121                         tempDivPreview.parentNode.insertBefore(newPreview, tempDivPreview);
    122                         tempDivPreview.style.display = "none";
    123                     }
    124                 } else if (browserVersion.indexOf("FIREFOX") > -1) {//firefox
    125                     var firefoxVersion = parseFloat(browserVersion.toLowerCase().match(/firefox/([d.]+)/)[1]);
    126                     if (firefoxVersion < 7) {//firefox7以下版本
    127                         document.getElementById(imgPreviewId).setAttribute("src", fileObj.files[0].getAsDataURL());
    128                     } else {//firefox7.0+                    
    129                         document.getElementById(imgPreviewId).setAttribute("src", window.URL.createObjectURL(fileObj.files[0]));
    130                     }
    131                 } else {
    132                     document.getElementById(imgPreviewId).setAttribute("src", fileObj.value);
    133                 }
    134             } else {
    135                 alert("仅支持" + allowExtention + "为后缀名的文件!");
    136                 fileObj.value = ""; //清空选中文件
    137                 if (browserVersion.indexOf("MSIE") > -1) {
    138                     fileObj.select();
    139                     document.selection.clear();
    140                 }
    141                 fileObj.outerHTML = fileObj.outerHTML;
    142             }
    143             return fileObj.value;    //返回路径
    144         }
    145     </script>
    146 </html>


    upload.php源码:

      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <head>
      4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      5 <title>上传处理文件</title>
      6 </head>
      7 
      8 <body>
      9 <?php
     10 
     11 $gotopage="tu.php";
     12 //var_dump($_FILES["file"]);
     13 //array(5) { ["name"]=> string(17) "56e79ea2e1418.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(43) "C:UsersasusAppDataLocalTempphpD07.tmp" ["error"]=> int(0) ["size"]=> int(454445) } 
     14 //1.限制文件的类型,防止注入php或其他文件,提升安全
     15 //2.限制文件的大小,减少内存压力
     16 //3.防止文件名重复,提升用户体验
     17     //方法一:  修改文件名    一般为:时间戳+随机数+用户名
     18     // 方法二:建文件夹
     19     
     20 //4.保存文件
     21 
     22 //判断上传的文件是否出错,是的话,返回错误
     23 if($_FILES["file"]["error"])
     24 {
     25     //echo $_FILES["file"]["error"]; 
     26     header("refresh:10;url=".$gotopage); 
     27     print('上传出错,错误代码:'.$_FILES["file"]["error"].',请稍等...<br>10秒后自动跳转。');
     28     echo "<br /><br /><br />";
     29     switch ($_FILES["file"]["error"])
     30     {
     31      case 1:
     32          echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。";
     33          break;  
     34      case 2:
     35          echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定";
     36          break;
     37      case 3:
     38          echo "文件只有部分被上传。 ";
     39          break;
     40      case 4:
     41          echo "没有文件被上传。 ";
     42          break;     
     43      case 5:
     44          echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定";
     45          break; 
     46      case 6:
     47          echo "找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。";
     48          break;  
     49      case 7:
     50          echo "文件写入失败。PHP 5.1.0 引进。";
     51          break;  
     52   
     53   
     54    }
     55     
     56     echo "<br /><br /><br />
     57     错误代码解析<br />
     58     UPLOAD_ERR_OK:其值为 0,没有错误发生,文件上传成功。<br /> 
     59     UPLOAD_ERR_INI_SIZE: 其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。<br /> 
     60     UPLOAD_ERR_FORM_SIZE:其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定<br />
     61     UPLOAD_ERR_PARTIAL:其值为 3,文件只有部分被上传。 <br />
     62     UPLOAD_ERR_EXTENSION:其值为 4,没有文件被上传。 <br />
     63     UPLOAD_ERR_NO_TMP_DIR: 其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。<br /> 
     64     UPLOAD_ERR_CANT_WRITE:其值为 7,文件写入失败。PHP 5.1.0 引进。<br />
     65     ";
     66        
     67 }
     68 else
     69 {
     70 
     71   echo "Upload: " . $_FILES["file"]["name"] . "<br />";
     72   echo "Type: " . $_FILES["file"]["type"] . "<br />";
     73   echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
     74   echo "Stored in: " . $_FILES["file"]["tmp_name"]. "<br /><br /><br />";
     75   
     76 
     77     //没有出错
     78     //加限制条件
     79     //判断上传文件类型为png或jpg且大小不超过10240000B(10M)
     80     if(($_FILES["file"]["type"]=="image/png"||$_FILES["file"]["type"]=="image/gif"||$_FILES["file"]["type"]=="image/jpeg")&&$_FILES["file"]["size"]<10240000)
     81     {
     82             //防止文件名重复
     83             $filename ="./img/".time()."_".$_FILES["file"]["name"];
     84             //转码,把utf-8转成gb2312,返回转换后的字符串, 或者在失败时返回 FALSE。
     85             $filename =iconv("UTF-8","gb2312",$filename);
     86              //检查文件或目录是否存在
     87             if(file_exists($filename))
     88             {
     89                 echo"该文件已存在";
     90             }
     91             else
     92             {  
     93                 //保存文件,   move_uploaded_file 将上传的文件移动到新位置  
     94                 move_uploaded_file($_FILES["file"]["tmp_name"],$filename);//将临时地址移动到指定地址
     95                 header("refresh:5;url=".$gotopage); print('上传成功,请稍等...<br>五秒后自动跳转。');    
     96             }        
     97     }
     98     else
     99     {
    100         //echo"文件类型不对";
    101         header("refresh:5;url=".$gotopage); print('上传失败,你上传的不是图片,请稍等...<br>五秒后自动跳转。');  
    102     }
    103 }
    104 ?>
    105 </body>
    106 </html>
  • 相关阅读:
    idea语法检查红线隐藏配置
    spring security
    linux centos7下安装fastdfs
    定时任务在多个服务实例之间最多只执行一次
    C++11:01auto关键字
    chap3 数组 #C
    django之模型层 各种查询 数据库查询优化相关 事务使用
    django orm 中表与表之间建关系 视图层 路由层 django请求生命周期
    django 静态文件的配置 orm 中 字段与数据的增删改查 使用MySQL数据库
    BOM,DOM, JS,JQ
  • 原文地址:https://www.cnblogs.com/chenjian/p/9748313.html
Copyright © 2011-2022 走看看