PHP入门教程之上传文件实例详解


Posted in PHP onSeptember 11, 2016

本文实例讲述了PHP上传文件的方法。分享给大家供大家参考,具体如下:

Demo1.php

<form enctype="multipart/form-data" action="Demo2.php" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
  上传文件: <input type="file" name="userfile" />
  <input type="submit" value="上传" />
</form>

Demo2.php

<?php
  //接受上传文件
  //$_FILES;
  //存在,但是空值
  //[userfile][name] 表示上传的文件名
  //[userfile][type] 表示文件类型:例如,jpg 的文件类型为:image/jpeg
  //[userfile][tmp_name]表示上传的文件临时存放的位置 C:\WINDOWS\temp\php28.tmp
  //[userfile][error]表示错误类型,表示没有任何错误。
  //[userfile][size]表示上传文件的大小
  print_r($_FILES);
  echo '<br/>';
  //is_uploaded_file -- 判断文件是否是通过 HTTP POST 上传的
  //通过 HTTP POST 上传后,文件会存放在临时文件夹下
  $fileMimes = array('image/jpeg','image/pjpeg','image/gif','image/png','image/x-png');
  //判断类型是否是数组里的一种
  if(is_array($fileMimes)){
    if(!in_array($_FILES['userfile']['type'],$fileMimes)){
      echo "<script>alert('本站只允许 jpg,png,gif 图片');history.back();</script>";
      exit;
    }
  }
  //创建一个常量
  define('URL',dirname(__FILE__).'\uploads');
  echo URL;
  //判断目录是否存在
  if(!is_dir(URL)){
    mkdir(URL,0777); //最大权限0777,意思是如果没有这个目录,那么就创建
  }
  define('MAX_SIZE',2000000);
  if($_FILES['userfile']['size'] > MAX_SIZE){
    echo "<script>alert('上传不得超过 2 M');history.back();</script>";
    exit;
  }
  //还有两个问题要验证
  //第二个问题,只允许 JPG 文件
// if($_FILES['userfile']['type'] != 'image/jpeg' && $_FILES['userfile']['type'] != 'image/pjpeg'){
//   echo "<script>alert('本站只允许 JPG 图片');history.back();</script>";
//   exit ;
// }
// switch ($_FILES['userfile']['type']){
//   case 'image/jpeg'://火狐
//     break;
//   case 'image/pjpeg':
//     break;
//   case 'image/gif':
//     break;
//   case 'image/png'://火狐
//     break;
//   case 'image/x-png'://IE
//     break;
//   default: echo "<script>alert('本站只允许 jpg,png,gif 图片');history.back();</script>";
//   exit ;
// }
  //第一个问题,如果上传错误,怎么办
  if($_FILES['userfile']['error']>0){
    switch ($_FILES['userfile']['error']){
      case 1:echo "<script>alert('上传文件超过约定值1');history.back();</script>";
      break;
      case 2:echo "<script>alert('上传文件超过约定值2');history.back();</script>";
      break;
      case 3:echo "<script>alert('部分被上传');history.back();</script>";
      break;
      case 4:echo "<script>alert('没有被上传');history.back();</script>";
      break;
    }
    exit;
  }
  if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
    //就在这里移动了
    //move_uploaded_file -- 将上传的文件移动到新位置
    //第一个参数,写上临时文件的地址,
    //第二个参数,第二个参数要写上你要存在的地址
    //先去判断这个目录是否存在
    //如果想屏蔽掉警告,直接加上 @
    if(!move_uploaded_file($_FILES['userfile']['tmp_name'],URL.'/'.$_FILES['userfile']['name'])){
      //如果移动失败,就失败
      echo '移动失败';
      exit;
    }
  }else{
    echo "<script>alert('临时文件夹找不到上传的文件');history.back();</script>";
    exit;
  }
  //全部通过就上传成功了
  //必须传一个值给Demo3.php
  //文件上传的地址
  echo "<script>alert('文件上传成功');location.href='Demo3.php?url=".$_FILES['userfile']['name']."';</script>";
?>

Demo3.php

<?php
  $url = $_GET['url'];
  echo "<img src=\"uploads/".$url."\"/>";
?>

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

PHP 相关文章推荐
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
基于empty函数的判断详解
Jun 17 PHP
php权重计算方法代码分享
Jan 09 PHP
两千行代码的PHP学习笔记汇总
Oct 05 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
Symfony2学习笔记之插件格式分析
Mar 17 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
php+ajax实现仿百度查询下拉内容功能示例
Oct 20 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 #PHP
PHP入门教程之表单与验证实例详解
Sep 11 #PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
Sep 11 #PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
Sep 11 #PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 #PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 #PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 #PHP
You might like
在字符串中把网址改成超级链接
2006/10/09 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
CI框架表单验证实例详解
2016/11/21 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
[02:59]2014DOTA2西雅图国际邀请赛 圆满落幕中国夺冠
2014/07/23 DOTA
Django文件上传与下载(FileFlid)
2019/10/06 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
文体活动实施方案
2014/03/27 职场文书
体育之星事迹材料
2014/05/11 职场文书
征兵宣传标语
2014/06/20 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL