2010-01-26 73 views
0

不开放,我有两个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.'; 
    } 
    ?> 
+0

你应该在这里显示get_files而不是list_files。 – 2010-01-26 12:30:01

+0

哦,我现在是我soory显示正确的文件 – 2010-01-26 15:46:21

+0

您是否尝试用记事本打开文件?它发生在我身上,而所有被保存的内容都是警告和错误。 – Dolfa 2010-01-26 12:35:04

回答

1

你的问题是get_files.php。最有可能的是它没有设置正确的content-type header

2

你在你的问题中发布了错误的文件,这是一个文件列表,但最有可能的问题在于其他文件get_files.php

很可能,您没有发送“内容类型”标题。 如果你说这是一个JPEG图像,那么它应该作为

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

如果你想它作为一个下载(在浏览器没有打开它)读取,你可以添加一个头

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

我猜测问题出在这里:header("Content-Disposition: attachment; filename=".$row['name']);文件名被限制为US-ASCII,不应包含空格。所以你可能需要对文件名进行一些清理。 (有些人不使用空格,并用引号引起来的文件名。这工作,但它是非标准的。)

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

+0

在那里我已经给出空间将u plz编辑代码或告诉编写特定的行,我得到wrongi没有使用空间uin []。 – 2010-01-26 16:09:09

+0

我只是说你应该小心地发回用户生成的内容(如文件名),而不必先清理它。 $ row ['name']可以是任何东西,不是吗?所以确保它是US-ASCII,没有空格。 – TRiG 2010-01-28 10:13:34

0

添加到您的标题

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

这可能会解决您的问题。

+0

有时候工作,但是不标准。强制下载的正确方法是Content-Disposition标题。 – TRiG 2010-01-28 10:14:13

0

好的。我们需要做一些调试。使用一个工具来显示你正在发送的PHP头文件。 (我喜欢Web-Sniffer.net,也有一些Firefox插件可以做到这一点)。

删除Content-Length标题:对于渐进式下载栏很不错,但它是不必要的;如果这是错误的,那可能会令人烦恼。

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

基本上,单独检查每个小部分代码,然后将它们拼接在一起。这样,你就可以知道错误在哪里。