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中的MVC模式运用技巧
May 03 PHP
php 删除记录实现代码
Mar 12 PHP
php 应用程序安全防范技术研究
Sep 25 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
php 过滤英文标点符号及过滤中文标点符号代码
Jun 12 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
thinkPHP3.1验证码的简单实现方法
Apr 22 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
thinkphp 框架数据库切换实现方法分析
May 18 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
一步一步学习PHP(3) php 函数
2010/02/15 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
jquery 笔记 事件
2011/11/02 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
Python 文件操作实现代码
2009/10/07 Python
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
深入理解python中的select模块
2017/04/23 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
python 调用Google翻译接口的方法
2020/12/09 Python
草莓网官网:StrawberryNET
2019/08/21 全球购物
个人求职信范文分享
2013/12/13 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
销售团队激励口号
2014/06/06 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
学校中秋节活动总结
2015/03/23 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
Redis 哨兵机制及配置实现
2022/03/25 Redis
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle