【发布时间】:2023-06-06 01:49:02
【问题描述】:
我正在尝试使用 lighttpd 中的 X-Sendfile 指令发送文件。
我的php代码是;
header("Content-Type: application/force-download");
header( "Content-Disposition: attachment; filename=" . 's.php');
header("Content-Length: ". filesize("/home/web/domain/htdocs/download.php"));
header( "X-Sendfile: /home/web/domain/htdocs/download.php");
(我发送download.php文件只是为了测试目的)
但是,无论我尝试什么,我都会得到空白文件。如果我更改文件名,我会得到;
2010-08-30 18:01:14: (mod_fastcgi.c.2587) 发送文件错误:无法获取 stat_cache 条目:/home/web/domain/htdocs/downloa1d.php
所以,它正在工作,但是当我发送正确的文件时,它不会在日志中给出任何错误,并且浏览器会下载一个空文件。
可能出了什么问题?我该怎么办?
【问题讨论】:
-
您是否在没有 Content-Length 和 Content-Type 标头的情况下对其进行了测试?
-
等一下,您确实意识到发送
.php文件应该实际上是流式传输文件的内容(而不是执行它),对吧?另外,请检查the docs。它是X-LIGHTTPD-send_file,因为X-Sendfile仅受 1.5+ 支持(不稳定,除非您正在运行前沿)。还要意识到你给出的代码,和你给出的错误冲突(它们有不同的路径)...... -
是的,我已经在没有 Content-Length 和 Content-Type 标头的情况下对其进行了测试,实际上我稍后添加了它们以尝试它们。是的,我知道,这就是为什么我说(我发送 download.php 文件只是为了测试目的),我将通过我们自己的 CDN 发送文件,该 CDN 通过网络连接到网络服务器,所以它只是为了测试目的并隔离问题。我首先虽然它可能是 chroot 或其他东西。这就是我尝试先下载该文件的原因。
-
对不起,我忘了回复其他的事情。是的,我第一次使用 X-LIGHTTPD-send-file 但改变了它。所以,它也没有解决问题。我还将 lighttpd 更新到 1.4.28(在 1.4.27 中修复了一个 sendfile 错误),但它仍然无法正常工作。
-
尝试发送非php文件。可能与
static-file.exclude-extensionssetting 有冲突