PHP单文件上传原理及上传函数的封装操作示例

PHP单文件上传原理及上传函数的封装操作示例

什么是文件上传?

文件上传指将本地文件通过互联网传输到服务器上的指定目录中。

文件上传的原理

在服务器端,所有的文件都以二进制的形式存储。当客户端上传文件时,服务器会在内存中开辟一块空间,将上传的文件保存在该空间中,然后将这个文件从内存中保存到服务器的硬盘上。

文件上传的过程中,主要的参数如下:

  • 文件名
  • 文件类型
  • 文件大小

这些参数可以通过 PHP 程序进行获取。

实现文件上传的步骤

  1. 前端编写上传表单;

  2. 从表单中取得上传文件的相关信息,包括文件名、类型、大小等,将其存储在 PHP 变量中;

  3. 把文件从客户端的临时文件夹移动到服务器指定的目录中。

PHP单文件上传函数的封装及操作示例

为了方便地实现文件上传,我们可以封装一个上传函数。下面是一个基本的PHP单文件上传函数:

function uploadFile($file_input_name, $directory_path){
    $file_name = $_FILES[$file_input_name]['name'];
    $file_size = $_FILES[$file_input_name]['size'];
    $file_tmp = $_FILES[$file_input_name]['tmp_name'];
    $file_type = $_FILES[$file_input_name]['type'];
    $extensions = array("jpeg","jpg","png");

    if(in_array($file_extension,$extensions)=== false){
        return false;
    }

    if($file_size > 2097152){
        return false;
    }

    $fileDestination = $directory_path.'/'.$file_name;

    move_uploaded_file($file_tmp, $fileDestination);

    return true;
}

上述代码中,$file_input_name 为上传表单中文件的 input name,$directory_path 为指定的目录。

我们可以通过调用 uploadFile 函数,实现文件上传。比如:

if (!isset($_POST['submit'])) {
    echo "没有上传文件";
    exit;
} else {
    $file_input_name = "uploadfile";
    $directory_path = "uploads";
    $result = uploadFile($file_input_name, $directory_path);
    if ($result) {
        echo "文件上传成功";
    } else {
        echo "文件上传失败";
    }
}

上述示例代码中,在 "uploads" 目录下上传了名为 "uploadfile" 的文件。如果上传成功,返回 "文件上传成功";反之,返回 "文件上传失败"。

示例说明

示例一

一个产品发布网站具有上传图片的功能,用户通过表单上传一个图片文件,并支持传输的类型为 "jpg","jpeg"和 "png"。开发人员为该产品发布网站增加文件上传功能,如何实现?

代码示例:

// 文件上传函数
function uploadFile($file_input_name, $directory_path) {
    $file_name = $_FILES[$file_input_name]['name'];
    $file_size = $_FILES[$file_input_name]['size'];
    $file_tmp = $_FILES[$file_input_name]['tmp_name'];
    $file_type = $_FILES[$file_input_name]['type'];
    $extensions = array("jpeg","jpg","png");
    $file_extension = pathinfo($file_name, PATHINFO_EXTENSION);

    if(!in_array($file_extension,$extensions)) {
        // 上传的文件类型不在规定范围内
        return false;
    }

    if($file_size > 2097152) {
        // 上传的文件过大
        return false;
    }

    $fileDestination = $directory_path.'/'.$file_name;

    // 保存上传的文件
    move_uploaded_file($file_tmp, $fileDestination);

    return true;
}
// 实例化文件上传函数
if(isset($_POST['submit'])) {
    $file_input_name = "file_input_name_jpg";
    $directory_path = "uploads";
    $result = uploadFile($file_input_name, $directory_path);
    if ($result) {
        echo "文件上传成功";
    } else {
        echo "文件上传失败";
    }
}

示例二

一个视频分享网站需要开发人员增加视频文件的上传功能。该视频分享网站的服务器允许上传文件大小不超过 10MB,只支持 ".mp4" 格式。

代码示例:

// 文件上传函数
function uploadFile($file_input_name, $directory_path) {
    $file_name = $_FILES[$file_input_name]['name'];
    $file_size = $_FILES[$file_input_name]['size'];
    $file_tmp = $_FILES[$file_input_name]['tmp_name'];
    $file_type = $_FILES[$file_input_name]['type'];
    $extensions = array("mp4");
    $file_extension = pathinfo($file_name, PATHINFO_EXTENSION);

    if(!in_array($file_extension,$extensions)) {
        // 上传的文件类型不在规定范围内
        return false;
    }

    if($file_size > 10485760) {
        // 上传的文件过大
        return false;
    }

    $fileDestination = $directory_path.'/'.$file_name;

    // 保存上传的文件
    move_uploaded_file($file_tmp, $fileDestination);

    return true;
}
// 实例化文件上传函数
if(isset($_POST['submit'])) {
    $file_input_name = "file_input_name_mp4";
    $directory_path = "video_upload";
    $result = uploadFile($file_input_name, $directory_path);
    if ($result) {
        echo "文件上传成功";
    } else {
        echo "文件上传失败";
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP单文件上传原理及上传函数的封装操作示例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 腾讯E证通怎么用 腾讯E证通开通及使用方法分享

    如何使用腾讯E证通 腾讯E证通是一款提供数字身份认证和数字签名服务的平台。用户可以使用腾讯E证通进行网上银行、电子合同签署、电子证照等多种服务。以下是腾讯E证通的开通及使用方法。 1. 注册腾讯E证通账号 首先,需要访问腾讯E证通官网,在首页中找到“注册”按钮,填写相关信息(包括身份证号码、手机号码、密码等),并按照页面提示进行验证。 2. 购买数字证书 注…

    PHP 2023年5月23日
    00
  • laravel9-原生注解路由插件-laravel-route-notes

    laravel-route-notes laravel框架扩展,原生注解生成路由 优点是直接生成路由文件,不在运行中解析路由,提升效率 使用环境 [PHP] >= 8.0 [Laravel] >= 9.0 如何安装 直接使用composer进行安装: composer require –dev lovefc/laravel-route-note…

    PHP 2023年4月18日
    00
  • PHP遍历目录文件的常用方法小结

    PHP遍历目录文件是一个常见的应用场景,本文将分享几种常用方法,供大家参考。 方法一:使用dir函数 使用dir函数可以比较简单快捷地进行遍历。具体操作如下: 使用dir函数打开指定目录,获取目录句柄。 php $handle = dir(‘/path/to/directory’); 循环读取目录中的文件和子目录。 php while(false !== (…

    PHP 2023年5月23日
    00
  • PHP文件上传利用的常见函数总结大全

    以下是详细讲解“PHP文件上传利用的常见函数总结大全”的完整攻略: 简介 在开发Web应用程序的过程中,文件上传是一个非常普遍的需求。然而,由于文件上传涉及到服务器的文件系统和文件读写权限等方面的问题,可能会带来严重的安全隐患。攻击者可以通过利用文件上传的漏洞,上传并执行恶意脚本来实现远程代码执行等攻击。 为防止文件上传漏洞的出现,我们需要了解文件上传过程中…

    PHP 2023年5月26日
    00
  • 浅谈php的TS和NTS的区别

    浅谈PHP的TS和NTS的区别 TS和NTS的定义 TS 是 Thread Safe 的缩写,表示线程安全,PHP 官方 pre-compiled .dll 扩展都是 Thread Safe 的,TS 版本在 Windows 平台是不需要运行环境的支持,可以直接将生成的 .dll 下载下来放到 PHP Extension 目录中去,然后在 php.ini 中…

    PHP 2023年5月27日
    00
  • PHP 文件写入和读取操作实例详解【必看篇】

    对于这篇名为“PHP 文件写入和读取操作实例详解【必看篇】”的攻略,以下是详细讲解: 1. 标题 文章的标题为“PHP 文件写入和读取操作实例详解【必看篇】”。 2. 简介 文章的简介部分介绍了文章的主要内容——如何使用 PHP 对文件进行读写操作,并给出了本文的主要目的:帮助读者更好地掌握 PHP 文件读写操作的技巧。 3. 正文 正文是本文的重点,共分为…

    PHP 2023年5月23日
    00
  • 五个PHP程序员工具

    以下是“五个PHP程序员工具”的完整攻略: 1. Composer: 简介: Composer 是 PHP 的依赖管理工具。它允许你在你的项目中声明一个依赖库,然后它会自动为你管理(安装/升级)这些库和其它的必要库。 如何安装: 官网中有详细的安装指南,可按照指南进行安装:https://getcomposer.org/download/ 如何使用: 通过命…

    PHP 2023年5月23日
    00
  • 微信纯文字表情包怎么做?微信快速制作文字表情包教程

    关于“微信纯文字表情包怎么做?微信快速制作文字表情包教程”,我整理了以下完整攻略: 1. 准备工作 在制作微信纯文字表情包之前,我们需要准备如下工具: 一款支持markdown语法的文本编辑器,如Typora、VS Code等 制作表情包需要用到的纯文本符号,如英文单词、数字等 2. 选择表情包主题 首先,我们需要选择自己喜欢的表情包主题,可以根据自己的爱好…

    PHP 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部