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
PHP教程 变量定义
Oct 23 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
php常用字符串比较函数实例汇总
Nov 24 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
PHP微信红包生成代码分享
Oct 06 PHP
PHP中串行化用法示例
Nov 16 PHP
如何在PHP中读写文件
Sep 07 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
用PHP编写PDF文档生成器
2006/10/09 PHP
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
2013/12/08 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
单位在职证明范本
2014/01/09 职场文书
校庆活动方案
2014/03/31 职场文书
护士工作失误检讨书
2014/09/14 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
python 自动化偷懒的四个实用操作
2021/04/11 Python