欢迎访问宙启技术站
智能推送

PHP文件上传函数:简化文件上传

发布时间:2023-06-25 10:40:47

PHP是一种流行的服务端脚本语言,它提供了丰富的函数和工具来完成不同类型的Web应用程序的开发,文件上传是其中的一种。文件上传通常需要解析上传文件的内容、验证文件类型和大小、处理上传文件并完成文件存储等过程,这些过程可以在PHP中通过一系列函数和方法完成。本文将介绍PHP文件上传函数并提供简化文件上传的实例。

PHP文件上传函数总结:

一、move_uploaded_file()函数

move_uploaded_file()是PHP中一个常用的文件上传函数,它可以将上传的文件从临时位置移动到指定的目录。这个函数的使用方法如下:

$uploadfile = $_FILES['file']['tmp_name'];

$filename = $_FILES['file']['name'];

$target_dir = "uploads/"; //上传文件存储的目录名称

$target_file = $target_dir . basename($filename); //用目录和文件名生成完整的目标文件路径

move_uploaded_file($uploadfile, $target_file);

这个函数接受两个参数:被上传的文件和目标文件的路径。它会先验证被上传文件是否在指定的目录中存在,如果不存在就返回false。如果被上传的文件在指定的目录中存在,函数就会把它移动到目标文件的路径中。

二、is_uploaded_file()函数

is_uploaded_file()函数可以判断指定的文件是否是通过HTTP POST上传的。这个函数的使用方法如下:

$filename = $_FILES['file']['tmp_name'];

if(is_uploaded_file($filename)){

    echo "该文件是通过HTTP POST上传的。";

} else {

    echo "该文件不是通过HTTP POST上传的。";

}

这个函数只接受一个参数:被上传的文件的路径。如果这个文件是通过HTTP POST上传的,函数返回true,如果不是,函数返回false。

三、$_FILES数组

$_FILES数组是PHP中预定义的一个数组,它包含所有上传文件的相关信息,如文件类型、文件大小、文件名、临时文件路径等。使用这个数组可以方便地获取上传文件的信息,如下所示:

$filename = $_FILES['file']['name']; //获取上传文件的文件名

$filetype = $_FILES['file']['type']; //获取上传文件的文件类型

$filesize = $_FILES['file']['size']; //获取上传文件的文件大小

$filetmpname = $_FILES['file']['tmp_name']; //获取上传文件的临时文件路径

四、filetype()函数和finfo类

filetype()函数可以获取指定文件的文件类型,包括MIME类型和文件扩展名。使用这个函数可以方便地验证上传文件的类型,如下所示:

$filename = $_FILES['file']['name'];

$filetype = filetype($filename);

echo "上传文件的类型为:".$filetype;

finfo类是PHP中一个专门用来解析文件类型的类,它通过识别文件中的二进制数据来推测文件的类型。使用这个类可以更加准确地获取上传文件的类型,如下所示:

$finfo = new finfo(FILEINFO_MIME_TYPE);

$filename = $_FILES['file']['tmp_name'];

$filetype = $finfo->file($filename);

echo "上传文件的类型为:".$filetype;

五、$_FILES数组的扩展

通过对$_FILES数组的扩展,可以在上传文件的过程中实现文件的重命名、大小限制、文件类型限制等功能。这些扩展包括:

1、上传文件的自动重命名

$filename = $_FILES['file']['name'];

$newname = time()."_".$filename;

move_uploaded_file($_FILES['file']['tmp_name'], $newname);

2、上传文件的大小限制

$max_size = 1024 * 1024; //1M

if($_FILES['file']['size'] > $max_size){

    echo "上传的文件太大";

}

3、上传文件的类型限制

$allowed_type = array('image/jpeg', 'image/png', 'image/gif');

if(in_array($_FILES['file']['type'], $allowed_type)){

    echo "上传的文件类型不允许!";

}

实例:简化文件上传

下面的示例演示了如何使用上述PHP文件上传函数,实现简化文件上传。本实例展示的功能包括:上传的文件类型、大小限制、自动重命名以及文件上传进度的展示。

HTML界面:

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>文件上传</title>

</head>

<body>

    <form action="upload.php" method="post" enctype="multipart/form-data">

        <label for="file">选择要上传的文件:</label>

        <input type="file" name="file" id="file" accept="image/*,video/*"><br><br>

        <button type="submit" name="submit">上传文件</button>

    </form>

</body>

</html>

PHP逻辑处理:

<?php

if(isset($_POST['submit'])){

    //上传文件的基本信息

    $filename = $_FILES['file']['name'];  //上传文件的文件名

    $filesize = $_FILES['file']['size']; //上传文件的文件大小

    $filetype = $_FILES['file']['type']; //上传文件的文件类型

    $tmp_name = $_FILES['file']['tmp_name']; //上传文件的临时文件路径

    //文件类型限制

    $allowed_type = array('image/jpeg', 'image/png', 'image/gif');

    if(!in_array($filetype, $allowed_type)){

        echo "上传的文件类型不允许!";

        exit;

    }

    //文件大小限制

    $max_size = 1024 * 1024 * 10; // 10MB

    if($filesize > $max_size){

        echo "上传的文件太大了!";

        exit;

    }

    //自动生成新的文件名

    $file_extension = pathinfo($filename, PATHINFO_EXTENSION);

    $new_name = time().".".$file_extension;

    $target_file = "uploads/".$new_name;

    //文件上传进度的展示

    $progress_key = ini_get("session.upload_progress.prefix").$_FILES['file']['name'];

    if(isset($_SESSION[$progress_key])){

        $current_progress = $_SESSION[$progress_key]["bytes_processed"];

        $total_progress = $_SESSION[$progress_key]["content_length"];

        echo "上传进度:".round($current_progress / $total_progress * 100)."%";

    } else {

        echo "上传进度:0%";

    }

    //移动上传文件到目标位置

    if(move_uploaded_file($tmp_name, $target_file)){

        echo "文件上传成功!";

    } else {

        echo "文件上传失败!";

    }

}

?>

在本例中,我们首先在HTML页面创建一个表单,用于选择和提交文件。使用特定的enctype属性,我们确保表单能够正确地解析二进制文件数据。在PHP逻辑处理部分,我们先验证上传文件的类型和大小,然后生成新的文件名。我们还通过使用php.ini中提供的session.upload_progress配置变量来展示文件上传进度。最后,我们使用move_uploaded_file()函数将上传的文件移动到目标位置。

总结

PHP提供了丰富的函数和类来完成文件上传的过程。在文件上传中,我们要关注文件类型、大小和上传进度等一系列因素。通过理解和使用PHP文件上传函数,我们就能够轻松完成这些功能,并加快Web应用程序的开发。