文件上传

简介: PHP单文件上传

文件上传

目的:用户可以通过浏览器,将本地文件上传到服务器

以单文件上传为例

sinFun.php

<?php
    /**
    *文件上传函数
    *
    *@param  string  $name  文件上传文件域的name值
    *@param  string  $dir  文件上传的指定保存路径
    *@param  array  $allow  文件上传允许的文件类型
    *
    *return  string  $filename  文件名  失败时,返回false
    *
    */

    function uploads($name,$dir,$allow=array('image/jpeg','image/png'))
    {
        //1.  判断文件上传错误
        if($_FILES[$name]['error'] > 0) {
            //文件上传出错
            switch($_FILES[$name]['error']) {
                case 1:
                    echo '上传的文件大小超过配置文件中的upload_max_filesize值';
                    break;
                case 2:
                    echo '上传文件的大小超过表单提交的最大值';
                    break;
                case 3:
                    echo '文件只有部分上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
                default :
                    echo '其它错误';
                    break;
            }
            return false;
        }

        //2.  判断你上传文件的类型是否是你想要的类型
        if(!in_array($_FILES[$name]['type'],$allow)) {
            echo '文件类型不符合';
            return false;
        }

        //3.  获取上传文件后缀名
        $suffix = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);

        //4.  起名字
        $filename = date('Ymd').uniqid().mt_rand(0,9999999).'.'.$suffix;

        //5.  判断保存的路径是否存在
        $save_path = rtrim($dir,'/');
        $save_path .= '/';
        $save_path .= date('Ymd');
        // var_dump($save_path);

        if(!file_exists($save_path)) {
            mkdir($save_path,777,true);
        }

        //拼接一个完整的保存路径
        $path = $save_path.'/'.$filename;
        // var_dump($path);die;
        //6  判断是否是HTTP  post方式上传
        if(!is_uploaded_file($_FILES[$name]['tmp_name'])) {
            echo '传输方式不对';
            return false;
        }

        //7  移动图片
        if(!move_uploaded_file($_FILES[$name]['tmp_name'], $path)) {
            echo '移动失败';
            return false;
        }

        //返回移动成功的文件名
        return $filename;

    }
 ?>

upload.html

<!DOCTYPE html>
<html lang="zh" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>单文件上传</title>
    </head>
    <body>
        <form  action="upload.php" method="post" enctype="multipart/form-data">
            上传头像:<input type="file" name="profile" />
            <button>提交</button>
        </form>
        <!--
            注意:
                1. 表单提交的方式必须是 post
                2. form表单中必须添加enctype属性
                3. input 中要设置name属性
        -->
    </body>
</html>

upload.php

<?php
        include("./sinFun.php");
        $result = uploads('profile','./upload',array('image/jpeg','image/png'));
        var_dump($result);
 ?>
相关文章
|
6月前
|
C#
C#文件上传
C#文件上传
28 0
|
7月前
|
JavaScript 前端开发 移动开发
浅谈文件上传
浅谈文件上传
浅谈文件上传
|
6月前
|
存储 移动开发 JavaScript
|
8月前
|
安全 应用服务中间件 PHP
[SUCTF 2019]CheckIn(文件上传)
[SUCTF 2019]CheckIn(文件上传)
66 0
|
10月前
|
前端开发 Java Apache
文件上传与下载
文件上传与下载 文件上传也称为upload,是指将本地图片、视频、音频等文件上传到服务器上,可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。 文件上传时,对页面的form表单有如下要求: method=“post” 采用post方式提交数据 enctype=“multipart/form-data” 采用multipart格式上传文件 type=“file” 使用input的file控件上传
|
11月前
|
开发框架 安全 JavaScript
文件上传利用总结
文件上传利用总结
246 0
|
JavaScript
你真的了解文件上传吗?
你真的了解文件上传吗?
|
数据安全/隐私保护 Windows

热门文章

最新文章