/*
单个文件上传 功能
上传文件
配置允许的后缀
配置允许的大小 获取文件后缀
判断文件的后缀
报错
*/
class UpTool{
protected $allowExt = 'jpg,jpeg,gif,bmp,png';
protected $maxSize = 1; //1M ,以M为单位 protected $file = null; //准备储存上传文件信息
protected $errno = 0; //错误代码
protected $error = array(
0=>'无错',
1=>'上传文件大小超出系统限制',
2=>'上传文件的大小超出网页表单限制',
3=>'文件只有部分被上传',
4=>'没有文件被上传',
6=>'找不到临时文件夹',
7=>'文件写入失败',
8=>'不允许的文件后缀',
9=>'文件大小超出类的允许范围',
10=>'创建目录失败',
11=>'文件移动失败'
); /*
上传
*/
public function up($key) {
if (!isset($_FILES[$key])) {
return false;
}
$f = $_FILES[$key]; //检验上传是否成功
if ($f['error']) {
$this->errno = $f['error'];
return false;
} //获取后缀
$ext = $this->getExt($f['name']);
//检查后缀
if (!$this->isAllowExt($ext)) {
$this->errno = 8;
return false;
}
//检查大小
if (!$this->isAllowSize($f['size'])) {
$this->errno = 9;
return false;
}
//创建目录
$dir = $this->mk_dir();
if ($dir == false) {
$this->errno = 10;
return fasle;
} //生成随机文件名
$newname = $this->randName() . '.' .$ext;
//$dir = $dir . '/' .$newname;
//移动
if(!move_uploaded_file($f['tmp_name'], $dir . '/' .$newname)) {
$this->errno = 11;
return false;
}
return true;//str_replace(ROOT, '', $dir);
} public function getErr(){
return $this->error[$this->errno];
} /*
parm string $exts 允许的后缀
自动添加 允许的后缀,和文件的大小
*/
public function setExt($exts) {
$this->allowExt = $exts;
}
public function setSize($num) {
$this->maxSize = $num;
} /*
string $file
return string $ext 后缀
*/ protected function getExt($file) {
$tmp = explode('.', $file);
return end($tmp);
}
/*
string $ext 文件后缀
return bool
防止大小写的问题
*/
protected function isAllowExt($ext) {
return in_array(strtolower($ext), explode(',', strtolower($this->allowExt))) ; } /*
检查文件的大小
*/
protected function isAllowSize($size) {
return $size <= $this->maxSize *1024*1024;
}
//按日期创建目录的方法
protected function mk_dir() {
$dir = 'images/' . date('Ym/d');
if(is_dir($dir) || mkdir($dir,0777,true)) {
return $dir;
} else {
return false;
}
} /*
生成随机文件名
*/
protected function randName($length = 6) {
$str = 'abcdefghijkmnpqrstuvwxyz23456789';
return substr(str_shuffle($str),0,$length);
} }

form 表单

<form action="up.php" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username" /> <br/>
头像: <input type="file" name="pic" />
<input type="submit" value="提交" />
</form>

另起页面调用

require('./UpTool.class.php');  

$uptool = new UpTool();
$uptool->setExt('rar,doc');
$uptool->setSize(1); if ($uptool->up('pic')) {
echo '上传成功';
} else {
echo '失败';
echo $uptool->getErr();
}

php之文件上传类代码的更多相关文章

  1. ASP.NET 文件上传类 简单好用

    调用: UploadFile uf = new UploadFile(); /*可选参数*/ uf.SetIsUseOldFileName(true);//是否使用原始文件名作为新文件的文件名(默认: ...

  2. [上传下载] C#FileUp文件上传类 (转载)

    点击下载 FileUp.zip 主要功能如下 .把上传的文件转换为字节数组 .流转化为字节数组 .上传文件根据FileUpload控件上传 .把Byte流上传到指定目录并保存为文件 看下面代码吧 // ...

  3. PHP 文件上传类

    FileUpload.;                $];                $_newname = date(,). :                             To ...

  4. php 文件上传类 实例分享

    最近在研究php上传的内容,找到一个不错的php上传类,分享下. <?php /** * 文件上传类 * class: uploadFile * edit: www.jbxue.com */ c ...

  5. ThinkPHP文件上传类

    TP框架自带文件上传类使用: 类文件在ThinkPHP/Library/Think/默认在目录下 public function upload(){ $upload = new \Think\Uplo ...

  6. C#文件上传类,文件流,字节数组等

    using System;using System.IO;using System.Web;using System.Web.UI.WebControls; namespace DotNet.Util ...

  7. Php文件上传类class.upload.php

    简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮助你快速的给自己的网站集成上传文件功能.不仅如此,此分类还有一些列的处理功能,可以对上传的文件或者本地的文件进行处 ...

  8. 自定义MVC框架之工具类-文件上传类

    截止目前已经改造了3个类: ubuntu:通过封装验证码类库一步步安装php的gd扩展 自定义MVC框架之工具类-分页类的封装 该文件上传类功能如下: 1,允许定制上传的文件类型,文件mime信息,文 ...

  9. php 文件上传类,功能相当齐全,留作开发中备用吧。

    收藏一个经典好用的php 文件上传类,功能相当齐全,留作开发中备用吧. 好东西,大家都喜欢,才是真的好,哈哈!!! <?php  /**   * 文件上传类   */  class upload ...

随机推荐

  1. poj 1789 Truck History【最小生成树prime】

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21518   Accepted: 8367 De ...

  2. 用函数生成select选择框

    // 生成 html select option 标签 function build_options($options, $opt='',$k='') { $frags = array(); if ( ...

  3. AlphaDict 软件公布

    今天 Release 了 1.1. 主要是移植到了 window 平台, 无须安装,直接执行. 对 UI 又一次进行了设计,应该比之前好看多了. 加入了 生词本 功能,方便 学习外语. ------- ...

  4. 网络子系统43_ip选项预处理

    //选项格式: // 1.type中指示该选项在分片时是否需要被拷贝 // 2.ptr从1算起,1为type的位置 // 3.len不包括type字段,其余都包括(len,ptr,选项内容) //ty ...

  5. Amoeba实现mysql主从读写分离

    Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...

  6. TraceGL监控Node.js应用或者浏览器JavaScript代码

    https://github.com/traceglMPL/tracegl TraceGL能够监控Node.js应用或者浏览器JavaScript代码的运行过程和细节.可视化的用户界面也很友好

  7. Bash算术计算

    1:$(( )) 2:$[ ] 3:`expr $x + $y` 4:bc命令 #!/bin/bash x= y= echo $(( x + y )) echo $[ $x + $y ] echo ` ...

  8. 关于ADO.NET的一些知识整理

    ADO.NET是什么 虽然我们都知道ADO.NET是对数据库的操作,但是要真的说出ADO.NET的具体含义还不是很容易. ADO.NET是ActiveX Data Objects的缩写,它是一个COM ...

  9. JavaScript正则验证数字、英文、电话号、身份证号、邮箱地址、链接地址等

    验证是否为数字:/^[0-9]*$/验证是否为汉字:/^[\u4e00-\u9fa5],{0,}$/验证x-y位的数字:/^\d{x,y}$/验证由26个英文字母组成的字符串:/^[A-Za-z]+$ ...

  10. (转)PHP下编码转换函数mb_convert_encoding与iconv的使用说明

    之--http://www.jb51.net/article/21451.htm mb_convert_encoding这个函数是用来转换编码的.原来一直对程序编码这一概念不理解,不过现在好像有点开窍 ...