我正在构建我网站的“高级”部分,并且我需要直接(在不同的服务器上)向具有特殊权限的用户(存储在 mysql db 中的帐户)授予对远程文件的下载访问权限。我的网站是用 php/mysql 编码的,所以一个 php 解决方案会很棒。
user15063
问问题
500 次
4 回答
2
正如@pxl 所说,您需要检查授权,然后将正确的 mime 类型输出为 HTML 标头(就像他说的header("Content-type: image/jpeg");
:)
此外,一旦完成,您将需要输出文件的实际内容及其大小(以字节为单位),如下所示:
header("Content-Length: ".filesize("FILENAME")*1.001);
/* The *1.001 puts a nice buffer on the filesize, I read about it online.
Browsers will stop downloading exactly at the Content-Length, but if they go
over, it's not a big deal at all. */
readfile("FILENAME");
die();
只需确保将文件存储在无法从 Web 访问的目录中。
于 2009-10-11T07:28:11.190 回答
0
我习惯于在它内置的 ASP.NET 中执行此操作,但这篇文章似乎记录了您的确切情况。
于 2009-10-11T07:23:40.463 回答
0
这是我要做的:
在保存文件的远程服务器 B 上构建 PHP-SOAP-Sever。
每当用户在您的主服务器 A 上触发下载时,连接到 B 上的 SOAP 服务器并为指定 IP 地址和要下载文件的 id/路径的用户保留票证。
服务器 B 现在将为此下载创建一个 ticketId(它应该只在有限的时间内有效)并将其返回给 A。
服务器 A 将用户重定向到服务器 B,并提供 ticketId 作为 GET 参数
服务器 B 现在检查票证是否已被使用、是否过期或用户是否来自错误的 IP。如果它们都不适用,则提供文件并将票证标记为已使用。
注意:在服务器 B 上,在提供文件时不要让 PHP 继续运行,而是使用X-Sendfile 标头。否则下载可能会在 PHP 最大执行时间后停止。
于 2009-10-11T09:17:55.243 回答