学习地址:http://www.imooc.com/video/2473

<?php
header("content-type:text/html;charset=utf-8"); /**
* 生成唯一字符串
* @return string
*/
function getUniName(){
return md5(uniqid(microtime(true),true));
} /**
* 得到文件的扩展名
* @param string $filename
* @return string
*/
function getExt($filename){
return strtolower(end(explode(".",$filename)));
} //$_FILES
$filename=$_FILES['myFile']['name'];
$type=$_FILES['myFile']['type'];
$tmp_name=$_FILES['myFile']['tmp_name'];
$error=$_FILES['myFile']['error'];
$size=$_FILES['myFile']['size'];
$allowExt=array("gif","jpeg","jpg","png","wbmp");
$maxSize=1512000;
$imgFlag=true;
//判断下错误信息
if($error==UPLOAD_ERR_OK){
$ext=getExt($filename);
//限制上传文件类型
if(!in_array($ext,$allowExt)){
exit ("非法文件类型");
}
if($size>$maxSize){
exit ("文件过大");
}
if($imgFlag){
//如何验证图片是否是一个真正的图片类型
//getimagesize($filename):验证文件是否是图片类型
$info=getimagesize($tmp_name);
//var_dump($info);exit;
if(!$info){
exit("不是真正的图片类型");
}
}
//需要判断下文件是否是通过HTTP POST方式上传上来的
//is_uploaded_file($tmp_name): $filename=getUniName().".".$ext;
$path="uploads";
if(!file_exists($path)){
mkdir($path,0777,true);
}
$destination=$path."/".$filename;
if(is_uploaded_file($tmp_name)){
if(move_uploaded_file($tmp_name, $destination)){
$mes="文件上传成功";
}else{
$mes="文件移动失败";
}
}else{
$mes="文件不是通过HTTP POST方式上传上来的";
}
}else{
switch($error){
case 1:
$mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE
break;
case 2:
$mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZE
break;
case 3:
$mes="文件部分被上传";//UPLOAD_ERR_PARTIAL
break;
case 4:
$mes="没有文件被上传";//UPLOAD_ERR_NO_FILE
break;
case 6:
$mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR
break;
case 7:
$mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;
break;
case 8:
$mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION
break; }
}
echo $mes;
//服务器端进行的配置
//1》file_uploads = On,支持通过HTTP POST方式上传文件
//2》;upload_tmp_dir =临时文件保存目录
//3》upload_max_filesize = 2M默认值是2M,上传的最大大小2M
//4》post_max_size = 8M,表单以POST方式发送数据的最大值,默认8M
//客户端进行配置,form表单必须是post,也必须有enctype="multipart/form-data"
// <form action="doAction1.php" method="post" enctype="multipart/form-data">
// 请选择上传文件:<input type="file" name="myFile" /><br/>
// <input type="submit" value="上传"/>
// </form>

函数封装版本

header("content-type:text/html;charset=utf-8");

/**
* 生成唯一字符串
* @return string
*/
function getUniName(){
return md5(uniqid(microtime(true),true));
} /**
* 得到文件的扩展名
* @param string $filename
* @return string
*/
function getExt($filename){
return strtolower(end(explode(".",$filename)));
} function uploadFile($fileInfo,$path="uploads",$allowExt=array("gif","jpeg","jpg","png","wbmp"),$maxSize=1512000,$imgFlag=true){
//判断下错误信息
if($fileInfo['error']==UPLOAD_ERR_OK){
$ext=getExt($fileInfo['name']);
//限制上传文件类型
if(!in_array($ext,$allowExt)){
exit ("非法文件类型");
}
if($fileInfo['size']>$maxSize){
exit ("文件过大");
}
if($imgFlag){
//如何验证图片是否是一个真正的图片类型
//getimagesize($filename):验证文件是否是图片类型
$info=getimagesize($fileInfo['tmp_name']);
//var_dump($info);exit;
if(!$info){
exit("不是真正的图片类型");
}
}
$filename=getUniName().".".$ext;
if(!file_exists($path)){
mkdir($path,0777,true);
}
$destination=$path."/".$filename;
if(is_uploaded_file($fileInfo['tmp_name'])){
if(move_uploaded_file($fileInfo['tmp_name'], $destination)){
$mes="文件上传成功";
}else{
$mes="文件移动失败";
}
}else{
$mes="文件不是通过HTTP POST方式上传上来的";
}
}else{
switch($fileInfo['error']){
case 1:
$mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE
break;
case 2:
$mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZE
break;
case 3:
$mes="文件部分被上传";//UPLOAD_ERR_PARTIAL
break;
case 4:
$mes="没有文件被上传";//UPLOAD_ERR_NO_FILE
break;
case 6:
$mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR
break;
case 7:
$mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;
break;
case 8:
$mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION
break;
}
}
return $mes;
}

使用方法:

header("content-type:text/html;charset=utf-8");
$fileInfo=$_FILES['myFile'];
$info=uploadFile($fileInfo);
echo $info;

单文件多上传

#html代码示例
<form action="doAction2.php" method="post" enctype="multipart/form-data"> 请选择上传文件:<input type="file" name="myFile1" /><br/>
请选择上传文件:<input type="file" name="myFile2" /><br/>
请选择上传文件:<input type="file" name="myFile3" /><br/>
<input type="submit" value="上传"/>
</form> #你需要先引用上面的封装几个函数的文件
foreach($_FILES as $val){
$mes=uploadFile($val);
echo $mes;
}

单文件、数组文件上传封装

<?php 

header("content-type:text/html;charset=utf-8");

/**
* 生成唯一字符串
* @return string
*/
function getUniName(){
return md5(uniqid(microtime(true),true));
} /**
* 得到文件的扩展名
* @param string $filename
* @return string
*/
function getExt($filename){
return strtolower(end(explode(".",$filename)));
} /**
* 构建上传文件信息
* @return array
*/
function buildInfo(){
if(!$_FILES){
return ;
}
$i=0;
foreach($_FILES as $v){
//单文件,因为如果是多文件数组上传的话这个值会是一个数组类型
if(is_string($v['name'])){
$files[$i]=$v;
$i++;
}else{
//多文件
foreach($v['name'] as $key=>$val){
$files[$i]['name']=$val;
$files[$i]['size']=$v['size'][$key];
$files[$i]['tmp_name']=$v['tmp_name'][$key];
$files[$i]['error']=$v['error'][$key];
$files[$i]['type']=$v['type'][$key];
$i++;
}
}
}
return $files;
} function uploadFile($path="uploads",$allowExt=array("gif","jpeg","png","jpg","wbmp"),$maxSize=2097152,$imgFlag=true){
if(!file_exists($path)){
mkdir($path,0777,true);
}
$i=0;
$files=buildInfo();
if(!($files&&is_array($files))){
return ;
}
foreach($files as $file){
if($file['error']===UPLOAD_ERR_OK){
$ext=getExt($file['name']);
//检测文件的扩展名
if(!in_array($ext,$allowExt)){
exit("非法文件类型");
}
//校验是否是一个真正的图片类型
if($imgFlag){
if(!getimagesize($file['tmp_name'])){
exit("不是真正的图片类型");
}
}
//上传文件的大小
if($file['size']>$maxSize){
exit("上传文件过大");
}
if(!is_uploaded_file($file['tmp_name'])){
exit("不是通过HTTP POST方式上传上来的");
}
$filename=getUniName().".".$ext;
$destination=$path."/".$filename;
if(move_uploaded_file($file['tmp_name'], $destination)){
$file['name']=$filename;
unset($file['tmp_name'],$file['size'],$file['type']);
$uploadedFiles[$i]=$file;
$i++;
}
}else{
switch($file['error']){
case 1:
$mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE
break;
case 2:
$mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZE
break;
case 3:
$mes="文件部分被上传";//UPLOAD_ERR_PARTIAL
break;
case 4:
$mes="没有文件被上传1111";//UPLOAD_ERR_NO_FILE
break;
case 6:
$mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR
break;
case 7:
$mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;
break;
case 8:
$mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION
break;
}
echo $mes;
}
}
return $uploadedFiles;
}

使用方法

#html
<form action="doAction3.php" method="post" enctype="multipart/form-data"> 请选择上传文件:<input type="file" name="myFile[]" /><br/>
请选择上传文件:<input type="file" name="myFile[]" /><br/>
请选择上传文件:<input type="file" name="myFile[]" /><br/>
请选择上传文件:<input type="file" name="myFile1" /><br/>
请选择上传文件:<input type="file" name="myFile2" /><br/>
<input type="submit" value="上传"/>
</form> #你需要先引用上面的封装几个函数的文件
foreach($_FILES as $val){
$mes=uploadFile($val);
echo $mes;
}

php 上传图片的更多相关文章

  1. 博客使用BOS上传图片

    1.博客平台的选定 从大学开始做个人主页算起,最开始是使用html,CSSS写简单的页面,后面大学毕业之后接触到了WordPress,就开始用WordPress搭建网站.现在还维护着一个农村网站.ht ...

  2. nodejs利用ajax实现网页无刷新上传图片

    nodejs利用ajax实现网页无刷新上传图片 标签(空格分隔): nodejs 通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转. 利用ajax技术和FormDat ...

  3. -Android -线程池 批量上传图片 -附php接收代码

    (出处:http://www.cnblogs.com/linguanh/) 目录: 1,前序 2,类特点 3,用法 4,java代码 5,php代码 1,前序 还是源于重构,看着之前为赶时间写着的碎片 ...

  4. iOS 原生HTTP POST请求上传图片

    今天项目里做一个上传图片等个人信息的时候,使用了第三方AFNetworking - (AFHTTPRequestOperation *)POST:(NSString *)URLString param ...

  5. 大朋展翅 html5上传图片(三)一解决部分手机拍相册批量上传图片转向问题

    在经过前面的改进之后本来以为已经没有问题了,但经过我们神通广大的测试的测试,发现相册中的图片在上传时也会发生转向问题.既然前面都解决了拍照转向的问题,那么相册中图片的上传也容易解决.修改一下需要旋转图 ...

  6. html5上传图片(一)一跨域上传

    最近开发一个上传图片的模块,传图片的接口不支持跨域上传,并且只支持单张上传,而我们的产品要求要实现多张上传.我搞了一个代理页面,先将图片传到代理页面,然后再通过代理页面传到上传图片接口.虽然这种方式经 ...

  7. h5上传图片及预览

    第一次做图片上传,记录一些问题. 1,图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址.而网页上的每一个图片,都是需要消耗一个http请求下载而来的,使用base ...

  8. .NET WebAPI 实现图片上传(包括附带参数上传图片)

    博主的项目,客户端是APP,考虑到以后也可能会应用到微信端.网站等,图片上传方法就需要兼容多端,并且以目前的设计,不允许非登录用户上传图片,就得在上传时解决附带参数上传图片的问题. 先来看看后台方法( ...

  9. java 上传图片

    1.导入smartupload.jar包 ,添加uploadIMG.jsp,upfileIMG.jsp. 2.需要在项目下面建立一个保存文件的文件夹pic或者upload 3.在调用的地方调用子框架u ...

  10. jsp上传图片实时显示

    jsp代码 <div class="form-group" id="caseIma"> <label class="control- ...

随机推荐

  1. excel复制+粘贴,怎样让公式里的参数不自动变化?

    例如,某一单元格内容为:=A1+A2 我把它复制+粘贴到其他地方,就自动变成了:=B1+B2 怎样让它不变化,仍保持=A1+A2 ?? 答: Excel一般使用相对地址来引用单元格的位置,当把一个含有 ...

  2. Java for LeetCode 058 Length of Last Word

    Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...

  3. springMVC controller间跳转、重定向、传参

    转载自:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/   1. 需求背景     需求:spring MVC框架co ...

  4. 【python】

    1.修改系统默认编码: reload(sys) sys.setdefaultencoding('utf-8') 为什么在sys.setdefaultencoding之前要写reload(sys) 因为 ...

  5. [产品相关] A/B测试终极指南(翻译)

    转载地址: http://blog.sina.com.cn/s/blog_9149268d0100zrx7.html 还记得以前导师说看了英文的文章就把它翻译一下吧,这样会对文章更好地理解,也会有更深 ...

  6. Hudson可扩展持续集成引擎

    参考文章:http://blog.csdn.net/dazhi_100/article/details/11629133 极限编程中一项建议实践便是持续集成,持续集成是指在开发阶段,对项目进行持续性自 ...

  7. EF架构~为EF DbContext生成的实体添加注释(T5模板应用)(转载)

    转载地址:http://www.newlifex.com/showtopic-1072.aspx 最近新项目要用Entity Framework 6.x,但是我发现从数据库生成模型时没有生成字段的注释 ...

  8. Java Applet与Java Application的区别

    转自:http://www.educity.cn/java/500609.html 在Java语言中,能够独立运行的程序称为Java应用程序(Application).Java语言还有另外一种程序-- ...

  9. Android 颜色Color(转)

    摘自:http://blog.sina.com.cn/s/blog_6f3ff2c90100t2oa.html Android中使用4个数字来表示颜色,分别是alpha.红(red).绿(green) ...

  10. PL/SQL Developer 连接新数据库

    1 2 3