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 ui dialog里调用datepicker的问题
Aug 06 Javascript
Jquery 高亮显示文本中重要的关键字
Dec 24 Javascript
javascript 构造函数强制调用经验总结
Dec 02 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
Mar 04 Javascript
jQuery实现监控页面所有ajax请求的方法
Dec 10 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
Dec 23 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
Dec 26 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
Dec 29 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
微信小程序实现弹出菜单
Jul 19 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
Nov 26 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
Session保存到数据库的php类分享
2011/10/24 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
jquery实现搜索框功能实例详解
2018/07/23 jQuery
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
美国性感内衣店:Yandy
2018/06/12 全球购物
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
承德避暑山庄导游词
2015/02/03 职场文书
物业工程部岗位职责
2015/02/11 职场文书
彻底理解golang中什么是nil
2021/04/29 Golang
Linux中各个目录的作用与内容
2022/06/28 Servers