1.客户端页面

<!---客户端的配置
    1.表单页面
    2.表单发送方式为post
    3.表单form中添加enctype="multipart/form-data"
 ------->
<body>
 <form action="doaction.php" method="post" enctype="multipart/form-data">
 <input type="file" name="myfile">
 <input type="submit" value="上传">
 </form>
</body>

2.处理页面doaction

<?php
//$_FILES:文件上传变量
print_r($_FILES);
//$_FILES:保存着上传文件的信息
/*1.name:上传文件的名称
2.type:上传文件的MIME类型
3.tmp_name:上传到服务器上的临时文件名
4.size:上传文件的大小
5.error:上传文件的错误号*/
$filename=$_FILES['myfile']['name'];
$type=$_FILES['myfile']['type'];
$tmp_name=$_FILES['myfile']['tmp_name'];
$size=$_FILES['myfile']['size'];
$error=$_FILES['myfile']['error'];

//将服务器上的临时文件移动到指定文件夹
//1.move_uploaded_file(临时文件名,‘文件夹名’.$filename);   将服务器上的临时文件移动到指定文件夹,叫什么名字($filename),移动成功返回true,移动失败返回false。
//move_uploaded_file($tmp_name,"wenjian/".$filename);
//2.copy("临时文件名","文件名".$filename)  将服务器上的临时文件拷贝到指定文件夹

//文件上传配置
/*file_uploads = on,支持HTTP上传
upload_tmp_dir=  ,临时文件保存的目录
upload_max_filesize=2M,允许上传文件的最大值
max_file_uploads=20,允许一次上传的最大文件数
post_max_size=8M,post方式发送数据的最大值
*/

3.错误信息处理

//上传文件失败时,判断一下错误号,只有为0或者UPLOAD_ERR_OK,才没有错误发生,上传成功
//下面是抓取错误
if($error==UPLOAD_ERR_OK)
{
    if(move_uploaded_file($tmp_name,"wenjian/".$filename))
    {
        echo "文件".$filename."上传成功";
        }else
        {
            echo "文件".$filename."上传失败";
            }

    }
    else
    {
        //匹配错误信息
        switch($error)
        {
            case 1:
            echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";
            break;
            case 2:
            echo "超过了表单MAX_FILE_SIZE的限制大小";
            break;
            case 3:
            echo "文件部分被上传";
            break;
            case 4:
            echo "没有选择上传文件";
            break;
            case 6:
            echo "没有找到临时目录";
            break;
            case 7:
            case 8:
            echo "系统错误";
            break;

            }

        }

?>

4.上传文件限制

//客户端限制:
//通过表单隐藏域限制上传文件的最大值
<input type="hidden" name="MAX_FILE_SIZE" value="字节数">

//通过accept属性限制上传文件的类型
<input type="file" name="myfile" accept="文件的MIME类型">

//服务器端限制

限制上传文件大小
限制上传文件类型
检测是否为真实图片类型
检测是否为HTTP POST方式上传
<?php
$fileinfo=$_FILES["myfile"];
$maxsize=2097152;         //写最大的字节数,自己算
$allowext=array('jpeg','jpg','pnd','gif','wbmp');   //定义一下允许的上传文件类型
//1.判断错误号
if($fileinfo['error']==0)
{
    //1.判断上传文件大小
if($fileinfo['size']>$maxsize)
    {
        exit('上传文件过大');
        }
 //2.判断上传文件类型是不是在规定类型中
$ext=strtolower(end(explode(',',$fileinfo['name'])));//截取上传文件扩展名
    if(!in_array($ext,$allowext))    // 判断上传文件的扩展名是不是在定义类型中
    {
         exit('非法文件类型');
        }
 //3.判断文件是否是通过HTTP POST方式上传上来的
if(!is_uploaded_file($fileinfo['tmp_name']))
    {
        exit('文件不是通过HTTP POST方式上传上来的');
        }

 //4.检测是否为真实的图片类型,而不是认为改动的
$flag=true;
    if($flag)
    {
        if(!getimagesize($fileinfo['tmp_name']))
        {
            echo "不是真实的图片类型";
            }
        }

    $path='uploads';  //服务器上存储文件的文件名
//5.判断服务器上存储的文件夹在不在
if(!file_exists($path))
    {
        mkdir($path,0777,true);//不存在就创建一个目录
        chmod($path,0777);//加一个权限

        }

  //6.确保文件名唯一,防止重名产生覆盖
$uniname=md5(uniqid(microtime(true),true)).'.'.$ext;   //通过MD5加密等措施给文件名取名

    $destination=$path.'/'.$uniname;
    if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //上传文件
    {
        echo "文件上传成功";
        }else
        {
            echo "文件上传失败";
            }

    }else
    {

//匹配错误信息
   switch($error)
        {
            case 1:
            echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";
            break;
            case 2:
            echo "超过了表单MAX_FILE_SIZE的限制大小";
            break;
            case 3:
            echo "文件部分被上传";
            break;
            case 4:
            echo "没有选择上传文件";
            break;
            case 6:
            echo "没有找到临时目录";
            break;
            case 7:
            case 8:
            echo "系统错误";
            break;

            }

        }

?>
 

php部分---文件上传:错误处理、 客户端和服务器端的限制的更多相关文章

  1. MVC文件上传09-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹,并在其中创建分类子文件夹

    为用户创建专属上传文件夹后,如果想在其中再创建分类子文件夹,该怎么做?可以在提交文件的视图中再添加一个隐藏域,并设置 name="uploadContext". 相关兄弟篇: MV ...

  2. MVC文件上传08-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹

    当需要为每个用户建立一个专属上传文件夹的时候,可以在提交文件的视图中添加一个隐藏域,并设置name="objectContext". 相关兄弟篇: MVC文件上传01-使用jque ...

  3. MVC文件上传07-使用客户端jQuery-File-Upload插件和服务端Backload组件裁剪上传图片

    本篇通过在配置文件中设置,对上传图片修剪后保存到指定文件夹. 相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小  MVC文件上传02-使用HttpPostedFileB ...

  4. MVC文件上传06-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义控制器上传多个文件

    当需要在控制器中处理除了文件的其他表单字段,执行控制器独有的业务逻辑......等等,这时候我们可以自定义控制器. MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证 ...

  5. MVC文件上传05-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义上传文件夹

    在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小  MVC文 ...

  6. php文件上传错误信息说明对照表

    php文件上传错误信息说明对照表: UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功UPLOAD_ERR_INI_SIZE:其值为1,上传的文件超过了php.ini中upload_ma ...

  7. MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传

    本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小  ...

  8. NetworkComms 文件上传下载和客户端自动升级(非开源)

    演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 淘宝地址:https://shop183793329.taobao.com 联系QQ号:3201175853 许可:购 ...

  9. PHP文件上传错误类型及说明

    从 PHP 4.2.0 开始,PHP 将随文件信息数组一起返回一个对应的错误代码.该代码可以在文件上传时生成的文件数组中的 error 字段中被找到,也就是 $_FILES['userfile'][' ...

  10. strut2 自己定义文件上传错误信息

    在文件上传过程中我们能够指定拦截器对文件类型.后缀名.大小进行设定,action中的配置: <interceptor-ref name="fileUpload"> &l ...

随机推荐

  1. as3延迟处理

    查找关键字“flashplayer 弹性跑道” 每当一帧即将走完,FlashPlayer就要做些总结性工作(一次性地汇总变化),把这一帧当中发生的变化拿出来展示(渲染)一下. 如果它处理的事情少,工作 ...

  2. 005-Scala数组操作实战详解

    005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...

  3. PHP store session with couchbase

    如何用couchbase存储session 有两种常见方式:1.采用memcache模式连接couchbase 只需两句修改: ini_set('session.save_handler', 'mem ...

  4. 利用QJSON将FDQuery转成JSON串

    服务器要支持Http协议,打算采用Http+JSON的方式来交换数据.一开始考虑使用superobject,因为以前使用比较多,比较熟悉. 代码如下: class function FDQueryTo ...

  5. Apache Flume 1.7.0 发布,日志服务器

    Apache Flume 1.7.0 发布了,Flume 是一个分布式.可靠和高可用的服务,用于收集.聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型.这是一个可靠.容错的服务. 本次更 ...

  6. Queue Reconstruction by Height

    Suppose you have a random list of people standing in a queue. Each person is described by a pair of ...

  7. NVelocity用法(转)

    每个人应该知道的NVelocity用法   NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来 ...

  8. APK签名是如何生成的

    零.前言本文以支付宝手机客户端为例,进行剖析到支付宝官网下载当前最新版本:8.0.1 (2014-01-28)文件名为 alipay_wap_main.apkMD5 摘要为 69820edb3cd13 ...

  9. RCurl网络数据抓取

    观察基础信息(服务器信息和提交给服务器的信息) d=debugGatherer()xpath="http://123.sogou.com/"url=getURL(xpath,deb ...

  10. HW职责 (Hardware Engineer)

    硬件设计就是根据产品经理的需求PRS(Product Requirement Specification),在COGS(Cost of Goods Sale)的要求下,利用目前业界成熟的芯片方案或者技 ...