[php] 实现文件上传

文件上传是php项目中经常遇到下,下面具体讲下文件上传功能。

 

HTML页面:(form 的 enctype="multipart/form-data" 这个属性不能少)

 

<!DOCTYPE html>
<html>
<head lang="zh-CN">
    <meta charset="UTF-8">
    <title>上传表单</title>
    <style type="text/css">
        button {
            width: 150px;
            height: 60px;
            border: 1px solid #008800;
            border-radius: 15px 50px;
            background: #006600;
            font-size: 16px;
            color: #fff;
            cursor: pointer;
        }
        button:focus {
            outline: none;
        }
        button:active {
            background: #008800;
        }
    </style>
</head>
<body>
<form action="handle.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <button type="button">上传</button>
</form>

<script type="text/javascript">

    // 上传验证
    var submit = document.querySelector('button');

    submit.addEventListener('click', function() {
        if(document.forms[0].file.value == '') {
            alert('没有选择上传文件!');
        } else {
            document.forms[0].submit();
        }
    }, false);

</script>
</body>
</html>

 

 

 

不懂的可能会这样实现:(只是一个简单的$_POST获取提交的内容而已,不可取)

 

header('Content-type: text/html;charset="utf-8"');
if($_POST) {
    // 定义文件上传类型
    $fileType = array('jpeg', 'png', 'bmp', 'gif', 'jpg');

    // 上传文件的后缀 end() 获取数组中的最后一个元素
    $suffix = end(explode('.', $_POST['file']));

    // 判断上传文件的后缀是否在规定的数组内
    if(in_array($suffix, $fileType)) {
        echo '上传的文件是:'.$_POST['file'].'<br>';
    } else {
        echo '上传的图片格式不正确,只支持jpeg png bmp gif jpg的图片格式,2秒后返回提交页面……';
        echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html"}, 2000);</script>';
    }
} else {
    echo '没有权限访问此页面,2秒后返回提交页面……';
    echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html"}, 2000);</script>';
}

 

 

 

实际上php中有个全局数组 $_FILES,专门实现文件上传用的,可以这样实现

 

header('Content-type: text/html;charset="utf-8"');
if(!empty($_FILES['file'])) {
    if($_FILES['file']['error'] > 0) {
        echo '上传出错,2秒后,返回提交页面!'.$_FILES['file']['error'];
        echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
    }
    // 预定义上传文件类型
    $fileType = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp');

    if(in_array($_FILES['file']['type'], $fileType)) {
        echo '你上传的文件是:'.$_FILES['file']['name'];
    } else {
        echo '上传类型有误,2秒后,返回提交页面!'.$_FILES['file']['type'];
        echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
    }

} else {
    echo '没有权限访问此页面,2秒后,返回提交页面!';
    echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
}

 

 

 

进一步实现上传文件保存

 

header('Content-type: text/html;charset="utf-8"');
if(!empty($_FILES['file'])) {
    if($_FILES['file']['error'] > 0) {
        echo '上传出错,2秒后,返回提交页面!'.$_FILES['file']['error'];
        echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
    }
    // 预定义上传文件类型
    $fileType = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp');

    if(in_array($_FILES['file']['type'], $fileType)) {
        if(file_exists('upload/'.$_FILES['file']['name'])) {
            echo $_FILES['file']['name'].'已经存在!';
        } else {
            // 建立目录
            mkdir('upload/');

            // 移动上传文件
            move_uploaded_file($_FILES['file']['tmp_name'], 'upload/'.$_FILES['file']['name']);
            echo '你上传的文件是:<br><img src="upload/'.$_FILES['file']['name'].'">';
        }
    } else {
        echo '上传类型有误,2秒后,返回提交页面!'.$_FILES['file']['type'];
        echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
    }

} else {
    echo '没有权限访问此页面,2秒后,返回提交页面!';
    echo '<script>setTimeout(function() {window.location.href="http://localhost/feiyou/fileUpload/form.html";}, 2000)</script>';
}

 

 

 

安全之判断上传文件是不是图片

 

function isImage($filename){
    $types = '.gif|.jpeg|.png|.bmp';//定义检查的图片类型
    if(file_exists($filename)){
        $info = getimagesize($filename);
        $ext = image_type_to_extension($info['2']);
        return stripos($types,$ext);
    }else{
        return false;
    }
}

if(isImage('test.jpg')!==false){
    echo '是图片';
}else{
    echo '不是';
}

 

 

 

getimagesize()

 

函数可用来取得 GIF、JPEG 及 PNG 三种 WWW 上图片的高与宽,不需要安装 GD library 就可以使用本函数。返回的数组有四个元素。返回数组的第一个元素 (索引值 0) 是图片的高度,单位是像素 (pixel)。第二个元素 (索引值 1) 是图片的宽度。第三个元素 (索引值 2) 是图片的文件格式,其值 1 为 GIF 格式、 2 为 JPEG/JPG 格式、3 为 PNG 格式。第四个元素 (索引值 3) 为图片的高与宽字符串,height=xxx width=yyy。可省略的参数 imageinfo 用来取得一些图片的相关信息

 

欢迎关注技术开发分享录:http://fenxianglu.cn/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天空还下着雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值