php 下载大文件-PHP上传文件和下载

第一章 文件上传

1.1 客户端上传设置

文件上传已经成为B/S程序中的常用功能。 目的是客户可以通过浏览器(Browser)上传文件到服务器(Server)上的指定目录。

网上常见的支持文件上传的网站:

各种云盘

头像

网络相册

已验证

电子邮件附件

简单来说,Web开发需要用户传递给服务器的所有文件都属于PHP的上传类别。 服务器只能接受副本,除非它不执行此功能。

就像10086客服一样,只要你打电话,它就会受理。 如果不接受,只能说明服务器正忙。

PHP文件上传的基础知识:

1)客户端form表单设置

2)服务器处理上传的文件

php 下载大文件_下载文件大小和流量_下载文件大小未知

必须设置的表单项:


文件上传



选择文件:



注意几个特征属性:

1.文件必须使用post方式上传,不能使用get方式。

2. 请务必在表单中写入enctype="multipart/form-data"。

3. 输入表格必须写上姓名。

1.2 在服务器端通过PHP处理上传

上传文件的接收和处理是通过PHP脚本来处理的,具体需要以下三方面的信息:

1)设置PH配置文件中的指令:用于微调PHP的文件上传功能。

2)$FILES多维字段:用于存储上传文件相关的各种信息。 其他数据仍然使用$_POST获取。

3)PHP文件上传处理函数:用于对上传文件进行后续处理。

1)PHP配置文件中与文件上传相关的选项。

2) $_FILES 多维字段。

下载文件大小和流量_php 下载大文件_下载文件大小未知

超级全局字段$_FILES

1、$_FILES["myfile"]["name"]中的值为:客户端文件系统中文件的名称。

2、$FILES["myfile"]["type"]中的值为:客户端传递过来的文件的类型。

3、$_FILES["myfile"]["size"]中的值为:文件的字节大小。

4、$_FILES["myfile"]["tmp_name"]中的值为:文件上传后存储在服务器上的临时完整路径。

5、$_FILES["myfile"]["error"]中的值为:文件上传的错误码——php4.2之后减少的功能。

关于文件上传错误的错误代码:

上传_ERR_确定

其值为0,没有发生错误,文件上传成功。

上传_ERR_INI_SIZE

其值为1,上传的文件超出了php.ini中upload_max_filesize选项的限制值。

上传_ERR_FORM_SIZE

如果其值为2,则上传文件的大小超过HTML表单中MAX_FILE_SIZE选项指定的值。

上传_错误_部分

当值为3时,仅上传部分文件。

上传_ERR_NO_FILE

它的值为4php 下载大文件,没有上传文件。

上传_ERR_NO_TMP_DIR

其值为6,找不到临时文件夹。 引入了PHP4.3.10和PHP5.0.3。

上传_ERR_CANT_WRITE

其值为7,文件写入失败。 PHP5.1.0推出。

注:以上值在PHP4.3.0之后已成为PHP常量。

通用数据格式 (MIME)

3)PHP文件上传处理函数

上传成功的文件会被放置在服务器端临时目录中,文件名是随机生成的临时文件名。

注意:程序执行后该文件将被手动删除。

您可以像操作本地文件一样操作它,然后再删除它。

下载文件大小和流量_下载文件大小未知_php 下载大文件

文件上传处理函数:

is_uploaded_file—确定文件是否通过 HTTPPOST 上传。

格式:boolis_uploaded_file(字符串$文件名)

move_uploaded_file - 将上传的文件移动到新位置。

格式:boolmove_uploaded_file(字符串$文件名,字符串$目的地)

注意:如果目标文件已经存在,则会被覆盖。

参数说明:临时文件目录,要连接的位置目录

案件:

1)设置后端上传接口





Document







2)doup.php处理上传到临时目录的文件

//专业搬运工具
//move_uploaded_file()
//参数1:文件临时目录 参数2: 要移动到的位置
//is_uploaded_file() 判断文件是否是http post提交过来的
//参数1:文件临时目录
//1.我们保存的路径按照时间来创建
//var_dump($_GET);
//1.1保存的路径
$dir='./biran/'.date('Y/m/d/');
//echo $dir;exit;
//1.2 判断文件上传的路径是否存在 如果不存在就创建
if(!file_exists($dir)){
mkdir($dir,777,true);
}
//2.要有个好的文件名 唯一的文件名
//2.1获取文件的后缀名
//2.jpg jpg
$suffix = pathinfo($_FILES['pic']['name'],PATHINFO_EXTENSION);
//echo $suffix;
//2.2重新起名
$filename = date('Ymd').uniqid().mt_rand(0,9999).'.'.$suffix;
//echo $filename;
//开始搬运
//判断是否是http post 传递的文件
if(!is_uploaded_file($_FILES['pic']['tmp_name'])){
//不是http post上传文件
echo '别整没用的!!';exit;
}
//开始真正的搬运
if(move_uploaded_file($_FILES['pic']['tmp_name'],$dir.$filename)){
echo '11111111111';
}else{
echo '22222222222';
}

封装成一个函数:

想法:

php 下载大文件_下载文件大小和流量_下载文件大小未知

function upload(){
//1.判断文件上传错误
//2.判断你文件上传的类型是否是你想要的类型
//3.起名字
//4.判断保存路径是否存在
//5.判断是否是http post方式上传
//6.移动图片
//7.返回移动成功的图片名
}

开始封装函数:新建function.php

<?php
/*
文件上传函数
@param string $name 文件上传文件域的name值
@param string $dir 文件保存路径
@param array $allow 文件允许上传的类型
return string $filename 文件名 如果失败 返回false
*/
function upload($name,$dir='./upload/',$allow=array('jpg','gif','jpeg','png')){
//echo $name;exit;
//var_dump($_FILES);exit;
//1.判断文件上传错误
if($_FILES[$name]['error']>0){
//echo '上传错误';
switch($_FILES[$name]['error']){
case 1:
echo '上传的文件超过了 php.ini 中upload_max_filesize 选项限制的值.';
break;
case 2:
echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
break;
case 3:
echo '文件只有部分被上传.';
break;
case 4:
echo '没有文件被上传.';
break;
case 6:
echo '找不到临时文件夹.';
break;
case 7:
echo '文件写入失败.';
break;
}
return false;
}
//2.判断你文件上传的类型是否是你想要的类型
//2.1允许上传的类型
//2.2 获取后缀名
$suffix = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION);
//echo $suffix;exit;
//2.3 判断是否是我们允许上传的类型
//var_dump(in_array($suffix,$allow));exit;
if(!in_array($suffix,$allow)){
//不允许上传的类型
echo '大哥你的上传类型不符合';
return false;
}
//3.起名字
$filename = date('Ymd').uniqid().mt_rand(0,9999).'.'.$suffix;
//echo $filename;exit;
//4.判断保存路径是否存在
//4.1 得到保存路径
//4.2 处理保存路径和后面的斜杠
$save_path = rtrim($dir,'/');
$save_path .='/';
//4.3 保存路径中的时间文件夹处理
$save_path .=date('Y/m/d/');
//4.4 判断保存的路径是否存在
if(!file_exists($save_path)){
mkdir($save_path,777,true);
}
//4.5 拼接一个完整的保存路径
$path = $save_path.$filename;
//echo $path;exit;
//5.判断是否是httppost方式上传
if(!is_uploaded_file($_FILES[$name]['tmp_name'])){
echo '滚蛋!';
return false;
}
//6.移动图片
if(!move_uploaded_file($_FILES[$name]['tmp_name'],$path)){
echo '移动失败';
return false;
}
//7.返回移动成功的图片名
return $filename;
}

调用该函数开始上传:

<?php
include './function.php';
//var_dump($_FILES);exit;
echo upload('file','./leiding',array('jpg','png'));

第二章 多文件上传

2.1 上传多个不同名称的文件

当需要上传多个文件时,有两种解决方案:

1)使用不同的表单元素。



2)使用链表格式的表单元素。



第三章 文件下载

1)对于浏览器无法识别的文件,可以通过连接直接下载。


<a href="./downlist/1.rar">1.rar</a>
<a href="./downlist/1.exe">1.exe</a>
<a href="./downlist/1.avi">1.avi</a>

2)如果浏览器无法识别php 下载大文件,可以使用readfile函数。


<a href="./action.php?name=1.html">1.html</a>
<a href="./action.php?name=1.php">1.php</a>
<a href="./action.php?name=1.txt">1.txt</a>
<a href="./action.php?name=1.jpg">1.jpg</a>
//接收一下name值.
$name = $_GET['name'];
//实现下载功能
//强制浏览器弹出另存为对话框
header('content-Disposition:attachment;filename="'.$name.'"');
//此时只是下载了一个空文件,需要利用readfile读一遍所有的内容.便可下载.
$path = './downlist/'.$name;
readfile($path);