0

所以我将文件存储在 Amazon S3 上。我的客户从我们的网站下载这些文件,他们点击下载并将信息发送到我们的 download.php 页面(客户看不到此页面),但它使用 PHP 获取文件名和路径(代码如下) . 但我们遇到的问题是它没有告诉浏览器文件大小,所以当客户下载时,他们会看到“剩余时间未知”。我怎样才能使 download.php 页面可以获取该信息并单独传递它?

<?php

$file_path = "http://subliminalsuccess.s3.amazonaws.com/";
$file_name = $_GET['download'];
$file = file_get_contents('$file_name');

header('application/force-download');
header( 'Content-Type: application/octet-stream' );
header('Content-Disposition: attachment; filename="'.$file_name.'"');

$pos = strpos($file_name, "http");

if ($pos !== false && $pos == 0)
{
readfile($file_name);
} else readfile($file_path.$file_name);

?>
4

1 回答 1

1

这很容易。看,当您执行 file_get_contents() 时,您可以使用 strlen() 获取文件大小。然后在响应中发送 Content-Length 标头。

<?php

$file_path = 'http://subliminalsuccess.s3.amazonaws.com/';
$file      = trim($_GET['download']);
$file_name = $file_path.$file;

$file_contents = file_get_contents($file_name)
    OR die('Cannot get the file: '.$file);

header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($file_contents));
header('Content-Disposition: attachment; filename="'.basename($file).'"');

echo $file;

顺便说一句,您的代码中有很多错误。例如,您读取文件两次,一次使用 file_get_contents(),第二次使用 readfile()。$file_name 变量没有 URI。file_get_contents('$file_name') 也是错误的。

此外,您不检查传入的 URL,而只是 readfile() 它不好,因为有人可能会将任何 URL 传递给您的脚本......

于 2012-05-25T01:38:14.310 回答