强制索尼PRS-T1浏览器下载.epub文件

时间:2012-04-10 16:45:02

标签: php apache http http-headers download

我的电子书阅读器内置浏览器(索尼PRS-T1)不知何时不喜欢下载.epub文件。

通常它会打开.epub文件,好像它们是文本文件一样。

使用这个php-download-script我设法强制浏览器下载我存储在服务器上的文件:

<?php

$path = $_GET['path'];
$mimeType = $_GET['mimeType'];

if(!file_exists($path)) {
    // File doesn't exist, output error
    die('file not found');
} else {
    $size = filesize($path);
    $file = basename($path);

    // Set headers
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers 
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Content-Type: $mimeType");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: $size");
    // Read the file from disk
    readfile($path);
}
exit();
?>

现在,PRS-T1会下载该文件但由于某种原因我不明白它会将文件扩展名从.epub更改为.htm - 这很奇怪。

但似乎有办法正确地做到这一点:当我从readbeam.com下载.epub文件时,它就像预期的那样工作(我在http://www.mobileread.com/forums/showthread.php?t=163466找到了这个提示)。

这是什么,它在他们的配置和我的配置之间产生了差异?

这是我用firebug发现的:

http://tinypic.com/r/vzzkzp/5 readbeam

http://tinypic.com/r/2h7pbth/5 mine

1 个答案:

答案 0 :(得分:2)

您的Content-Type标题与readbeam标题不匹配。

application/epub zip!= application/epub+zip

+可能被PHP视为空格,因为它似乎是通过$ _GET传递它。