首页 > PHP教程 > php开发知识文章

PHP 浏览器文件下载

本文主要介绍了PHP 浏览器文件下载的示例代码,欢迎大家的学习。

http协议文件下载

Header信息是用来告诉Apache和浏览器下载文件的相关信息的。HTTP头部信息有:

header("Content-type: application/octet-stream");--content-type的含义代表文件MIME类型是文件流格式。

如果在Apache配置里面把文件的MIME类型设为application/octet-stream(如add application/octet-stream .xxx.rar),

那么浏览器(客户端)就知道,这是一个文件流格式的文件并提示用户下载。

header("Accept-Ranges: bytes");--Accept-Ranges是一个响应头标,它允许服务器指明将在给定的偏移和长度处,为资源组成部分的接受请求,该头标的值为请求范围的度量单位。

header("Accept-Length: " . $file_size);--是指定包含于请求或响应中数据的字节长度

header("Content-Disposition: attachment; filename=" . $file_name);--Content-Disposition:attachment是用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值

如果文件名是中文,php的函数不能识别中文文件名,如果程序编码为utf-8,把中文用iconv(“原编码”,”要转成的编码”,”要转码的字符串”)函数可以转码。

把一个字符串从utf-8转码为gb2312,$file_name=iconv(“utf-8”,”gb2312”,”$file_name”);

/**
* 下载文件
* @param string $file_name 文件名(中英文)
* @return string
*
*/
function download($file_name)
{
//对中文文件名进行转码
$file_name = iconv("UTF-8", "GB2312", $file_name);
//文件绝对路径:E:/wamp/www/aa.txt
$filepath = $_SERVER['DOCUMENT_ROOT'].$file_name;
//检查文件是否存在
if (!file_exists($filepath)) {
echo "该文件不存在!";
return;
}
//打开文件
$fp = fopen($filepath, 'r');
//计算文件大小
$file_size = filesize($filepath);
//HTTP头部信息
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: " . $file_size);
header("Content-Disposition: attachment; filename=" . $file_name);
//输出文件内容
echo fread($fp, $file_size);
$buffer = 1024;
//文件字节读取计数器
$file_count = 0;
//判断文件是否结束 feof
while (!feof($fp) && ($file_size - $file_count > 0)) {
$file_data = fread($fp, $buffer); //统计读了多少字节
$file_count += $buffer;
echo $file_data;
//把数据会送给浏览器
}
fclose($fp);
}

download("aa.txt"); //填写文件名即可

以上就是本文PHP 浏览器文件下载的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助。

PHP 浏览器文件下载

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。