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 相关文章推荐
Document对象内容集合(比较全)
Sep 06 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
Feb 05 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
Sep 26 Javascript
初步认识JavaScript函数库jQuery
Jun 18 Javascript
JavaScript中的cacheStorage使用详解
Jul 29 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
Jul 24 Javascript
BootStrap整体框架之基础布局组件
Dec 15 Javascript
JS正则表达式验证中文字符
May 08 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
vue this.reload 方法 配置
Sep 12 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
Nov 21 Javascript
简单分析js中的this的原理
Aug 31 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
php缓存技术介绍
2006/11/25 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
vue实现拖拽效果
2019/12/23 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中基本的日期时间处理的学习教程
2015/10/16 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
高一物理教学反思
2014/01/24 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
民主评议党员工作总结
2014/10/20 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
2014年中职班主任工作总结
2014/12/16 职场文书
前台文员岗位职责
2015/02/04 职场文书
行政助理岗位职责
2015/02/10 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
话题作文之成长
2019/12/09 职场文书
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android