1

我正在构建我网站的“高级”部分,并且我需要直接(在不同的服务器上)向具有特殊权限的用户(存储在 mysql db 中的帐户)授予对远程文件的下载访问权限。我的网站是用 php/mysql 编码的,所以一个 php 解决方案会很棒。

4

4 回答 4

3

将所有下载链接指向一个 php 文件,该文件将执行所有凭据检查。

你可以调用文件download.php

通过 cookie、get、post、session 或您验证权限的任何方式传递参数。

验证凭据后,您可以发送适当的标头。

如果是图像,则标题为header("Content-type: image/jpeg");

我假设你也拥有这个远程服务器。

一些有用的链接:

MIME 类型

PHP头函数

于 2009-10-11T07:22:12.980 回答
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

这是我要做的:

  1. 在保存文件的远程服务器 B 上构建 PHP-SOAP-Sever。

  2. 每当用户在您的主服务器 A 上触发下载时,连接到 B 上的 SOAP 服务器并为指定 IP 地址和要下载文件的 id/路径的用户保留票证。

  3. 服务器 B 现在将为此下载创建一个 ticketId(它应该只在有限的时间内有效)并将其返回给 A。

  4. 服务器 A 将用户重定向到服务器 B,并提供 ticketId 作为 GET 参数

  5. 服务器 B 现在检查票证是否已被使用、是否过期或用户是否来自错误的 IP。如果它们都不适用,则提供文件并将票证标记为已使用。

注意:在服务器 B 上,在提供文件时不要让 PHP 继续运行,而是使用X-Sendfile 标头。否则下载可能会在 PHP 最大执行时间后停止。

于 2009-10-11T09:17:55.243 回答