0

我在 php.net 中找到了这个脚本,它允许用户下载本地文件。每当我尝试在文件名前面使用协议时,PHP 都找不到该文件。我在 php.net 中启用了 allow_url_fopen。我应该怎么做才能允许下载远程文件?

此外,即使在下载管理器的帮助下,下载速度也很慢。我可以做些什么来提高下载速度吗?有没有办法允许下载管理器中的“恢复下载”选项?

<?php
$file = 'https://www.example.com/test.exe';
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
} else echo "file not found."
?>
4

1 回答 1

1

“恢复下载”需要实现Range标头。您必须从请求标头中获取此标头,并在发送请求时将其传递到后端。显然,可以设置在使用 HTTP 协议包装器时发送的标头fopen(让我们看看我是否找到了这样的示例......)

如果要下载的文件可以通过 Internet 公开访问,为什么不使用Location标头将用户重定向到那里?这会将您的服务器从数据路径中删除,可能会提供最快的选项。

您的第二个最佳选择是在 Web 服务器上配置反向代理,例如使用 mod_rewrite。这至少将 PHP 解释器排除在外。

于 2013-07-26T09:16:53.677 回答