2026年10月31日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
59999
王者却具王侯心等级图标等级图标等级图标等级图标等级图标等级图标
勋章勋章勋章勋章勋章勋章勋章
帖子
384
回复
1.4万
积分
6万
注册
2011-07-08
[怀旧国机]

PHP 文件上传

[复制链接]
查看 84 回复 1
楼主 发表于 | 只看该作者

文件上传概述

文件上传功能是网络生活中经常使用的一个功能。使用 PHP 可以很方便的实现文件上传,其具体流程如下:

表单选择文件 -> 检查文件大小及类型 -> 生成临时文件 -> 移动临时文件至文件存储目录 -> 记录文件信息以便于管理。

在文件上传功能中,需要考虑以下几个问题:

1.限定上传文件的大小

2.限定上传文件的类型

3.只允许可信任的用户上传文件,防止远程提交

4.服务器端文件存储目录

5.对文件上传后的管理

HTML 表单

在文件上传表单中,需要将表单的 ENCTYPE 属性设置为 multipart/form-data :

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

<label for=“file“>请选择上传的文件</label>

<input type=“file“ name=“file“ size=“40“ />

<br />

<input type=“submit“ name=“submit“ value=“确定“ />

</form>

在 <input> 标签里, type=“file“ 表示应该把输入作为文件来处理,这时候会出现选择文件的浏览按钮,点击该按钮即可选择本地电脑里的文件。

PHP 文件上传处理

PHP 提供了内置变量 $$_FILES 来处理上传的文件。

$$_FILES 变量说明(设定表单 name 属性为 file ):$$_FILES 变量 说明

$$_FILES[“file“][“name“] 客户端提交文件的原名称

$$_FILES[“file“][“type“] 浏览器提供的文件的 MIME 类型,如 gif 图片为 image/gif 。不过此类型在 PHP 端并不检查,因此不要想当然认为有这个值

$$_FILES[“file“][“size“] 已上传文件的大小,单位为字节

$$_FILES[“file“][“tmp_name“] 文件被上传后在服务端储存的临时文件名

$$_FILES[“file“][“error“] 和该文件上传相关的错误代码,为0则表示上传成功

当点击“确定”按钮提交表单至 upload.php 后,可以利用 $$_FILES 变量来处理提交的文件。

文件处理例子:

<?php

//文件存储路径

$$file_path=“upload/“;

//664权限为文件属主和属组用户可读和写,其他用户只读。

if(is_dir($$file_path)!=TRUE) mkdir($$file_path,0664) ;

//定义允许上传的文件扩展名

$$ext_arr = array(“gif“, “jpg“, “jpeg“, “png“, “bmp“, “txt“, “zip“, “rar“);

if (empty($$_FILES) === false) {

//判断检查

if($$photo_up_size > 2097152){

exit(“对不起,您上传的照片超过了2M。“);

}

if($$_FILES[“file“][“error“] > 0){

exit(“文件上传发生错误:“.$$_FILES[“file“][“error“]);

}

//获得文件扩展名

$$temp_arr = explode(“.“, $$_FILES[“file“][“name“]);

$$file_ext = array_pop($$temp_arr);

$$file_ext = trim($$file_ext);

$$file_ext = strtolower($$file_ext);

//检查扩展名

if (in_array($$file_ext, $$ext_arr) === false) {

exit(“上传文件扩展名是不允许的扩展名。“);

}

//以时间戳重命名文件

$$new_name = time().“.“.$$file_ext;

//将文件移动到存储目录下

move_uploaded_file($$_FILES[“file“][“tmp_name“],“$$file_path“ . $$new_name);

//向数据表写入文件存储信息以便管理

//*********** 代码略 ***********//

echo “文件上传成功!“;

exit;

} else {

echo “无正确的文件上传“;

}

?>

例子说明:

1.该例子只是简单演示了文件上传的流程,请勿直接用于实际项目

2.该例子中缺少对用户权限的检查

3.如果上传后的文件没有做重命名,则需要做文件重名时的逻辑处理

4.写入数据表文件信息由于涉及到数据库操作,暂略。写入数据表的信息应该包括文件上传的时间,上传的用户ID以及存储的位置,以便清理上传无效的文件以及文件过期管理等

无提交校验,要防止远程提交,可以在表单生成页面产生一个会话ID,然后在upload.php页面做校验以防止远程提交

上一节

登录回复
76958
Lv11尝以士自居等级图标等级图标等级图标等级图标等级图标
勋章勋章勋章勋章勋章勋章勋章
帖子
4
回复
1,078
积分
13.5万
注册
2011-10-09
1 楼

<br/>加入繁花家族,铸就中国红客道路!

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块