PHP强制下载会产生损坏的文件

PHP强制下载会产生损坏的文件,php,html,Php,Html,首先。。。我知道这个问题在这个网站上已经讨论过很多次了,在过去的几个小时里,我一直在阅读评论和解决方案,但没有任何帮助 我在这里发布的代码已经被删减,但仍然包含我面临的问题 我创建了一个小脚本,用PHP强制下载。这只是我试图在我的网站上使用的代码的一部分,因为我不想用太多不相关的代码向您发送垃圾邮件,但它仍然包含错误的输出 此代码中的所有内容都使用10.6KB的.PNG文件进行测试 注意:原问题解决后已删除。然而,当我将代码片段输入我的网站时,我遇到了另一个问题 我创建了一个函数来下载文件: &

首先。。。我知道这个问题在这个网站上已经讨论过很多次了,在过去的几个小时里,我一直在阅读评论和解决方案,但没有任何帮助

我在这里发布的代码已经被删减,但仍然包含我面临的问题

我创建了一个小脚本,用PHP强制下载。这只是我试图在我的网站上使用的代码的一部分,因为我不想用太多不相关的代码向您发送垃圾邮件,但它仍然包含错误的输出

此代码中的所有内容都使用10.6KB的.PNG文件进行测试

注意:原问题解决后已删除。然而,当我将代码片段输入我的网站时,我遇到了另一个问题

我创建了一个函数来下载文件:

<?php
function download_file($file) 
{
    $known_mime_types=array(
        "htm" => "text/html",
        "exe" => "application/octet-stream",
        "zip" => "application/zip",
        "doc" => "application/msword",
        "jpg" => "image/jpg",
        "php" => "text/plain",
        "xls" => "application/vnd.ms-excel",
        "ppt" => "application/vnd.ms-powerpoint",
        "gif" => "image/gif",
        "pdf" => "application/pdf",
        "txt" => "text/plain",
        "html"=> "text/html",
        "png" => "image/png",
        "jpeg"=> "image/jpg"
    );  
    if(!is_readable($file)) die('<p class="error">File not found or inaccessible!</p>');

    $file_extension = strtolower(substr(strrchr($file,"."),1));
    if(array_key_exists($file_extension, $known_mime_types)){
        $mime_type=$known_mime_types[$file_extension];
    } else {
        $mime_type="application/force-download";
    };

    $fsize = filesize($file);

    header('Content-Type: ' .$mime_type);
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: '.$fsize);
    header('Accept-Ranges: bytes');
    header('Connection: Keep-Alive');
    header('Expires: 0');
    header('Pragma: public');
    header('Cache-Control:');
    readfile($file);
    exit();
}
?>

您的代码很好。但您下载的是一个致命错误,而不是图像:

<br />
<b>Fatal error</b>:  Call to undefined function fileread() in <b>/var/www/html/test.php</b> on line <b>18</b><br />

致命错误:调用第18行/var/www/html/test.php中未定义的函数fileread()
更改
fileread($file)带有
readfile($file),它应该可以工作


下次遇到“140字节的损坏文件”时,请尝试将其作为文本文件打开。

什么是“下载会话失败”?浏览器可能输出的任何特定错误?像“由于X导致下载失败”@Alan Machado浏览器错误有两种形式,具体取决于我使用的文件扩展名。1) 无法保存C:\Users\XX\AppData\Local\Temp\XX.png.part,因为无法读取源文件。2) 没有给出这个错误,但Firefox只是说下载失败。我对下载/上传问题没有什么经验,但听起来像是服务器不允许恢复挂起的下载时出现的问题(即使你不允许,但下载管理器[在这种情况下,浏览器本身]会将文件拆分为部分以获取它)。您定义了
接受范围:字节但不是
内容范围:bytes=12345-
,这可能是原因吗?(引用自)如果您的第一段代码生成一个140字节的文件,您是否尝试过在文本编辑器中打开它?该文件大小向我表明,您收到了一条错误消息,可能会为您指明正确的方向。@andrewsi我用Notepad++打开了它,其中包含了一段原始图像以及我的html源代码。打得好,我错过了它是“反向的”:)这是一个巨大的facepalm><非常感谢!它确实解决了我代码中的问题,现在我将尝试在我代码的其余部分实现它,但我相信它会起作用。当我尝试使用函数…@Frederico调用这段代码时,仍然有损坏的文件,各种各样的文件,但我目前仍在使用图像进行测试。我用Notepad++打开了损坏的文件,其中包含我的html源代码和图像。(我应该更新这个问题并发布我的新代码吗?@Federico问题已经更新,希望你能帮我解决。
<br />
<b>Fatal error</b>:  Call to undefined function fileread() in <b>/var/www/html/test.php</b> on line <b>18</b><br />