<PHP>下载文件

以下载图片为例,隐藏服务器中资源文件的位置,防止客户端直接获取,并用超链接,下载图片到本地

源代码获取:
https://github.com/akh5/PHP/tree/master/day3

通过md5()函数,将需要的关键字加密为16字节的散列值,并同通过在地址栏上传参的方式,在php文件中获取该参数。
在这里插入图片描述
这也是为什么我们经常在网上下载图片时,图片的默认名称也是这种字母与数字组合的方式。

echo md5("dog")
返回:  06d80eb0c50b49a509b49f2424e8c805

通过md5函数得到的加密值,作为传递的参数值
<?php

//echo md5("dog");
$file = $_GET['f'];

$arr = array(
    '06d80eb0c50b49a509b49f2424e8c805'=>array('./dog.jpg','dog.jpg')
);

通过$_GET(),获取地址中的参数值,通过数组将该加密的值对应另一个数组,数组的0号位对应的是存放当前资源的路径。1号元素对应的是下载时,默认的文件名称。

//浏览器内容为八位二进制数据流
header("Content-Type:application/octet-stream");
//数据处理方式为附件保存
header("Content-Disposition: attachment;filename=".$arr[$file][1]);

$handle = fopen($arr[$file][0],'rb');
$file_size = filesize($arr[$file][0]);
$filecount = 0;
while(!feof($handle)&&$filecount<$file_size)
{
    $out = fread($handle,1024);
    $filecount+=1024;
    echo $out;
}

先要声明二进制数据的处理方式。第二个header通过字符串拼接的方式,可以默认下载时的文件名。然后读取文件$arr[$file][0]就可以取到图片的路径,并通过二进制的方式打开文件。并循环读取文件。直到读到文件末尾,并读取的数据量大于原文件本身大小时,结束。

整个过程不会在客户端上暴露资源位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值