php下载文件的主要函数,PHP简单文件下载函数

这篇博客介绍了如何使用PHP实现文件下载,包括直接显示文件路径和利用header函数结合filesize与fopen进行限速下载。作者提到,使用header限速下载大文件可能不是理想选择。示例代码中展示了如何处理中文乱码、获取文件大小并发送HTTP头信息,以触发浏览器的下载行为。通过设置缓冲区限制下载速度,直到文件完全传输。
摘要由CSDN通过智能技术生成

php实现文件下载有许多的方法最多的就是直接显示文件路径了然后点击下载即可,另一种是利用header函数再由filesize与fopen读取文件进行下载了,这个可以实现限速下载了,但是个人认为使用header限速下载大文件是非常的不理想的哦,下面我们来看个例子。

例子<?php

header("Content-Type; text/html; charset=utf-8");

class DownFile {

public static function File($_path, $file_name) {

//解决中文乱码问题

$_path = $_path . $file_name;

//判断文件是否存在

if (!file_exists($_path)) {

exit('文件不存在');

}

$_path = iconv('utf-8', 'gb2312', $_path);

$file_size = filesize($_path);

$fp = fopen($_path, 'r');

header("Content-type: application/octet-stream");

header("Accept-Ranges: bytes");

header("Accept-Length: $file_name");

header("Content-Disposition: attachment; filename=$file_name");

$buffer = 1024;

$file_count = 0;

while (!feof($fp) && ($file_size - $file_count > 0)) {

$file_data = fread($fp, $buffer);

$file_count+= $buffer;

echo $file_data;

}

fclose($fp);

}

}

//路径

$path = '../';

//文件名

$file_name = 'filelist.php';

DownFile::File($path, $file_name);

?>

分析研究

使用header函数可以把像服务器端的脚本程序不需打包就可以进行下载了,像如php文件或html文件了,上面例子的核心语句是$_path=iconv('utf-8','gb2312',$_path);

$file_size=filesize($_path);

$fp=fopen($_path,'r');

header("Content-type: application/octet-stream");

header("Accept-Ranges: bytes");

header("Accept-Length: $file_name");

header("Content-Disposition: attachment; filename=$file_name");

$buffer=1024;

$file_count=0;

while (!feof($fp) && ($file_size-$file_count>0)) {

$file_data=fread($fp,$buffer);

$file_count+=$buffer;

echo $file_data;

}

下面三句,一个转换文件名编码这个防止中文乱码,第一个是获取文件大小,第三个是使用fopen读取文件$_path=iconv('utf-8','gb2312',$_path);

$file_size=filesize($_path);

$fp=fopen($_path,'r');

下面几行代码 是告诉浏览器我们要发送的文件是什么内容与文件名header("Content-type: application/octet-stream");

header("Accept-Ranges: bytes");

header("Accept-Length: $file_name");

header("Content-Disposition: attachment; filename=$file_name");

下面三行是告诉我们最大下载不能超过1MB第秒,并且循环一直下载,直到文件下载完毕即可$buffer=1024;

$file_count=0;

while (!feof($fp) && ($file_size-$file_count>0)) {

$file_data=fread($fp,$buffer);

$file_count+=$buffer;

echo $file_data;

欢迎收藏∩_∩但请保留本文链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值