【问题标题】:Readfile() does not successfully download fileReadfile() 没有成功下载文件
【发布时间】:2022-01-01 11:51:31
【问题描述】:

我创建了一小段代码来测试 readfile() 的功能,我想用它来开发我的大型项目。作为测试,这是我写的代码:

  <html>
    <head>
        <title>Test</title>
    </head>
    <body>
    
    <form method="post">
    
        <input type="submit" value="submit" name="Submit1"><br/><br/>
    
        <?php
        if(isset($_POST["Submit1"]))
        {
            $filetry = 'Cat.jpg';
    
            if (file_exists($filetry)){
                header('Content-Description: File Transfer');
                header('Content-Type: application/octet-stream');
                header('Content-Disposition: attachment; filename="'.basename($filetry).'"');
                header('Expires: 0');
                header('Cache-Control: must revalidate');
                header('Pragma: public');
                header('Content-Length'.filesize($filetry));
                readfile($filetry);
                exit;
            } 
    
        }
        ?>
    
    </form>
    </body>
    </html>

我使用https://www.php.net/manual/en/function.readfile.php的PHP手册帮助我构建代码,但我仍然不知道为什么它无法成功下载图像 and gives me a "Could not load image error". 。我读过较大的图片可能无法下载,但这张图片只有 900KB 左右。有什么我做错了吗?我将不胜感激。

【问题讨论】:

    标签: php web download readfile


    【解决方案1】:

    readfile() 可能工作正常,但问题是您在输出文件内容之前已经输出了几位 HTML。该 HTML 与来自readfile() 的数据一起出现在最终下载的输出中。这将使生成的下载内容作为 JPEG 格式无效。

    要解决它,只需移动

    if(isset($_POST["Submit1"])) {
    ...
    }
    

    阻止之前页面上的任何其他输出。 (因为 exits 位于块的末尾,这将确保不会下载其他后续内容作为文件的一部分。)

    【讨论】:

    • 您好,感谢您的快速回复!我已将块文本移到 HTML 之前,我看到了一些进展,但并不完全成功。现在可以下载图像了,但它似乎只显示了几行像素化的行,而其余的则显示为灰色:imgur.com/a/ClZSuAh。这和文件流有关系吗?
    • 不确定。您似乎在某种图片库中查看它,很难从图片中分辨出来。如果您下载它并在常规的 Windows 图像查看器或其他东西中打开它,它看起来还可以吗?你验证过服务器上的原件没问题吗?
    • 是的,我在一个普通的图像查看器上打开它,它是我使用的内置于我的 Linux 操作系统的那个。我下载的原始图像看起来不错:imgur.com/a/hhNj99u 但只有在下载后,它才会像前面的示例一样显示为灰色的图像。我也在另一张图片上对其进行了测试,它仍然显示相同的结果。
    • 嗯。这有点奇怪。确保绝对没有其他内容(例如空格或隐藏字符)可能泄漏到下载的数据中。
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多