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. Adding a WebPart to a SharePoint 2013 Master Page 分类: Sharepoint 2015-07-08 01:03 7人阅读 评论(0) 收藏

    On SharePoint 2013 you can not add the Web Parts to the master page the same way of 2010. Please use ...

  2. Go语言实现简单的一个静态WEB服务器

    package main import ( "net/http" ) func main() { http.Handle("/", http.FileServe ...

  3. PostSharp-4.3.22安装包_KeyGen发布

    PostSharp-4.3.22安装包_KeyGen发布 请低调使用. 下载相关 PostSharp-4.3.22安装包_KeyGen.part1.rar PostSharp-4.3.22安装包_Ke ...

  4. js操作table

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  5. 排序系列 之 折半插入排序算法 —— Java实现

    基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...

  6. MySQL数据库5 - 插入数据,修改数据,删除数据

    一.插入数据 1. 所有列都插入值 INSERT [INTO] TABLE_NAME VALUES(V1,V2....Vn); 特点:列值同数,列值同序 eg: insert into users v ...

  7. Socket通信代码(原理)

    1.运行环境:NetBeans IDE 6.0.1 2.说明:先运行服务器端,再运行客户端. 3.服务器端代码: 新建java类Test import java.net.*; import java. ...

  8. Tips for VNCServer config

    Tips for VNCServer After the ClearCase server reboot by Jingwei, my vncserver background process is ...

  9. Guess Number Higher or Lower II--困惑

    今天,试着做了一下LeetCode OJ上面的第375道题:Guess Number Higher or Lower II 原题链接:https://leetcode.com/problems/gue ...

  10. ubuntu下安装配置OpenCV

    Cmake的安装 我用的是ubuntu-software自动下载安装的. Ubuntu 下安装 OpenCV 首先下载安装相关包,然后下载OpenCV 系统:ubuntu16.04 OpenCV:2. ...