PHP实现本地图片上传和验证功能


Posted in Javascript onFebruary 27, 2017

今天研究了一下PHP的FILES函数,使用PHP实现本地图片的上传,验证文件是否为图片,并将图片保存在指定目录下,实现游览图片的功能,感觉还是很好玩的,一共有两个PHP页面,一个作为前台的上传和图片展示,另一个用来处理保存图片,代码里做了很详细的注释,并将FILES函数的语法,error报错类型写了出来,还有一些注意事项。

FILES函数

1、$_FILES[‘myFile'][‘name'] 客户端文件的原名称
2、$_FILES[‘myFile'][‘type'] 文件的 MIME类型,需要浏览器提供该信息的支持,例如”image/gif”
3、$_FILES[‘myFile'][‘size'] 已上传文件的大小,单位为字节
4、$_FILES[‘myFile'][‘tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认,可以在php.ini的upload_tmp_dir指定

关于FILES中error报错类型及其注意:

过滤错误号

0: 没有错误发生,文件上传成功
1: 上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值
2: 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值
3: 文件只有部分被上传
4: 没有文件被上传
5: 上传文件大小为0

注意:

1、文件被上传结束后,默认地被存储在了临时目录中,这时必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。
2、在 PHP 4.1.0 版本以前该数组的名称为$HTTP_POST_FILES,它并不像_FILES 一样是自动全局变量。PHP 3 不支持HTTP_POST_FILES数组。
3、用form上传文件时,一定要加上属性内容enctype=”multipart/form-data”,否则用$_FILES[filename]获取文件信息时会报异常。

以下是代码

index.php

<?php
 header("Content-Type:text/html;charset=utf-8");
 ?>
 <title>PHP实现图片的上传和验证</title>
 <style>
 table{text-align:center;}
 </style>
 <div align="center">
 <h1>上传功能</h1>
 <form action="index_ok.php" method="post" enctype="multipart/form-data">
  上传图片:<input type="file" name="pic">
  <input type="submit" name="sub" value="上传">
 </form>
 <table width="500">
  <tr bgcolor="#cccccc">
  <th>序号</th>
  <th>图片</th>
  <th>添加时间</th>
  <th>操作</th>
  </tr>
  <?php
  //1 打开目录
  $dir=opendir("./uploads");
  //2 遍历目录,输出里面的图片
  $i=0;
  while($f=readdir($dir)){
   $i++;
   //读取目录中的文件,模拟数据库操作
   if($f!="." && $f!=".."){
    $filename="./uploads/$f";
    echo "<tr>";
    echo "<td>{$i}</td>";
    echo "<td><img src='./uploads/{$f}' width='80' height='60'></td>";
    echo "<td>".date("Y-m-d",filectime($filename))."</td>";
    echo "<td><a href='./uploads/{$f}'>查看</a></td>";
    echo "</tr>";
   }
  }
  //3 关闭目录
  closedir($dir);
  ?>
 <tr bgcolor="#cccccc"><td colspan="4"> </td></tr>
 </table>
 </div>

upload.php

<?php
 header("Content-Type:text/html;charset=utf-8");
  if($_FILES['pic']['error']>0){
   echo $_FILES['pic']['error'];
   echo "上传文件错误!";
   echo '<meta http-equiv="refresh" content="3;url=index.php">'; //自动跳转回index文件
  }else{
   //开始获取上传文件的信息
   $file=$_FILES['pic'];
   //var_dump($file);打印文件里的全部信息
   //name:上传文件名
   //type:上传文件的类型
   //tmp_name:上传成功后的临时文件
   //size:上传文件的大小
   //error:上传文件的错误信息
   $uploaddir="./uploads/"; //选择要上传的文件存放目录
   //$uploadfile=$uploaddir.basename($file['name']);//获得上传文件的名称
   //解析文件的名字
   $fileinfo=pathinfo($file['name']);
 //  echo $fileinfo['extension']; 获取文件的类型
   do{
    $newfile=date("YmdHis").rand(1000,9999).".".$fileinfo['extension'];//更改文件的名字,获取一个新的名字
   }while(file_exists($uploaddir.$newfile));

   //上传文件的类型限制
   if (!(($file['type'] == "image/gif")||($file['type'] == "image/jpeg")||($file['type'] == "image/pjpeg"))){
    die("文件类型错误!");
    echo '<meta http-equiv="refresh" content="3;url=index.php">';
   }
   //上传文件的大小限制
   if($file['size'] > 2*1024*1024){
    die("上传文件超过2MB!");
    echo '<meta http-equiv="refresh" content="3;url=index.php">';
   }
   //开始上传文件
   if (is_uploaded_file($file['tmp_name'])) {
    if (move_uploaded_file($file['tmp_name'], $uploaddir.$newfile)) {
     echo "上传成功!";
     echo '<meta http-equiv="refresh" content="3;url=index.php">';//自动跳转回index文件
    } else {
     echo "上传失败,请稍等!";
     echo '<meta http-equiv="refresh" content="3;url=index.php">'; //自动跳转回index文件
    }
   }

  }
 ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery HotKeys轻松搞定键盘事件代码
Aug 30 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 Javascript
Angular中的Promise对象($q介绍)
Mar 03 Javascript
jquery实现图片放大镜功能
Nov 23 Javascript
JavaScript脚本库编写的方法
Dec 09 Javascript
拥Bootstrap入怀——导航栏篇
May 30 Javascript
Bootstrap和Java分页实例第一篇
Dec 23 Javascript
Angular2中select用法之设置默认值与事件详解
May 07 Javascript
vue项目中添加单元测试的方法
Jul 21 Javascript
浅析微信扫码登录原理(小结)
Oct 29 Javascript
Node.js Windows Binary二进制文件安装方法
May 16 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
Feb 27 #Javascript
提高Web性能的前端优化技巧总结
Feb 27 #Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
Feb 27 #Javascript
node.js入门教程之querystring模块的使用方法
Feb 27 #Javascript
JavaScript中数组Array方法详解
Feb 27 #Javascript
从零学习node.js之详解异步控制工具async(八)
Feb 27 #Javascript
jQuery基本选择器和层次选择器学习使用
Feb 27 #Javascript
You might like
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
php短址转换实现方法
2015/02/25 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
Yii框架安装简明教程
2020/05/15 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
7个JS基础知识总结
2014/03/05 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
js+html获取系统当前时间
2017/11/10 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
用Python创建声明性迷你语言的教程
2015/04/13 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
财务工作检讨书
2014/10/29 职场文书
婚内分居协议书范文
2014/11/26 职场文书
股东大会通知
2015/04/24 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书