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转成EXE文件
Oct 09 PHP
我的论坛源代码(七)
Oct 09 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
php验证session无效的解决方法
Nov 04 PHP
Codeigniter实现发送带附件的邮件
Mar 19 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
php TP5框架生成二维码链接
Apr 01 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生成静态页面的简单示例
2014/04/17 PHP
PHP常用技巧汇总
2016/03/04 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
JS解析XML实例分析
2015/01/30 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
js简单实现网页换肤功能
2017/04/07 Javascript
vue中appear的用法
2017/08/17 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
Python中 Lambda表达式全面解析
2016/11/28 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
SQL面试题
2013/04/30 面试题
实习自我评价怎么写
2013/12/02 职场文书
九年级科学教学反思
2014/01/29 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
作风建设剖析材料
2014/10/06 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
Vue的过滤器你真了解吗
2022/02/24 Vue.js