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 相关文章推荐
php一些公用函数的集合
Mar 27 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
10个超级有用值得收藏的PHP代码片段
Jan 22 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
Sep 26 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
实例讲解PHP页面静态化
Feb 05 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 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排序算法的复习和总结
2012/02/15 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
2015/10/21 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
2013/12/08 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
python多线程扫描端口示例
2014/01/16 Python
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
python进行文件对比的方法
2018/12/24 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
客服服务心得体会
2013/12/30 职场文书
护理专业优质毕业生自荐书
2014/01/31 职场文书
体育教学随笔感言
2014/02/24 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
房产公证书样本
2015/01/23 职场文书
电频谱管理的原则是什么
2022/02/18 无线电