php readfile()下载脚本不适用于其他网站空间

时间:2015-12-22 11:06:39

标签: php download readfile

我有一些php下载脚本的问题。这是一个pdf文件,在点击下载后,它会将整个文件作为纯文本而不是下载文件。也适用于jpeg和其他文件。

只有在我围绕代码包装一个类时才会出现此错误 - >

<?php
class BaseClass {
    function __construct() {
       $this->makeDownload();
    }

    public function makeDownload()
    {
        $downloadfile = "./downloads/file.pdf";
        $filename = "file.pdf";
        $filesize = filesize($downloadfile);

        header("Content-Type: application/pdf"); 
        header("Content-Disposition: attachment; filename='$filename'"); 
        header("Content-Length: $filesize");

        readfile($downloadfile);
    }
}



// In BaseClass constructor
$obj = new BaseClass();
?>

previouse webspace运行此代码没有任何问题。 正如我所写的那样,新的网站空间会抛出这样的东西 - &gt;

%PDF-1.5%•144 0 obj&lt;&gt; endobj xref 144 41 0000000016 00000 n 00000 .....

没有包装类,一切正常(下载pdf)。所以这不是导致错误的方法。

在其他网站空间的php.ini中是否有任何设置,这可能导致下载包含在类垃圾邮件中的文件源代码而非下载?

1 个答案:

答案 0 :(得分:1)

这意味着未正确设置HTTP标头,即Content-TypeContent-Disposition,这会导致浏览器将响应视为纯文本。这可能是由两件事引起的:

  1. 您的PHP实际上并未输出这些标头。这样做的原因是由于您之前已经发送了内容,因此无法再输出标题。启用错误报告以确认这一点,您将看到有关此事件的错误消息。是的,这可能在一台服务器上运行,但不在另一台服有关所有可能性的详细说明,请参阅https://stackoverflow.com/a/8028987/476

  2. (不太可能在这里,但为了完整性)PHP正在输出标题,但它们被Web服务器覆盖。这是一个Web服务器配置问题,解决方案将在很大程度上取决于正在使用的服务器以及您可以和不能配置它的内容。请查阅文档和/或联系您的主持人。