下载的文件无法以正确的格式打开

时间:2010-01-26 12:25:48

标签: php

我有两个php文件
 1. List_files - >显示所有上传的文件
 2. Get_file - >从列出的文件中下载文件...

现在,当我下载任何图像或任何文本文档并尝试打开它时,它无法打开,

错误是每次都不支持格式。

我的图片是.jpeg

我正在使用Windows Vista和Firefox 下载没问题,问题是打开文件..

get_file.php

<?php
                                                                        // Make sure an ID was passed
    if(isset($_GET['id'])) 
    {
                                                                      // Get the ID
        $id = intval($_GET['id']);

                                                                   // Make sure the ID is in fact a valid ID
        if($id <= 0)  
        {
            die('The ID is invalid!');
        }
       else 
        {
                                                              // Connect to the database
           $con=mysql_connect("localhost","root","");

                if(!$con)
                {
                    die('Could Not Connect:'.mysql_error());
                }    

                mysql_select_db("tcs",$con);

                                                                                                        // Fetch the file information
           $query = "SELECT `mime`, `name`, `size`, `data` FROM `file` WHERE `id` = {$id}";
           $result=mysql_query($query,$con);

           if($result) 
           {

                $count = mysql_num_rows($result);                                                           // Make sure the result is valid
                if($count == 1) 
                {
                                                                                        // Get the row
                   $row = mysql_fetch_array($result);


                    // Print headers

                   header("Content-Type: ".$row['mime']);
                   header("Content-Length: ".$row['size']);
                   header("Content-Disposition: attachment; filename=".$row['name']);

                   // Print data
                   echo $row['data'];
               }
               else 
               {
                   echo 'Error! No image exists with that ID.';
               }

               // Free the mysqli resources
               //mysql_free_result($result);
           }
           else 
           {
               echo "Error! Query failed: <pre>".mysql_error()."</pre>";
           }
           mysql_close();
       }
   }
   else 
   {
       echo 'Error! No ID was passed.';
   }
   ?>

5 个答案:

答案 0 :(得分:2)

您在问题中发布了错误的文件,这是一个文件列表,但问题很可能出在另一个文件get_files.php

最有可能的是,您没有发送“内容类型”标头。 如果你说它是一个JPEG图像,那么它应该是

header("Content-Type: image/jpeg");

如果您想将其作为下载(而不是在浏览器中打开),则可以添加一个标题

header("Content-Disposition: attachment;filename=your_current_filename.jpg");

答案 1 :(得分:1)

您的问题出在get_files.php。很可能它没有设置正确的content-type header

答案 2 :(得分:0)

我猜测问题在于:header("Content-Disposition: attachment; filename=".$row['name']);文件名仅限于US-ASCII且不应包含空格。所以你可能需要对文件名进行一些清理。 (有些人确实使用空格,并用引号将文件名括起来。这样可行,但它不合标准。)

http://www.ietf.org/rfc/rfc2183.txt

答案 3 :(得分:0)

将此添加到标题

header("Content-type: application/octet-stream");

这可能会解决您的问题。

答案 4 :(得分:0)

好。我们需要做一些调试。使用工具向您显示正在发送的实际PHP标头。 (我喜欢Web-Sniffer.net。还有一些Firefox插件可以做到这一点。)

删除Content-Length标题:对于渐进式下载栏很有用,但这是不必要的;如果这是错的,那可能会让事情变得更糟。

删除Content-Disposition标头。查看是否正在提供正确的文件。

基本上,在将它们拼接在一起之前,分别检查代码的每个小部分。这样,您就可以了解错误的位置。