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与ASP
Oct 09 PHP
mysql5写入和读出乱码解决
Nov 25 PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
php对文件进行hash运算的方法
Apr 03 PHP
php截取视频指定帧为图片
May 16 PHP
PHP加密解密类实例代码
Jul 20 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
在laravel框架中使用model层的方法
Oct 08 PHP
goto语法在PHP中的使用教程
Sep 17 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
php中explode函数用法分析
2014/11/15 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
jquery实现无限分级横向导航菜单的方法
2015/03/12 Javascript
javascript连续赋值问题
2015/07/08 Javascript
JavaScript File分段上传
2016/03/10 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
python绘图模块matplotlib示例详解
2019/07/26 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
Java面试题:为什么要用Java
2012/05/11 面试题
Laravel中Kafka的使用详解
2021/03/24 PHP
制作部班长职位说明书
2014/02/26 职场文书
婚前协议书
2014/04/15 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
给老婆的保证书
2015/01/16 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书