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面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
PHP教程 变量定义
Oct 23 PHP
常用的PHP数据库操作方法(MYSQL版)
Jun 08 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
thinkphp框架下404页面设置 仅三步
May 14 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
PHP与Perl之间知识点区别整理
Mar 19 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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
一个简单的PHP投票程序源码
2007/03/11 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
jquery实现点击消失的代码
2014/03/03 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
JS实现的简单标签点击切换功能示例
2017/09/21 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
vue实例中data使用return包裹的方法
2018/08/27 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
Python备份Mysql脚本
2008/08/11 Python
python将人民币转换大写的脚本代码
2013/02/10 Python
wxPython事件驱动实例详解
2014/09/28 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
最热门的自我评价
2013/12/30 职场文书
小班重阳节活动方案
2014/02/08 职场文书
mysql部分操作
2021/04/05 MySQL
Python 中random 库的详细使用
2021/06/03 Python
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技