php 上传图片

时间:2022-03-02 05:47:13

学习地址: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上传图片&lpar;三&rpar;一解决部分手机拍相册批量上传图片转向问题

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

  6. html5上传图片&lpar;一&rpar;一跨域上传

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

  7. h5上传图片及预览

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

  8. &period;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. iOS代码汉字转拼音

    NSString *hanziText = @"今天天气不错"; if ([hanziText length]) { NSMutableString *ms = [[NSMutab ...

  2. 关于PS激活的一些感想(附上PS CC2015)

    最近跟着慕课学了一些前端的必备PS技能,就顺道把PS CC2015装上. 安装的过程没什么大问题,最要命的是激活环节!各种踩坑,但万万没想到,最终我还是成功的把它激活了. 本人所安装PS版本信息 好了 ...

  3. 解析php mysql 事务处理回滚操作&lpar;附实例&rpar;

    其实用PHP来处理mysql的事务回滚并不难,下面小编就详细的为大家介绍一下.相信大家看完之后都知道如何使用 很多新手在进行项目过程中,会碰到这样一种情况,如:论坛扣币项目中,用户支付论坛币的时候如果 ...

  4. Android性能测试工具 Emmagee

    Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具. 支持SDK:Android2.2以及以上版本 Emmagee功能介绍 1.检测当前时间被测应用占用的CP ...

  5. 关于PHP参数的引用传递和值传递

    如果希望编写一个名为increment()的函数来增加一个变量的值,我们可能会按如下方式编写这个函数: 这段代码是没有用的.下面测试代码的输出结果是“10”. $value 的内容没有被修改.这要归因 ...

  6. silverlight与wcf双向通讯 例子

    本文将建立一个silverlight与wcf双向通讯的简单实例,以下是详细步骤: 新建Silverlight应用程序,名称WCFtest.解决方案中添加WCF服务应用程序,名称WcfServiceTe ...

  7. PHP 脚本不报错

    场景 当运行PHP脚本,访问数组中不存在的key时,脚本不报错,如下: <?php $arr = [1,2,3]; // 不报错,返回null var_dump($arr['abc']); 解决 ...

  8. (转)Maven之自定义archetype生成项目骨架

    背景:最近在开发一个项目的基础构件,在以后项目的开发过程中可以直接使用该构件快速的生成项目骨架进行开发. 摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其 ...

  9. python的mutable变量与immutable变量

    python的变量分为mutable(可变的)和immutable类型. mutable:dict, list immutable:int , string , float ,tuple..

  10. HDU3501——欧拉函数裸题

    给整数N(1 ≤ N ≤ 1000000000),求小于N的与N不互素的所有正整数的和. 思路:1.用欧拉函数求出小于N的与N互素的正整数的个数: 2.若 p 与 N 互素,则 N-p 必与 N 互素 ...