关于PHP语言实现下载文件的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于PHP语言实现下载文件的问题相关的知识,希望对你有一定的参考价值。

echo "<a href=".$row['slave_add'].">".$row['slave_name']."</a>";

$row['slave_add']是从数据库返回的文件真实地址,$row['slave_name']是文件名,如何将链接加密但又能链接到地址进行下载?

编写一个php文件,例如文件名为 download.php ,下载文件时直接下载该文件,传递一个要下载的文件ID,程序内获取文件在磁盘中的路径,然后读取写出给客户端就可以了。

关键代码:
$filepath = ''; //从数据库读出文件在硬盘中的路径
$filename = ''; //读取文件名称
header('Content-type: application/octet-stream'); //告诉浏览器,当前传递的数据是文件流,请做好接收
header('Content-Length: '.filesize($filepath)); //文件大小
header('Content-Disposition: inline; filename='.$filename); //文件名,浏览器下载时将对文件重命名,下载的文件名将不是 download.php
readfile($thumbFilePath); //将文件递给浏览器

比如有一文件的路径已记录在数据库,文件 id 为 123 ,下载地址将为: download.php?id=123

参考资料:http://w3school.com.cn/php/func_filesystem_readfile.asp

参考技术A 直接点下载追问

下毛。我说如果用户点击我的下载链接后但不能显示路径,我的意思是说要把地址加密成一串字符串。看懂?

参考技术B 你可以自己写个算法,只要能在逆算回去就可以,别人只要看不到你的源码就应该很难猜到,当然如果别人能看到,加密也就没有意义了。 参考技术C 可以用动态链接,用一个URL动态转到可以下载的链接上,很多网站就是这么做的

php关于redis的使用方法

PHP中使用Redis是需要用到驱动库的,一般常见:phpRedis和Predis
1、phpRedis
phpRedis是C实现的一个php的pecl扩展,php代码里直接使用该扩展提供的相关类、方法即可。所以使用该扩展需要在php扩展库加入一个c语言写的扩展php-redis.dll或redis.so之类的扩展文件,并且配置php.ini,这个扩展本身的安装没有外部依赖,因为内部实现使用了php层封装的streem流操作。该扩展唯一的麻烦就是配置问题。

使用方法:

<?php

$redis = new Redis();
$is_connect = $redis->connect(‘127.0.0.1‘, 6379);

if ($is_connect) {
echo "连接redis成功";
$redis->set("a", "a_value"); // 往redis里写入一个string
$redis->get("a"); // 从redis里读取一个string
$redis->delete("a"); // 从redis里删除一个string
} else {
echo "连接redis失败";
}

2、Predis
predis是PHP版本写的redis client,采用socket连接。Predis更符合phper使用习惯,撇开了麻烦的配置,使用的原生的PHP代码实现的一套Redis-client程序,可以不用安装任何扩展,只引入php代码就可以很方便的使用redis。
因为是一个原生的php包,而且支持composer,所以使用上就更方便了,引入之后就可以:

<?php

$client = new PredisClient([
‘scheme‘ => ‘tcp‘,
‘host‘ => ‘127.0.0.1‘,
‘port‘ => 6379,
]);

$client->set(‘a‘, ‘a-value‘);// 设置1个string
$client->get(‘a‘);// 读取1个string

以上是关于关于PHP语言实现下载文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

怎么用PHP实现苹果手机下载文件功能

详解PHP文件下载的原理和实现

PHP扩展类ZipArchive实现压缩Zip文件和文件打包下载

关于批量下载ftp服务器的文件的方法

PHP利用Curl实现多线程抓取网页和下载文件

php实现文件下载代码