当前位置: 首页 > 知识库问答 >
问题:

php - PHP利用nginx的X-Accel-Redirect 实现文件下载,请大佬帮助?

楚俊迈
2023-05-08

语言:PHP
服务器:宝塔面板 NGINX
文件位置:/www/wwwroot/xxx.com/upload/txt/《官梯》作者:钓人的鱼.txt

PHP代码:

public function txtdown(){
        $_path = 'upload/txt/《官梯》作者:钓人的鱼.txt';

        $_file = ROOT_PATH.$_path;
        // 文件不存在
        if(!is_file($_file)){
            exit('文件不存在,可能已被删除');
        }
        
        $speed = 200;   // 200KB/s
        $_file_limit_size = round(intval($speed) * 1024);
    
        // 启用 nginx X-Accel 下载
        header('Content-Type: application/octet-stream');
        $encoded_fname = rawurlencode('《官梯》作者:钓人的鱼.txt');
        header('Content-Disposition: attachment;filename="'.$encoded_fname.'";filename*=utf-8'."''".$encoded_fname);
    
        header('X-Accel-Redirect: /txtdown/'. $_path);
        header('X-Accel-Buffering: yes');
    
        // 不限速下载
        if($speed !== ""){
            header('X-Accel-Limit-Rate:'.$_file_limit_size);
        }
    }

BT面板网站NGINX配置文件:

访问网站: xxx.com/index.php?index-txtdown
能进入到这个函数里面,但是实现不了下载。

提示:
无法访问此网站网址为 https://www.xxx.com/index.php?index-txtdown 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。

共有1个答案

饶骁
2023-05-08

我用 node + nginx 试了一下,是没问题的。
image.png
image.png


fetch(`http://home-2023.lilnong.top:8001/1010000043743132-proxy/html/README.html`)
fetch(`http://home-2023.lilnong.top:8001/1010000043743132-proxy/html/README.html1`)

--

所以,还是需要确认一下本地的地址是否正确,可以不采用你那种有特殊字符的 url 试一下,看看是不是 也需要 encode

image.png

 类似资料:
  • 本文向大家介绍在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载),包括了在Nginx中使用X-Sendfile头提升PHP文件下载的性能(针对大文件下载)的使用技巧和注意事项,需要的朋友参考一下 很多时候用户需要从网站下载文件,如果文件是可以通过一个固定链接公开获取的,那么我们只需将文件存放到 webroot下的目录里就好。但大多数情况下,我们需要做权限控制,例如下

  • 本文向大家介绍PHP实现文件上传下载实例,包括了PHP实现文件上传下载实例的使用技巧和注意事项,需要的朋友参考一下 本文介绍了PHP实现文件上传与下载,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧。 一、上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可。 1.2 客户端配置 所需:表单页面(选择上传文件); 具体而言:发送方式

  • 问题内容: 我正在使用简单的文件下载脚本: 它在最大200mb的本地服务器上运行。 当我在我的网站上尝试此代码时,它将下载173KB而不是200MB的文件。 我检查了所有内容,编写了一些自定义代码(使用ob函数和fread而非readfile),但无法下载大文件。 谢谢您的回答。 我正在使用Apache 2.2,PHP 5.3 可以处理所有大文件的所有PHP设置。(执行时间,内存限制,… 问题答案

  • 本文向大家介绍php实现简单文件下载的方法,包括了php实现简单文件下载的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现简单文件下载的方法。分享给大家供大家参考。具体如下: 这里介绍的php文件下载代码,只是简单实现了一张图片的下载功能,还不完善,最好是封装到一个类里,或是采用函数调用。感兴趣的朋友可以在此基础上加以完善! php文件下载代码如下: 希望本文所述对大家的ph

  • 本文向大家介绍PHP大文件及断点续传下载实现代码,包括了PHP大文件及断点续传下载实现代码的使用技巧和注意事项,需要的朋友参考一下 一般来说浏览器要同时下载几个文件,比如pdf文件,会在服务器端把几个文件压缩成一个文件。但是导致的问题就是会消耗服务器的cpu和io资源。 那有没有办法,用户点了几个文件,在客户端同时下载呢? 支持html5的浏览器是可以的,html的a标签有一个属性download

  • 本文向大家介绍php使用curl实现ftp文件下载功能,包括了php使用curl实现ftp文件下载功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了php实现ftp文件下载功能,供大家参考,具体内容如下 不知道为什么用正常的ftp_get函数下载文件速度特别慢,但是用ftp的客户端下载很快,所以换了curl的下载方式,速度正常 测试下载小文件是正常的,但是如果网速很慢,下载大文件时