php文件上传、下载和删除示例


Posted in PHP onAugust 28, 2020

php文件上传、下载和删除示例大体思路如下,具体内容如下

一.文件上传

1.把上传文件的区域做出来

div1

2.把显示文件的区域做出来

div2

3.提交表单,上传文件

4.服务器接收文件数据

用$_FILE[name]接收

5.处理数据,看上传文件是否有错误

错误有如下几种:

1).上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值
2).上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值
3).文件只有部分被上传
4).没有文件被上传
5).找不到临时文件夹
6).文件写入失败

6.把上传的文件从临时文件夹移到指定文件夹存放

用这个move_uploaded_file函数
其中4 5 6步骤可以做成一个函数直接调用.
注意:文件上传的页面如果要嵌入php代码,文件扩展名不能是html,而是.php

二.文件下载

1.客户端把文件名发送给服务器

2.服务器接收文件名,然后加上文件的路径.

3.然后把文件数据传回客户端

一般是这四步:

//1.重设响应类型
 $info = getimagesize($rootPath.$file);
 header("Content-Type:".$info['mime']);
 //2.执行下载的文件名
 header("Content-Disposition:attachment;filename=".$file);
 //3.指定文件大小
 header("Content-Length:".filesize($rootPath.$file));
 //4.响应内容
 readfile($rootPath.$file);

三.文件删除

1..客户端把文件名发送给服务器

2.服务器接收文件名,然后加上文件的路径.

3.用unlink函数执行删除文件操作

这里有一个图片上传下载删除的小例子.
效果如图:

php文件上传、下载和删除示例

文件上传下载删除的界面,代码如下:
html+php内嵌:

<!-- 选择上传文件区域-->
<div id="div1">
 <form action="upLoadFile.php" method="post" enctype="multipart/form-data">
  <div id="div2"><input type="text" id="show" /></div>
  <div id="div3">
   <span class="text">选择文件</span>
    <input type='hidden' name='MAX_FILE_SIZE' value='100000000'> <!--表单上传文件的大小限制<100M,也可以设置其它值-->
   <input type="file" id="upfile" name="file" />
  </div>
  <input type="submit" value="上传" class="upload" />
 </form>
</div>
<!-- 选择上传文件区域结束-->

<!-- 上传文件显示区域-->
<div id="show-file">
 <ul id="ul-list">
  <!-- 内嵌php代码,为了动态显示上传的文件-->
  <?php
  //1.打开目录
  $dir = opendir('upload');
  //2.遍历目录
  $i = 0;
  while($file = readdir($dir))
  {
   if($file == '.'||$file == '..')
    continue;
   echo "<li><img src='upload/{$file}' width='120' height='100'>
    <div><a href='deleteFile.php?name={$file}'>删除</a></span></div>
    <span><a href='download.php?name={$file}'>下载</a></span></li>";
  }
  //3.关闭目录
  closedir($dir);
  ?>
  <!-- 内嵌php代码结束-->
 </ul>
</div>
<!-- 上传文件显示区域结束-->

css代码:

*{margin:0;padding:0;}
  ul,li{list-style: none;}
  /*最外层的div,目的是包住选择文件按钮,显示框和上传文件按钮*/
  #div1{width:405px;height:38px;position: relative;margin:40px auto;}

  /*第二层div包住显示框和上传按钮,右浮动*/
  #div2{float: right;}
  #div2 input {width:250px;height: 38px;font-size: 22px;}

  /*第三层div包住input file*/
  #div3{float:left;width:140px;height:38px;position: relative;
   background: url("upload.jpg") no-repeat 0 0;margin-left: 5px;}
  #div3 input{position: absolute;width:100%;height: 100%;top:0;left: 0;
   z-index: 1;opacity:0;}

  /*图片(选择文件按钮)上的文字*/
  .text{display: block;width:140px;height: 38px;position: absolute;top: 0;
   left:0;text-align: center;line-height: 38px;font-size: 28px;
   color: orchid;}

  /*上传按钮的位置*/
  .upload{width:70px;height: 38px;background: greenyellow;position: absolute;top:0;right: -75px;}

  /*鼠标停留在选择文件按钮上的时候切换图片*/
  #div3:hover{background: url("upload.jpg") no-repeat 0 -40px;}

  /*显示图片的div->ul,采用左浮动的方式,一行行的排列图片*/
  #show-file{width:760px;height:445px;position: relative;margin:10px auto;overflow: scroll;}
  #show-file ul{width:760px;height:445px;position: absolute;top:0;left:0;}
  #show-file ul li{float: left;width:120px;height: 100px;margin: 3px 0 0 3px;position: relative;}

  /*删除按钮的位置和一些样式*/
  #show-file ul li div{display: none;opacity: 0;width:40px;height: 20px;position: absolute;left: 5px;bottom: 5px;
   background: gold;color: #d32a0e;z-index: 1;cursor: pointer;text-align: center;line-height: 20px;}

  /*下载按钮的位置和一些样式*/
  #show-file ul li span{display: none;opacity: 0;width:40px;height: 20px;position: absolute;right: 5px;bottom: 5px;
   background: gold;color: #d32a0e;z-index: 1;cursor: pointer;text-align: center;line-height: 20px;}

  /*把a标签的自带样式去掉,鼠标停留时字体换颜色*/
  #show-file ul li span,div a{text-decoration: none;color:orangered;}
  #show-file ul li span,div a:hover{color: #00fa00;}

js代码:

<script src="move.js"></script>
 <script>
  window.onload = function ()
  {
   //当选择文件后,会触发这个事件
   $('upfile').onchange = function ()
   {
    $('show').value = this.value;//把获取到的文件伪路径传到编辑框
   };
   //显示下载按钮
   var aLi = $('ul-list').getElementsByTagName('li');  //图片
   var aSpan = $('ul-list').getElementsByTagName('span'); //下载按钮
   var aDiv = $('ul-list').getElementsByTagName('div'); //删除按钮
   for(var i = 0;i<aLi.length;i++)
   {
    aLi[i].index = i;
    aLi[i].onmousemove = function ()
    {
     aSpan[this.index].style.display = 'block';
     aDiv[this.index].style.display = 'block';
     startMove(aDiv[this.index],{opacity:100}); //缓冲运动
     startMove(aSpan[this.index],{opacity:100}); //缓冲运动
    };
    aLi[i].onmouseout = function ()
    {
     aSpan[this.index].style.display = 'none';
     aDiv[this.index].style.display = 'none';
     startMove(aDiv[this.index],{opacity:0}); //缓冲运动
     startMove(aSpan[this.index],{opacity:0}); //缓冲运动
    }
   }
  };
  function $(id)
  {
   return document.getElementById(id);
  }
 </script>

处理上传文件的php文件:

include('myFunctions.php');
if(uploadFile('file','upload'))
 header("Location:upFileAndDownFile.php");//会马上跳转回原页面,根本感觉不到页面有跳转到这里

处理下载文件的php文件:

include('myFunctions.php');
//获取要下载的文件名(加上路径)
$file = $_GET['name'];
$rootPath = 'upload/';
downLoadFile($file,$rootPath);

处理删除文件的php文件:

$fileName = 'upload/'.$_GET['name'];
unlink($fileName);
header("Location:upFileAndDownFile.php");

其中move.js在前面的JS完美运动框架文章有讲过。 
myFunctions.php中的函数如下:

/**
 * @function 下载文件
 * @param $file 要下载的文件名
 * @param $rootPath 文件根路径
 * @return 无
 */
function downLoadFile($file,$rootPath)
{
 //1.重设响应类型
 $info = getimagesize($rootPath.$file);
 header("Content-Type:".$info['mime']);
 //2.执行下载的文件名
 header("Content-Disposition:attachment;filename=".$file);
 //3.指定文件大小
 header("Content-Length:".filesize($rootPath.$file));
 //4.响应内容
 readfile($rootPath.$file);
}


/**
 * @function 上传文件
 * @param $name 表单名 <input type="file" name="pic" />
 * @param $path 上传后,文件存放的路径
 * @return 返回新的文件路径表示上传成功 false 失败
 */
function uploadFile($name,$path)
{
 $file = $_FILES[$name];
 //1.过滤上传文件的错误号
 if($file['error'] > 0)
 {
  //获取错误信息
  switch($file['error'])
  {
   case 1:
    $info = '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。';
    break;
   case 2:
    $info = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。';
    break;
   case 3:
    $info = '文件只有部分被上传。';
    break;
   case 4:
    $info = '没有文件被上传。';
    break;
   case 6:
    $info = '找不到临时文件夹';
    break;
   case 7:
    $info = '文件写入失败。 ';
    break;
  }
  die("上传错误,原因: ".$info);
 }
 //2.上传文件大小的过滤
 if($file['size'] > 100000000) //字节为单位
  die('上传文件大小超出限制!');
 //3.上传后的文件名定义
 $newfile = null;
 $fileinfo = pathinfo($file['name']); //解析上传文件名
 do{
  $newfile = date('YmdHis').".".$fileinfo['extension'];
 }while(file_exists($path.'/'.$newfile));
 //4.执行文件上传
 //判断是否是一个上传文件
 if(is_uploaded_file($file['tmp_name']))
 {
  //执行文件上传(移动文件到指定目录)
  if(move_uploaded_file($file['tmp_name'],$path.'/'.$newfile))
   return $path.'/'.$newfile;
  else
   return false;
 }
 else
  die('不是一个上传文件!');
}

上传文件的时候注意要设置好HTML表单的大小限制和服务器的大小限制,post的大小限制。

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

PHP 相关文章推荐
繁体中文转换为简体中文的PHP函数
Oct 09 PHP
php一些公用函数的集合
Mar 27 PHP
php利用header函数实现文件下载时直接提示保存
Nov 12 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
供参考的 php 学习提高路线分享
Oct 23 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
PHP数据库操作四:mongodb用法分析
Aug 16 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
May 23 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
Oct 18 #PHP
php中array_slice和array_splice函数解析
Oct 18 #PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 #PHP
Yii框架实现邮箱激活的方法【数字签名】
Oct 18 #PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 #PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 #PHP
利用PHP绘图函数实现简单验证码功能的方法
Oct 18 #PHP
You might like
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
PHP变量内存分配问题记录整理
2013/11/27 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
jquery的each方法使用示例分享
2014/03/25 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
商务英语专业自荐信
2013/10/14 职场文书
儿科护士自我鉴定
2013/10/14 职场文书
文明之星事迹材料
2014/05/09 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
怎样写家长意见
2015/06/04 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
angular异步验证器防抖实例详解
2022/03/31 Javascript