Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php readfile()下载脚本不';我不能在另一个网站上工作_Php_Download_Readfile - Fatal编程技术网

php readfile()下载脚本不';我不能在另一个网站上工作

php readfile()下载脚本不';我不能在另一个网站上工作,php,download,readfile,Php,Download,Readfile,我在使用php下载脚本时遇到了一些问题。这是一个pdf文件,点击下载后,它会将整个文件作为纯文本抛出,而不是下载。jpeg和其他文件也会发生这种情况 这个错误只有在我将一个类包装在代码中时才会发生-> <?php class BaseClass { function __construct() { $this->makeDownload(); } public function makeDownload() { $dow

我在使用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();
?>

这意味着HTTP头未正确设置,即
内容类型
内容配置
,这会导致浏览器将响应视为纯文本。这可能是由两方面造成的:

  • 您的PHP实际上并没有输出这些标题。这样做的原因是,由于您以前已经发送过内容,因此无法再输出标题。启用错误报告要确认这一点,您将看到有关此情况的错误消息。是的,这可能在一台服务器上工作,但在另一台服务器上不工作。查看所有可能性的详细说明

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


  • 我的脚本在调用下载之前有一个回音。这导致了“headers ready sent error”(标题已发送错误),该错误在我启用错误报告后显示。我从未想过这会让下载出错,这就是为什么我没有在上面的示例中添加echo。现在可以用了,谢谢。