PHP文件上传及其突破上传文件大小限制

文件上传在实际开发场景里较为常见,例如:上传头像、上传相册、百度云盘等等!接下来,一块了解一下PHP如何处理前端文件上传。

1. 创建一个文件上传表单

<html>
<head>
<meta charset="utf-8">
<title>清风笔记</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> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 multipart/form-data

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

通过使用 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"] - 由文件上传导致的错误代码

上传限制

有时我们需要对用户上传的文件类型进行限制,代码如下:

<?php
    //png且体积小于200kb
    if( $_FILES["file"]["type"] == "image/png" &&  $_FILES["file"]["size"] < 204800){
        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 临时文件夹中创建了一个被上传文件的临时副本。
这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

核心代码:

// 判断当期目录下的 upload 目录是否存在该文件
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"];
}

解除PHP对文件大小限制:

php.ini中的参数:

 
file_uploads  //是否允许上传文件,默认ON 

upload_tmp_dir //上传文件防止的临时目录,未指定则使用系统默认位置 

upload_max_filesize //允许上传文件的大小的最大值,默认为2M 

post_max_size //控制采用POST方法进行一次表单提交中PHP所能接受的最大数据量,如果希望用PHP文件上传,则此值要改为比upload_max_filesize要大 

max_input_time //以秒为单位对通过POST/GET/PUT方式接受数据时间进行限制。 

memory_limit //为了避免正在运行的脚本大量使用系统内存,PHP允许定义内存使用限额。通过设置此参数来制定单个脚本程序可以使用的最大内存容量,应适当大于post_max_size值 

max_execution_time //用来设置在强制终止脚本前PHP等待脚本执行完毕的时间,单位秒。次选项可限制死循环脚本,但当存在一个长时间的合法活动时(如:上传大文件),这项功能也会导致操作失败。这样情况下必须考虑将此变量增加。 

php下载文件

$fileName = $_GET['filename']; //得到文件名
header( "Content-Disposition:  attachment;  filename=".$fileName); //告诉浏览器通过附件形式来处理文件
header('Content-Length: ' . filesize($fileName)); //下载文件大小
readfile($fileName);  //读取文件内容
html
<a href="download.php?filename=a.jpg">下载文件</a>

至此,PHP文件上传已经介绍完毕,熟悉整套操作流程,方法不是问题,加油!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,490评论 18 139
  • 众所周知,文件上传在一些网站应用中是必不可少的一部分。比如个人博客上传个性头像,一些论坛分享好的学习资料等,这就涉...
    liuboxx1阅读 624评论 0 0
  • 上传模块配置样例: # 上传大小限制(包括所有内容) client_max_body_size 100m; # 上...
    SkTj阅读 12,963评论 0 3
  • 第一章 你跑哪鬼混去了 深夜,外面还有点冷。 夏可可拖着个大大的行李箱,站在某个门前,用食指在指纹密码锁上按了一下...
    青柠之风阅读 144评论 0 0
  • 我感觉到准确的语言本身是一种吊诡,我们用各种方法使语言愈来愈准确,当语言愈来愈准确,几乎是没有第二种模棱两可的含义...
    高大杰阅读 219评论 1 0