问题标签 [x-sendfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
645 浏览

php - PHP 服务文件下载,从 Safari 下载时提供 .PHP 文件名

我有一个使用 XSENDFile 模块访问时提供文件的 php 页面。它在大多数浏览器中运行良好,但在最新的 Safari 浏览器中,文件下载。并且文件大小检查得很好,但是文件的文件名是 php 页面的名称,而不是正确的文件名。

有任何想法吗?如果需要,我也可以发布更多代码。

0 投票
1 回答
392 浏览

php - xsendfile 期望什么编码?

似乎谷歌搜索 xsendfile 问题会产生许多相互矛盾/过时的命中。

为了全面披露,我正在讨论 xsendfile 1.0 beta,记录在https://tn123.org/mod_xsendfile/beta/(该站点通常不会出现在搜索结果中,只是没有 /beta 的站点做)。我在 Linux 和 Windows 上都将它与 apache 2.4 和 php 5.4.34 一起使用。除了是最新版本之外,我还需要使用 beta 版本,因为只有 beta 站点具有使用 VC9 为 apache 2.4 构建的 Windows 二进制文件。

我犯了阅读文档的错误,其中标题中文件名值的描述说:

头部给定的值(文件名)被假定为 url-encoded,即 unescaping/url-decoding 将被执行。请参阅 XSendFileUnescape。如果您碰巧使用已经 url 编码的文件名存储文件,则必须“双重”对名称进行编码... %20 -> %2520

XSendFIleUnescape 的描述说:

将 XSendFileUnescape 设置为 off 将恢复 1.0 之前使用原始标头值的行为,而不是先尝试 unescape/url-decode。

关于相对路径的文档清楚地表明X-SendFile标题上的文件名应该是完整的路径名。所以我小心地通过php的urlencode函数运行我的路径名。

对我来说,最终结果总是在 Linux 和 Windows 上出现服务器内部错误(500 状态代码)。当我在server config上下文中使用我的 XSendFilePath 指令时,文档说这是允许的,我的错误日志中没有更具体的信息。但是当我(最终)将该指令移到Directory上下文时,我逐渐在我的错误日志中得到了这个:

最终,出于绝望,我说“搞砸了文档”,并删除urlencode了路径名上的 。突然间它开始完美运行(Windows 和 Linux)!!!

我没有任何包含非 ASCII 字符的路径名,所以我准备好了。但我确实想知道应该应用哪种编码来允许非 ASCII 字符工作。如果您 google xsendfile: bad file name encoding,您将在https://github.com/nmaier/mod_xsendfile/blob/master/mod_xsendfile.c找到以下源代码,其中该消息字符串是通过采用以下真正分支生成的:

但我找不到好的描述或源代码ap_unescape_url()。除非 github 上的源代码已过时,否则该函数反对 PHPurlencode()函数执行的简单 % 编码。作为一个疯狂的猜测,我尝试调用ap_escape_url(),但它没有在 PHP 中定义。所以这就留下了应该X-SendFile标头中的路径名参数应用什么编码的问题?

另一个观察/问题使用“apache internals”发送文件 的描述XSendFile可能会让你认为它会Content-Type使用mod_mime. 但实际上并非如此,并且示例显示了header()Content-Type. 所以我的后续工作是从传递给的路径名构造该标头的“正确”方法是什么X-SendFile,这样可以保证匹配mod_mime如果我们不使用会做什么X-SendFile?我能想到的最好的方法是使用 PHPfileinfo扩展的以下代码 - 但据我所知,没有特别的理由期望它实际上会匹配 apache 在给定文件名的 url 时所做的事情。

0 投票
0 回答
206 浏览

apache - 在 MAMP Pro 中安装 mod_xsendfile 会导致 Apache 无法加载

我在 OSX Yosemite 上,目前正在尝试安装 mod_xsendfile。我按照那里的所有步骤没有遇到任何问题: http: //patrickward.com/2013/01/07/adding-the-x-sendfile-module-to-mamp-pro/

现在,当我尝试启动 MAMP Pro 时,它说 Apache 无法启动。如果我查看错误日志,除了该行之外什么都没有出现:

我已在 MAMP httpd.conf 中包含该模块,因此我可以在 GUI 中打开或关闭该模块。如果我关闭 mod_xsendfile,Apache 就会启动。如果它打开,它不会在没有任何错误的情况下启动。

我检查了它是否不是为相同的架构编译的:

我检查了权限,但它们也相同:

我真的不知道可能是什么问题...

0 投票
1 回答
347 浏览

php - 当 IE9 发出请求时,如何阻止 X-Sendfile 提供完整的视频文件?

我遇到了一个问题,无论预加载属性设置如何,当 IE9 请求视频并且视频由 x-sendfile 提供时,该请求被列为待处理并保持连接打开。

因此,如果您尝试加载 10 个视频,IE9 将很快耗尽所有可用连接,并且浏览器将无法发出进一步的请求。

当告诉 IE9 从 Apache 请求相同的视频时,没有 X-Sendfile,Apache 将文件的一小部分作为 200 请求提供。然后浏览器稍后在按下播放按钮以提供文件范围时发出请求。

看起来 X-Sendfile 导致 Apache 最初提供整个文件,而不是只提供其中的一部分。

如何通过 Apache 函数发出 X-Sendfile 请求与对 Apache 的常规请求相同?

0 投票
1 回答
696 浏览

php - 带有 mod-xsendfile 实现的 PHP 下载脚本

我目前正在使用这个PHP 下载脚本从我的网站上提供一长串大文件(1GB+),但在抱怨下载损坏后,我研究并找到了一个更好看的替代方案:mod_xsendfile。我的主机是 Dreamhost,他们已经在我的域上启用了 xsendfile。我使用作者网站上的这段代码对其进行了测试,它可以工作:

但我想将所有下载内容放在一个目录中,并链接到文件,就像我使用媒体部门的脚本一样:

我搜索了大多数用 x-sendfile 标记的问题,但没有发现任何有用的东西。我不会编写 PHP 代码,但知道足以配置脚本以使它们工作。有谁知道可以执行此操作或可以帮助我的脚本?

谢谢

0 投票
1 回答
724 浏览

php - XSendFile Apache2 mod 的字节数为零

我的代码,路径正确,内容长度正确

我的 .htaccess

这总是会导致下载大小为零的文件。

该文件肯定在那里并且在正确的位置。使用 curl -I向我展示了以下似乎很好。但是文件仍然是零字节。

我做错了什么?

0 投票
1 回答
476 浏览

ruby-on-rails - Capistrano 和 XSendFile 配置

我正在尝试使用 Apache 2.2、Passenger 4.0.59 和 XSendFile 0.12 配置 Rails 生产服务器。应用程序通过 Capistrano 部署。

部署的应用程序生成(可能很大)PDF#{Rails.root}/tmp并使用send_file.

问题是 Capistrano 使用符号链接指向当前部署的应用程序版本。另一方面,如果文件的实际位置在文档根目录之外,则 XSendFile 会取消引用符号链接并拒绝提供文件,即使XSendFilePath. Apache 的 error.log 状态:

PassengerAppRoot当我设置到XSendFilePath当前版本的应用程序的实际位置时,一切正常,路径上没有符号链接。但是直到下一次部署都可以,这需要重新配置apache。不是很有用。

我应该如何配置 Capistrano 部署和 XSendFile 参数以使其协同工作?

我尝试了Capistrano & X-Sendfilemod_xsendfileln -nFs中描述的解决方案,但没有一个有效。

0 投票
1 回答
802 浏览

php - nginx php x-sendfile 下载 0kb

我正在尝试在我的 nginx 服务器上提供带有 X-Sendfile 的下载。我有最新版本的 nginx 和 php5。

文件请求的文件存在,但它只是下载一个空的 0kb 文件,没有内容但具有正确的文件名。在下载开始之前我不做任何输出。

一开始我在“下载”之后有输出,我输出的所有内容在文件中都是可读的。

我查看了 nginx 文档http://wiki.nginx.org/XSendfile并将包含下载文件的文件夹设置为“内部”。

0 投票
1 回答
257 浏览

python - 如何将下载的 url 内容与 Xsendfile (Django) 一起使用

我想使用 mod - xsendfile(我已经下载并安装)来保存来自 url、外部页面的内容,我在变量 one_download 中使用 urllib 和 urllib2 读取这些内容。我是新手,不知道如何正确配置一些 x-sendfile 属性。在下面的代码中,我假设我可以将 one_download 中的 urllib 内容直接放入 xsendfile,而不是采取中间步骤将其保存到 txt 文件,然后将该 txt - 文件传递​​给 xsendfile。

0 投票
1 回答
153 浏览

php - 尝试使用 Retrofit2 下载照片时出现错误的响应正文

我正在使用 Retrofit 2.0.0-beta2,我需要从我的 PHP 服务器下载一些文件。我的第一种方法是直接使用其相对服务器路径中的 GET 方法,我得到了正确的字节。

现在我尝试了一些更安全的方法,可以根据一些检查将文件传递给我。它会自动从数据库中获取文件路径并检查用户会话是否正确。这适用于浏览器测试,Chrome PC 和 Android 的 Chrome 都正确下载了一些照片。

我正在使用 X-Sendfile 标头提供文件,如下所示:

Android 端调用如下所示:

打开文件时我得到的只是来自服务器的回显文本响应。有什么办法可以接收“正确”的文件?