【问题标题】:PHP: is file_get_contents() bypassing external download?PHP:file_get_contents() 是否绕过外部下载?
【发布时间】:2016-07-05 14:13:19
【问题描述】:

以下问题: 我的服务器上有一个大文件(~2GB)。 登录到我的站点的用户可以从我的服务器下载此文件。

不幸的是,我的服务器没有那么强大。当许多用户同时下载此文件时,他们的 dl 速度都会很差。

所以我将文件上传到谷歌驱动器并生成一个直接下载链接: http://googledrive.com/host/[FILE_ID]

我的代码:

<?php
  $remoteFile = 'http://googledrive.com/host/[FILE_ID]';
  $filename = basename($remoteFile);
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: attachment; filename=\"$filename\"");
  echo file_get_contents($remoteFile); 
?>

我的问题:是 file_get_contents() 真的绕过了 dl 还是这个文件通过我的服务器?如果是这样,那没有任何意义:[]

【问题讨论】:

  • 您所做的只是将其存储在其他地方。这不会解决任何带宽问题。您可以始终将用户重定向到直接下载页面。
  • 但我想隐藏 googledrive 链接。用户不应该有机会获得 googledrive 链接并分享它。只有在用户登录时才能下载
  • 如果他们没有看到 google 驱动器链接,这意味着您首先将文件传输到服务器,然后传输到客户端,这会使您的带宽问题加倍。一种解决方案可能是在每次下载后生成唯一的 google drive share 链接,这样只有经过身份验证的用户才能下载,并且链接不能多次使用。
  • 我现在的解决方案是租一个可以解释php的服务器。将文件存储在那里,如果使用某个令牌,则创建一个流式传输文件的 php 脚本。令牌将从 $_GET 获取

标签: php file-get-contents download mirroring


【解决方案1】:

每次下载后生成一个唯一的 google drive share 链接,这样只有经过身份验证的用户才能下载,并且链接不能多次使用。

【讨论】:

    猜你喜欢
    • 2021-01-08
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多