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中指定函数名称的相关方法
Jun 04 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
Aug 03 Javascript
jquery.mousewheel实现整屏翻屏效果
Aug 30 Javascript
完美解决IE不支持Data.parse()的问题
Nov 24 Javascript
canvas实现十二星座星空图
Feb 14 Javascript
JS实现匀加速与匀减速运动的方法示例
Sep 04 Javascript
解决微信小程序防止无法回到主页的问题
Sep 28 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 Javascript
iphone刘海屏页面适配方法
May 07 Javascript
简单了解vue.js数组的常用操作
Jun 17 Javascript
JavaScript 对象创建的3种方法
Nov 17 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函数utf8转gb2312编码
2006/12/21 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
2013/10/29 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
微信小程序图片自适应实现解析
2020/01/21 Javascript
使用npm命令提示: 'npm' 不是内部或外部命令,也不是可运行的程序的处理方法
2020/05/14 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
2020/11/09 jQuery
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
Python多继承原理与用法示例
2018/08/23 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
美国Max仓库:Max Warehouse
2020/05/31 全球购物
精细化工应届生求职信
2013/11/17 职场文书
客服主管岗位职责
2013/12/13 职场文书
咖啡书吧创业计划书
2014/01/13 职场文书
探矿工程师自荐信
2014/01/24 职场文书
军神教学反思
2014/02/04 职场文书
实习推荐信
2014/05/10 职场文书
药店促销活动策划方案
2014/08/24 职场文书
2014年团支书工作总结
2014/11/14 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
设备技术员岗位职责
2015/04/11 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
2015年招生工作总结
2015/05/04 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书