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 相关文章推荐
JavaScript高级程序设计 DOM学习笔记
Sep 10 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
Apr 16 Javascript
javascript 使用 NodeList需要注意的问题
Mar 04 Javascript
js出生日期 年月日级联菜单示例代码
Jan 10 Javascript
JavaScript设计模式之单例模式实例
Sep 24 Javascript
JavaScript中原型和原型链详解
Feb 11 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 Javascript
BootStrap实现手机端轮播图左右滑动事件
Oct 13 Javascript
利用Vue实现移动端图片轮播组件的方法实例
Aug 23 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
May 31 jQuery
详解关于element级联选择器数据回显问题
Feb 20 Javascript
vue实现广告栏上下滚动效果
Nov 26 Vue.js
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
1 Tube Radio
2021/03/02 无线电
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
Javascript之String对象详解
2016/06/08 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
python实现ID3决策树算法
2017/12/20 Python
对python sklearn one-hot编码详解
2018/07/10 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
大学生大二自我鉴定
2013/10/28 职场文书
大学生自荐书范文
2013/12/10 职场文书
美术教师岗位职责
2014/03/18 职场文书
创建文明城市标语
2014/06/16 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
教师节座谈会主持词
2015/07/03 职场文书
公司会议开幕词
2016/03/03 职场文书