从PHP损坏文件下载,上传很好

时间:2012-10-10 23:11:39

标签: php file-io download

当我从网站上传文件到我的服务器时,它工作正常。但是,当我尝试下载它们时,文件每次都会损坏。如果我在服务器上打开文件管理器,我可以通过它下载文件,它们工作正常。我知道文件上传正常,下载过程似乎是一个错误。

文件保存在我的服务器上,其名称由表中的ID命名,后跟其扩展名。该名称从数据库中检索,并在下载时使用。

id  |  userid  |  filename   |   extension  |  size
1       2         test.jpeg       jpeg         123456

//the extension column is just for testing, yes I know it's redundant

test.jpeg将以1.jpeg的形式保存在我的服务器上。

//this is the very first bit of code on the page aside from starting the session
if(isset($_POST['downloadFile'])){
    $file = new fileprocessing;
    $fileID = mysql_real_escape_string($_POST['hiddenFileDownload']);
    $file->serveFile($fileID); 
}

这是serveFile函数,它可以找到文件并允许用户下载它

function serveFile($fileID){
    $sql = mysql_query("select * from files where id = '$fileID'");
    $file = mysql_fetch_array($sql);
    $ext = $file['extension'];

    header('Content-type: image/x-generic'); //I'm trying jpegs only right now

    header('Content-Disposition: attachment; filename="'.$file['filename'].".".$ext.'" ');

    readfile('/home/.../public_html/user_files/'. $fileID.".".$ext.' ');
}

下载文件时,它的名称正确。我不确定这是哪里出错的。我没有正确打开文件吗?

编辑 - 在我的服务文件功能中调整了我的扩展程序

1 个答案:

答案 0 :(得分:1)

听起来很奇怪,我在过去查看“.jpeg”文件扩展名时遇到了问题(我有一个人们必须上传产品图片的网站)。但是,可以将扩展名重命名为“.jpg”并查看相同的文件而不进行任何中断。您可以尝试在上传时将“.jpeg”扩展名重命名为“.jpg”,然后查看下载/查看的结果是否不会更改。