【问题标题】:File downloading partially and I need entire file文件下载部分,我需要整个文件
【发布时间】:2013-01-29 14:27:51
【问题描述】:

我有一些文件试图通过使用标头下载到我的服务器上。它会找到该文件,但当它们为 2 到 3 MB 时,它只会下载 200 到 300 kb 的这些文件。我似乎无法将手指放在这个上。

这是我的代码。

我在文件的开头有一个 ob_start 方法,仅供参考。

$fileName = $row['fileURL'];
$fileURL = 'powerpoints/' . $fileName;
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fileName);
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($fileURL);
exit();

在下面编辑..修改后的代码

$fileName = $row['fileURL'];
$fileURL = 'powerpoints/' . $fileName;
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fileName);
header("Content-Transfer-Encoding: binary");
header('Cache-Control: must-revalidate');
header('Content-Length: ' . filesize($row['size']));

$fdl = fopen($fileURL, "r"); 

if ($fdl === false) {
    die("Issue opening $fileURL");
}

while (!feof($fdl))
{
    $buffer = fread($fdl, 4096); 
    print $buffer;
}  

fclose($fdl); 

【问题讨论】:

  • 您是否仔细检查了文件大小($file)的输出内容长度?如果这不正确或空白,它可能会提前终止下载。我没有看到您的代码示例中指定的 $file 变量。

标签: php header http-headers


【解决方案1】:

Readfile 将尝试一次将所有内容读入内存。另外,我看不出在这里使用输出缓冲有什么意义,因为您只需读取和输出块的文件就有更好的成功机会。

所以我会摆脱输出缓冲,并尝试这样的东西而不是 readfile:

sleep(1);
$fdl = fopen($fileURL, 'r');
if ($fdl === false) {
  die("Issue opening $fileURL");
}
while(!feof($fdl)) {
  $buffer = fread($fdl, 4096);
  print $buffer;
}
fclose($fdl);

附加说明,当您对缓存控制进行必须重新验证时,为什么还要有Pragma: public

【讨论】:

  • 我在标题上关注了本教程一段时间,我认为它就在那里。我摆脱了它。
  • 现在它下载了 500 kb 而不是几百个。
  • @wowzuzz 你现在可以在某处添加你的代码,以便从
  • @wowzuzz 好的,我没有看到那里的问题...您是否测试过是否发生与您从何处访问页面无关的相同问题?
  • eis,感谢您的帮助。它最终成为 fileURL 的错误路径,这是问题 非常感谢您的帮助。
猜你喜欢
  • 2019-02-13
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2019-11-21
相关资源
最近更新 更多