专栏首页恩蓝脚本php文件上传原理与实现方法详解

php文件上传原理与实现方法详解

本文实例讲述了php文件上传原理与实现方法。分享给大家供大家参考,具体如下:

文件上传实际上就是在前段使用一个form表单提交本地文件到服务器,然后在服务器端将文件从临时目录转移到指定目录的过程。

1、php配置文件

php.ini文件中的file uploads部分定义了相关文件上传配置,

  • file_uploads = On 打开文件上传
  • upload_tmp_dir =临时目录
  • upload_max_filesize = 2M最大上传大小
  • max_file_uploads = 20单次最大上传文件数

2、前端表单

  <form action="test.php" method="post" enctype="multipart/form-data" 
    <input type="file" name="myfile" 
    <input type="submit" value="上传" 
  </form 

当使用由文件上传控件的表单时,必须将form的enctype设置为”multipart/form-data“。

可以在客户端对上传文件的大小与类型进行限制:

<input type="hidden" name="MAX_FILE_SIZE" value="8096" 
<input type="file" name="myfile" accept="image/jpeg,image/png" 

3、后台处理

上传后会在服务器端得到一个$_FILES文件数组如下:

上传到服务器的临时文件默认保存在php.ini中upload_tmp_dir所设置的目录下,我们需要将文件移动到指定位置:

<?php
  header('Content-type:text/html;charset=utf-8');
  $myfile=$_FILES['myfile'];
  //获取文件数组['myfile']的属性tmp_name与name
  $tmp=$myfile['tmp_name'];
  $picname=$myfile['name'];
  //windows采用GBK编码,php采用utf-8编码,需要改变文件名的编码格式
  $picname=iconv('utf-8','GBK',$picname);
  //将零时文件$tmp移动到指定目录userpic并命名为$picname
  copy($tmp,"userpic/".$picname);

file_uploads=On

开启HTTP上传

upload_tmp_dir

临时文件保存目录

upload_max_filesize=2M

最大上传文件大小

post_max_size=8M

POST方式传输最大数据值

max_file_uploads

一次上传最大文件数

memory_limit=128M

单线程最大内存占用量

max_excution_time=-1

脚本解析所允许的最大执行时间(s),默认为-1未开启

4、错误处理

对file数组中的error属性进行判断处理:

$error=$myfile['myfile']['error'];
  if ($error==0){//为0,代表上传成功
    if (move_uploaded_file($tmp,"userpic/".$picname)) {
      echo "移动文件成功";
    }else{
      echo "移动文件失败";
    }
  }else{//不为0,匹配错误信息
    switch ($error){
      case 1:
        echo "超过文件最大上传限制";//php.ini中upload_max_filesize
        break;
      case 2:
        echo "超过表单文件大小限制";//HTML表单中MAX_FILE_SIZE选项
        break;
      case 3:
        echo "文件部分被上传";
        break;
      case 4:
        echo "未选择上传文件";
        break;
      case 7://文件写入失败
      case 8:
        echo "系统错误";
        break;
    }
  }

5、上传限制

在前端可以对上传的文件类型,大小进行限制:

<!--表单隐藏域对上传大小进行限制-- 
<input type="hidden" name="MAX_FILE_SIZE" value="2097152" 
<!--accept 对文件类型限制-- 
<input type="file" name="myfile" accept="image/jpeg,image/png" 

注意限制是以字节为单位

在服务器端也要做响应的限制:

$size=$myfile['size'];//获取文件大小
$MaxSize=2097152;//设置最大允许字节
$type=$myfile['type'];//获取图片类型
$AllowTypr=array('image/jpeg','image/png','image/gif');//允许类型数组
if ($error==0){//为0,代表上传成功
  if ($size $MaxSize){
    echo "<script alert('文件大小超过限制');</script ";
    echo "<script history.back(1);</script ";
    exit();
  }
  if (!in_array($type,$AllowTypr)){
    echo "<script alert('请上传正确图片类型');</script ";
    echo "<script history.back(1);</script ";
    exit();
  }

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP目录操作技巧汇总》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《PHP网络编程技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP echo()函数讲解

    注释: echo() 函数实际不是一个函数,所以您不必对它使用括号。然而,如果您想要传多于一个参数给 echo(),使用括号将会生成解析错误。

    砸漏
  • PHP远程连接oracle数据库操作实现方法图文详解

    本文实例讲述了PHP远程连接oracle数据库操作实现方法。分享给大家供大家参考,具体如下:

    砸漏
  • php查看一个变量的占用内存的实例代码

    大概了解1000个元素的整数数组需要占用 28k 内存,平均每个元素占用 28 个字节

    砸漏
  • linux telnet自动登录实用举例

    以下脚本是为了在EPON环境中通过IP或者MAC自动查询对应的物理端口的举例。 这三个脚本的作用依次是ROUTER脚本登陆路由器查询IP对应的MAC地址,查询...

    葫芦
  • 远程桌面启动Houdini

    最近疫情比较严重大家都是在家办公的, 需要远程登录公司里的开发机. 但是远程桌面无法直接启动Houdini, 会报OpenGL的错

    逍遥剑客
  • php图片木马实现原理

    木马病毒是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。

    仙士可
  • [译] 请把 .gitattributes 加入你的项目

    原文:https://dev.to/deadlybyte/please-add-gitattributes-to-your-git-repository-1jl...

    江米小枣
  • Easypanel 破坏者[源文件]

    周俊辉
  • 【视频编码】 Content Aware ABR技术(一)

    现在越来越多的人在手机、平板、笔记本等移动终端设备上观看在线视频。对于视频服务提供商而言,视频的存储和带宽资源的消耗在持续增加。如何为成千上万的终端用户高效地传...

    用户1324186
  • 【刨根问底】java注解--上

    从JDK1.5开始,Java增加了对元数据的支持,也就是Annotation,首先说明注释和注解不是同一回事,是有区别的。本次分享的注解,其实就是代码里的特色标...

    田维常

扫码关注云+社区

领取腾讯云代金券