前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >php上传文件完整源码表单

php上传文件完整源码表单

原创
作者头像
用户5706463
修改于 2019-07-23 01:44:29
修改于 2019-07-23 01:44:29
3.1K0
举报
文章被收录于专栏:cdn小知识cdn小知识

允许用户从表单上传文件是非常有用的。

上传限制

在下面这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif、.jpeg、.jpg、.png 文件,文件大小必须小于 200 kB:

<?php

// 允许上传的图片后缀

$allowedExts = array("gif", "jpeg", "jpg", "png");

$temp = explode(".", $_FILES["file"]["name"]);

$extension = end($temp); // 获取文件后缀名

if ((($_FILES["file"]["type"] == "image/gif")

|| ($_FILES["file"]["type"] == "image/jpeg")

|| ($_FILES["file"]["type"] == "image/jpg")

|| ($_FILES["file"]["type"] == "image/pjpeg")

|| ($_FILES["file"]["type"] == "image/x-png")

|| ($_FILES["file"]["type"] == "image/png"))

&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb

&& in_array($extension, $allowedExts))

{

if ($_FILES["file"]["error"] > 0)

{

echo "错误:: " . $_FILES["file"]["error"] . "<br>";

}

else

{

echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";

echo "文件类型: " . $_FILES["file"]["type"] . "<br>";

echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];

}

}

else

{

echo "非法的文件格式";

}

?>

保存被上传的文件

上面的实例在服务器的 PHP 临时文件夹中创建了一个被上传文件的临时副本。

这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

<?php

// 允许上传的图片后缀

$allowedExts = array("gif", "jpeg", "jpg", "png");

$temp = explode(".", $_FILES["file"]["name"]);

echo $_FILES["file"]["size"];

$extension = end($temp); // 获取文件后缀名

if ((($_FILES["file"]["type"] == "image/gif")

|| ($_FILES["file"]["type"] == "image/jpeg")

|| ($_FILES["file"]["type"] == "image/jpg")

|| ($_FILES["file"]["type"] == "image/pjpeg")

|| ($_FILES["file"]["type"] == "image/x-png")

|| ($_FILES["file"]["type"] == "image/png"))

&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb

&& in_array($extension, $allowedExts))

{

if ($_FILES["file"]["error"] > 0)

{

echo "错误:: " . $_FILES["file"]["error"] . "<br>";

}

else

{

echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";

echo "文件类型: " . $_FILES["file"]["type"] . "<br>";

echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";

// 判断当期目录下的 upload 目录是否存在该文件

// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777

if (file_exists("upload/" . $_FILES["file"]["name"]))

{

echo $_FILES["file"]["name"] . " 文件已经存在。 ";

}

else

{

// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];

}

}

}

else

{

echo "非法的文件格式";

}

?>

上面的脚本检测了文件是否已存在,如果不存在,则把文件拷贝到名为 "upload" 的目录下。

请看下面这个供上传文件的 HTML 表单:

<html>

<head>

<meta charset="utf-8">

<title>玖芯科技(https://www.ninexin.com)</title>

</head>

<body>

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

<label for="file">文件名:</label>

<input type="file" name="file" id="file"><br>

<input type="submit" name="submit" value="提交">

</form>

</body>

</html>

将以上代码保存到 form.html 文件中。

有关上面的 HTML 表单的一些注意项列举如下:

<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。

<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

创建上传脚本

"upload_file.php" 文件含有供上传文件的代码:

<?php

if ($_FILES["file"]["error"] > 0)

{

echo "错误:" . $_FILES["file"]["error"] . "<br>";

}

else

{

echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";

echo "文件类型: " . $_FILES["file"]["type"] . "<br>";

echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];

}

?>

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。如下所示:

$_FILES["file"]["name"] - 上传文件的名称

$_FILES["file"]["type"] - 上传文件的类型

$_FILES["file"]["size"] - 上传文件的大小,以字节计

$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称

$_FILES["file"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关允许哪些用户上传文件的限制。

上传限制

在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif、.jpeg、.jpg、.png 文件,文件大小必须小于 200 kB:

<?php

// 允许上传的图片后缀

$allowedExts = array("gif", "jpeg", "jpg", "png");

$temp = explode(".", $_FILES["file"]["name"]);

$extension = end($temp); // 获取文件后缀名

if ((($_FILES["file"]["type"] == "image/gif")

|| ($_FILES["file"]["type"] == "image/jpeg")

|| ($_FILES["file"]["type"] == "image/jpg")

|| ($_FILES["file"]["type"] == "image/pjpeg")

|| ($_FILES["file"]["type"] == "image/x-png")

|| ($_FILES["file"]["type"] == "image/png"))

&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb

&& in_array($extension, $allowedExts))

{

if ($_FILES["file"]["error"] > 0)

{

echo "错误:: " . $_FILES["file"]["error"] . "<br>";

}

else

{

echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";

echo "文件类型: " . $_FILES["file"]["type"] . "<br>";

echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];

}

}

else

{

echo "非法的文件格式";

}

?>

保存被上传的文件

上面的实例在服务器的 PHP 临时文件夹中创建了一个被上传文件的临时副本。

这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

<?php

// 允许上传的图片后缀

$allowedExts = array("gif", "jpeg", "jpg", "png");

$temp = explode(".", $_FILES["file"]["name"]);

echo $_FILES["file"]["size"];

$extension = end($temp); // 获取文件后缀名

if ((($_FILES["file"]["type"] == "image/gif")

|| ($_FILES["file"]["type"] == "image/jpeg")

|| ($_FILES["file"]["type"] == "image/jpg")

|| ($_FILES["file"]["type"] == "image/pjpeg")

|| ($_FILES["file"]["type"] == "image/x-png")

|| ($_FILES["file"]["type"] == "image/png"))

&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb

&& in_array($extension, $allowedExts))

{

if ($_FILES["file"]["error"] > 0)

{

echo "错误:: " . $_FILES["file"]["error"] . "<br>";

}

else

{

echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";

echo "文件类型: " . $_FILES["file"]["type"] . "<br>";

echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";

// 判断当期目录下的 upload 目录是否存在该文件

// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777

if (file_exists("upload/" . $_FILES["file"]["name"]))

{

echo $_FILES["file"]["name"] . " 文件已经存在。 ";

}

else

{

// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];

}

}

}

else

{

echo "非法的文件格式";

}

?>

上面的脚本检测了文件是否已存在,如果不存在,则把文件拷贝到名为 "upload" 的目录下。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kubernetes 权威指南第二章校对(1)
权威指南第二章的内容,是 Kubernetes 有史以来最经久不衰的入门话题:安装。
崔秀龙
2020/01/17
7200
Flutter版本控制fvm
安装fvm后,考虑设置环境变量 FVM_HOME 或 FVM_GIT_CACHE,否则默认安装 flutter SDK 缓存路径为 ~/fvm/versions;
徐建国
2021/08/25
2.4K0
几种Go版本管理工具
(如果出现GOROOT blabla之类的,执行go env -w GO111MODULE=off )
fliter
2023/09/06
4280
几种Go版本管理工具
史上最新最全面的java大数据学习路线(新手小白必看版本)
2.1.1 VMware Workstation虚拟软件安装过程、CentOS虚拟机安装过程
全栈程序员站长
2022/09/01
3K1
Web基础配置篇(十六): Kubernetes集群的安装使用
Kubernetes 简称为K8S,是用于自动部署,扩展和管理容器化应用程序的开源系统。Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
品茗IT
2020/05/28
1.5K0
腾讯云CVM上用kubeadm安装Kubernetes集群(版本1.14.0)
kubeadm是Kubernetes官方提供的用于快速安装 Kubernetes 集群的工具,通过将集群的各个组件进行容器化安装管理,通过kubeadm的方式安装集群比二进制的方式安装要方便
马凌鑫
2019/04/02
4.1K0
Kubernetes展望与思考之1.17初体验
kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,其中kubespray比较适合较大规模的集群部署,*步骤,为可选操作,该文章主要介绍,以下内容:
zouyee
2019/09/24
3.3K0
Kubernetes展望与思考之1.17初体验
K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansible 和之前的步骤差不多都是和kubeadm步骤一样,不过这次所有kubelet全部走bootstrap不会像之前master上的kubelet生成证书,另外证书换成openssl生成
Jetpropelledsnake21
2019/04/01
2K0
K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
二进制安装Kubernetes(k8s) v1.23.4 ---(上)
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2022/03/01
2.5K0
CentOS 7.6安装Kubernetes v1.15.1
kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新的最佳实践。
星哥玩云
2022/07/27
4640
CentOS 7.6安装Kubernetes v1.15.1
Kafka万亿级消息实战
本文主要总结当Kafka集群流量达到 万亿级记录/天或者十万亿级记录/天  甚至更高后,我们需要具备哪些能力才能保障集群高可用、高可靠、高性能、高吞吐、安全的运行。
2020labs小助手
2021/05/18
1.1K0
Docker 容器入门
1.1 容器简介 1.1.1 什么是 Linux 容器 Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,
惨绿少年
2018/03/30
2K0
二进制安装Kubernetes(k8s)v1.32.0
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2024/12/15
8040
附037.Kubernetes_v1.29.2高可用部署架构二
该 Kubernetes 部署过程中,对于部署环节,涉及多个组件,主要有 kubeadm 、kubelet 、kubectl。
木二
2024/03/11
1.1K0
二进制安装Kubernetes(k8s)v1.30.1
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2024/05/27
1.1K0
二进制安装Kubernetes(k8s)v1.30.1
二进制安装Kubernetes(k8s) v1.26.0 IPv4/IPv6双栈
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2022/12/20
6.7K0
二进制安装Kubernetes(k8s) v1.24.0 IPv4/IPv6双栈 ---(上)
1.23.3 和 1.23.4 和 1.23.5 和 1.23.6 和 1.24.0 文档以及安装包已生成。
小陈运维
2022/05/05
1.6K0
二进制安装Kubernetes(k8s)v1.29.2
https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了
小陈运维
2024/02/22
1.4K0
二进制安装Kubernetes(k8s)v1.29.2
二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈 --- (上)
1.23.3 和 1.23.4 和 1.23.5 和 1.23.6 和 1.24.0 和1.24.1 文档以及安装包已生成。
小陈运维
2022/05/29
1.1K5
PyMuPDF 1.24.4 中文文档(十三)
从版本 1.4 开始,PDF 支持将任意文件作为 PDF 文档文件的一部分(“嵌入式文件流”)嵌入其中(参见章节“7.11.4 嵌入式文件流”,第 103 页的 Adobe PDF 参考手册)。
ApacheCN_飞龙
2024/06/21
1.7K0
相关推荐
Kubernetes 权威指南第二章校对(1)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档