类文件:

<?php

class upload{

    protected $fileName;
protected $uploadPath;
protected $maxSize;
protected $extarray;
protected $checkimg;
protected $mimeType;
protected $fileInfo;
protected $error;
protected $ext; public function __construct($fileName='filename',$uploadPath='uploads',$maxSize=2097152,$checkimg=true,$extarray=['jpeg','jpg','png','gif'],$mimeType=['image/jpeg','image/png','image/gif']){
$this->fileName=$fileName;
$this->uploadPath=$uploadPath;
$this->maxSize=$maxSize;
$this->checkimg=$checkimg;
$this->extarray=$extarray;
$this->mimeType=$mimeType;
$this->fileInfo=$_FILES[$this->fileName]; } //判断错误号
protected function checkError(){
if(!is_null($this->fileInfo)){
if($this->fileInfo['error']>0){
switch ($this->fileInfo['error']) {
case 1:
$this->error='文件超过了PHP配置中文件的大小';
break; case 2:
$this->error='文件超过了表单中的限制';
break;
case 3:
$this->error='文件部分被上传';
break;
case 4:
$this->error='没有选择上传文件';
break;
case 6:
$this->error='没有找到临时目录';
break;
case 7:
$this->error='文件不可写';
break;
case 8:
$this->error='由于PHP的扩展程序中断文件上传';
break; }
return false;
}
return true;
}
$this->error='文件上传出错';
return false; } //判断文件大小
protected function checkSize(){
if($this->fileInfo['size']>$this->maxSize){
$this->error='文件过大';
return false;
}
return true; } //判断文件类型
protected function getExt(){
$this->ext=strtolower(pathinfo($this->fileInfo['name'],PATHINFO_EXTENSION));
return $this->ext;
}
protected function checkExt(){
$this->getExt();
if(!in_array($this->ext, $this->extarray)){
$this->error='文件格式不正确,允许的格式为:jpeg,jpg,png,gif';
return false; }
return true;
} //判断mime类型
protected function checkMime(){
if(!in_array($this->fileInfo['type'],$this->mimeType)){
$this->error='不允许的文件类型';
return false;
}
return true;
} //判断是否是真正的图片 protected function checkImage(){
if ($this->checkimg) {
if(@!getimagesize($this->fileInfo['tmp_name'])){
$this->error='不是真正的图片';
return false;
}
return true;
# code...
}
} //判断是否是通过HTTP post方式上传
protected function checkHttppost(){
if(!is_uploaded_file($this->fileInfo['tmp_name'])){
$this->error='不是通过HTTP post方式上传';
return false;
}
return true;
} //显示错误
protected function showError(){
exit('<span style="color:red">'.$this->error.'</span>');
} //检查上传目录并创建
protected function checkPath(){
if(!file_exists($this->uploadPath)){
mkdir($this->uploadPath,0777,true);
}
} //创建唯一的文件名
protected function getName(){
return md5(uniqid(microtime(true),true)).'.'.$this->ext; } //上传文件
public function uploadFile(){
if ($this->checkError()&&$this->checkSize()&&$this->checkExt()&&$this->checkMime()/*&&$this->checkImage()*/&&$this->checkHttppost()) { $this->checkPath();
$this->uniName=$this->getName();
$this->destination=$this->uploadPath.'/'.$this->uniName; if(@move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)){ return $this->destination;
}else{
$this->error='文件移动失败';
$this->showError();
}
# code...
}else{
$this->showError();
}
}
}

表单:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题</title>
</head>
<body>
<form action="doaction.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
<input type="file" name="filename" accept="image/jpeg"><br/><br/>
<input type="submit" value="上传">
</form>
</body>
</html>

执行文件:

<?php
require('uploads.class.php'); $upload=new upload('filename','uploads',$maxSize=2097152,$checkimg=false); $dest=$upload->uploadFile(); echo $dest;

PHP上传文件类 代码练习的更多相关文章

  1. 【收集】JAVA多文件 上传文件接口代码 -兼容app

    原文:http://www.verydemo.com/demo_c143_i23854.html 我们在 multifile 中可以很容易的发现如何使用,这里就简单说说了,首先在页面上我们需要有这样几 ...

  2. C# 通用上传文件类

    1.Upfile.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="U ...

  3. PHP - FTP上传文件类

    /** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) * 时间:2006/5/9 * 作者:欣然随风 * QQ:276624915 */ class class_ftp { publi ...

  4. PHP上传文件功代码练习(单文件)

    前端: <html> <head><title>upload file</title> <meta http-equiv="Conten ...

  5. asp.net 下载任意格式文件 上传文件后台代码

    思路:将文件转化为流,输出到页面上的iframe中去 //下载附件逻辑 object DownLoad(NameValueCollection nv) { int attachId = nv[&quo ...

  6. 上传文件复用代码【fileUpload】

    这是使用了FileUpload上传组件的,解决了中文乱码问题了,并且删除了临时文件的. 使用了一个Book对象做示范 private Book uploadData(HttpServletReques ...

  7. SpringMVC,SpringBoot上传文件简洁代码

    @RequestMapping("/updateAvatar.html") public String updateHeadUrl(MultipartFile avatar, Mo ...

  8. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  9. iOS上传文件代码,自定义组装body

    以下代码为上传文件所用代码,简单方便,搞了好久,终于知道这么简单的方式来上传. 其它类库也就是把这几句代码封装的乱七八糟得,让你老久搞不懂原理.不就是在body上面加点字符串,body下面加点字符串, ...

随机推荐

  1. python访问web的利器:urllib2

    使用Python访问网页主要有三种方式: urllib, urllib2, httpliburllib比较简单,功能相对也比较弱,httplib简单强大,但好像不支持session1. 最简单的页面访 ...

  2. LOJ #6277. 数列分块入门 1-分块(区间加法、单点查询)

    #6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  3. thinkphp之自动完成

    1.自动完成 自动完成是ThinkPHP提供用来完成数据自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理.  因此,在ThinkPHP使用create方法来创建数据对象是 ...

  4. 一个菜鸟正在用SSH写一个论坛(1)

    嗯..搞定了注册和登录,说明我的SSH整合已经没有问题了,那么我就继续折腾了. 我的目的是用SSH框架写一个论坛(当然是功能最简单的那种),搞定了整合之后我打算先做出一些基本的功能,于是我就先简单的设 ...

  5. sg函数总结

    http://blog.csdn.net/luomingjun12315/article/details/45555495 这一段时间写的题和我接下来要展示的一些概念都来自这里↑. 必胜点和必败点的概 ...

  6. 【模拟】Flo's Restaurant

    [poj2424]Flo's Restaurant Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2960   Accept ...

  7. [CODECHEF]TREECNT2

    题意:一棵带边权的树,边权可单边修改,问初始时和每次修改后有多少条路径$\gcd=1$ 首先考虑用反演求答案,设$f(n)$为路径$\gcd=n$的路径条数,$g(n)$为路径$\gcd$是$n$倍数 ...

  8. 【二分】Codeforces Round #404 (Div. 2) C. Anton and Fairy Tale

    当m>=n时,显然答案是n: 若m<n,在第m天之后,每天粮仓减少的量会形成等差数列,只需要二分到底在第几天,粮仓第一次下降到0即可. 若直接解不等式,可能会有误差,需要在答案旁边扫一下. ...

  9. 20162303 实验一 Java开发环境的熟悉(Linux + Eclipse)

    北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级: 1623 姓名: 石亚鑫 学号:20162303 成绩: 2分 指导教师:娄嘉鹏 王志强 实验日期:3月17日 实验密 ...

  10. Android工具:Hierarchy Viewer

    Hierarchy Viewer 用途: 即可以用来优化自己的布局,也可以用来参考别人优秀的布局 打开方式: 运行工程,然后在\android-sdk-windows\tools目录下双击hierar ...