PHP开发之简单上传功能的实现

第1章 PHP开发之简单上传功能的实现

1.1 PHP实现文件上传之上传原理及实现

file.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
    请选择需上传的文件:<br>
    <input type="file" name="myFile"><br>
    <input type="submit" value="上传">
</form>
</body>
</html>

upload.php:

<?php
header("content-type:text/html;charset=utf-8");
// 文件上传处理程序
// $_FILES文件上传变量
//echo "<pre>";
//var_dump($_FILES);
//exit();
//echo "</pre>";
// 处理上传文件
$filename = $_FILES['myFile']['name'];
$type = $_FILES['myFile']['type'];
$tmp_name = $_FILES['myFile']['tmp_name'];
$size = $_FILES['myFile']['size'];
$error = $_FILES['myFile']['error'];
// 将服务器上的临时文件移动到指定位置
move_uploaded_file($tmp_name, "upload/".$filename); // 文件夹要提前创建好
// 根据我们的错误查看或者直接报告给用户原因
if ($error == 0) {
    echo "上传成功!!";
} else {
    switch ($error) {
        case 1:
            echo "超过上传文件的最大值,请上传2M以下的文件!";
            break;
        case 2:
            echo "上传文件过多!";
            break;
        case 3:
            echo "文件未完成上传!";
            break;
        case 4:
            echo "未选择上传文件!";
            break;
        case 5:
            echo "上传文件为0!";
            break;
    }
}
?>

1.2 PHP实现文件上传之上传限制

file2.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传(客户端的限制)</title>
</head>
<body>
<form action="upload2.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="101321">
    请选择需要上传的文件:
    <input type="file" name="myFile" accept="image/jpeg,image/gif,text/html"><br>
    <input type="submit" value="上传">
</form>
</body>
</html>

upload2.php:

<?php
header('content-type:text/html;charset=utf-8');
// 接收文件,临时文件信息
$file_info = $_FILES['myFile']; // 降维操作
$file_name = $file_info['name'];
$tmp_name = $file_info['tmp_name'];
$size = $file_info['size'];
$type = $file_info['type'];
$error = $file_info['error'];

// 服务器端设定限制
$maxsize = 10485760; // 10M,10*1024*1024
$allowExt = array('jpeg','jpg','png','gif'); // 允许上传的文件类型(扩展名)
$ext = pathinfo($file_name, PATHINFO_EXTENSION); // 提取上传文件的扩展名
// 目标存放文件夹
$path = "uploads";
if (!file_exists($path)) {
    // 若目录不存在,则创建
    mkdir($path, 0777, true); // 创建目录
    chmod($path, 0777); // 修改文件模式,所有人都有读、写、执行权限
}
// 得到唯一的文件名,防止因文件名相同而产生覆盖
$uniName = md5(uniqid(microtime(true),true)).".$ext"; // md5加密,uniqid产生唯一id,microtime作前缀
// 目标存放文件地址
$destination = $path."/".$uniName;
// 当文件上传成功时,存入临时文件夹,服务器开始判断
if ($error===0) {
    if ($size > $maxsize) {
        exit("上传文件过大!");
    }
    if (!in_array($ext, $allowExt)) {
        exit("非法文件类型!");
    }
    if (!is_uploaded_file($tmp_name)) {
        exit("上传方式有误,请使用post方式!");
    }
    // 判断是否为真实图片(防止伪装成图片的病毒一类的
    if (!getimagesize($tmp_name)) {
        // getimagesize为true时返回数组,否则返回false
        exit("不是真正的图片类型!");
    }
    // move_uploaded_file($tmp_name, "upload/".$file_name);
    if (@move_uploaded_file($tmp_name, $destination)) {
        // @错误抑制符,不让用户看到警告
        echo "文件".$file_name."上传成功!";
    } else {
        echo "文件".$file_name."上传失败!";
    }
} else {
    switch ($error) {
        case 1:
            echo "超过了上传文件的最大值,请上传2M以下的文件!";
            break;
        case 2:
            echo "上传文件过多,一次仅支持上传文件不得超过20个!";
            break;
        case 3:
            echo "文件并未完全上传,请再次尝试!";
            break;
        case 4:
            echo "未选择上传文件!";
            break;
        case 7:
            echo "没有临时文件夹!";
            break;
    }
}

1.3 PHP实现文件上传之封装上传函数

file3.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传(客户端的限制)</title>
</head>
<body>
<form action="upload3.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="101321">
    请选择需要上传的文件:
    <input type="file" name="myFile" accept="image/jpeg,image/gif,text/html"><br>
    <input type="submit" value="上传">
</form>
</body>
</html>

file_upload.php:

<?php
function uploadFile ($file_info, $path, $maxsize, $allowExt) {
    header('content-type:text/html;charset=utf-8');
// 接收文件,临时文件信息
    $file_name = $file_info['name'];
    $tmp_name = $file_info['tmp_name'];
    $size = $file_info['size'];
    $type = $file_info['type'];
    $error = $file_info['error'];

// 服务器端设定限制
    $ext = pathinfo($file_name, PATHINFO_EXTENSION); // 提取上传文件的扩展名
// 目标存放文件夹
    if (!file_exists($path)) {
        // 若目录不存在,则创建
        mkdir($path, 0777, true); // 创建目录
        chmod($path, 0777); // 修改文件模式,所有人都有读、写、执行权限
    }
// 得到唯一的文件名,防止因文件名相同而产生覆盖
    $uniName = md5(uniqid(microtime(true),true)).".$ext"; // md5加密,uniqid产生唯一id,microtime作前缀
// 目标存放文件地址
    $destination = $path."/".$uniName;
// 当文件上传成功时,存入临时文件夹,服务器开始判断
    if ($error===0) {
        if ($size > $maxsize) {
            exit("上传文件过大!");
        }
        if (!in_array($ext, $allowExt)) {
            exit("非法文件类型!");
        }
        if (!is_uploaded_file($tmp_name)) {
            exit("上传方式有误,请使用post方式!");
        }
        // 判断是否为真实图片(防止伪装成图片的病毒一类的
        if (!getimagesize($tmp_name)) {
            // getimagesize为true时返回数组,否则返回false
            exit("不是真正的图片类型!");
        }
        // move_uploaded_file($tmp_name, "upload/".$file_name);
        if (@move_uploaded_file($tmp_name, $destination)) {
            // @错误抑制符,不让用户看到警告
            echo "文件".$file_name."上传成功!";
        } else {
            echo "文件".$file_name."上传失败!";
        }
    } else {
        switch ($error) {
            case 1:
                echo "超过了上传文件的最大值,请上传2M以下的文件!";
                break;
            case 2:
                echo "上传文件过多,一次仅支持上传文件不得超过20个!";
                break;
            case 3:
                echo "文件并未完全上传,请再次尝试!";
                break;
            case 4:
                echo "未选择上传文件!";
                break;
            case 7:
                echo "没有临时文件夹!";
                break;
        }
    }
    return $destination;
}

upload3.php:

<?php
header('content-type:text/html;charset=utf-8');
// 初始化相关变量
$file_info = $_FILES['myFile']; // 降维操作
$maxsize = 10485760; // 10M,10*1024*1024
$allowExt = array('jpeg','jpg','png','gif'); // 允许上传的文件类型(扩展名)
$path = "uploads";
// 引入文件上传函数
include_once 'file_upload.php';
uploadFile($file_info, $path, $maxsize, $allowExt);
?>

1.4 PHP实现文件上传之多文件上传

file4.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多文件上传</title>
</head>
<body>
<form action="upload4.php" method="post" enctype="multipart/form-data">
    请选择需上传的文件:<br>
    <input type="file" name="myFile1"><br>
    请选择需上传的文件:<br>
    <input type="file" name="myFile2"><br>
    请选择需上传的文件:<br>
    <input type="file" name="myFile3"><br>
    请选择需上传的文件:<br>
    <input type="file" name="myFile4"><br>
    请选择需上传的文件:<br>
    <input type="file" name="myFile5"><br>
    请选择需上传的文件:<br>
    <input type="file" name="myFile6"><br>
    <input type="submit" value="上传">
</form>
</body>
</html>

upload4.php:

<?php
header("content-type:text/html;charset=utf-8");
include_once 'file_upload.php';
// 初始化相关变量
$maxsize = 10485760; // 10M,10*1024*1024
$allowExt = array('jpeg','jpg','png','gif'); // 允许上传的文件类型(扩展名)
$path = "uploads";
foreach ($_FILES as $file_info) {
    $file[] = uploadFile($file_info, $path, $maxsize, $allowExt);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦里逆天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值