2010-01-26 94 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標題。查看是否正確提供了正確的文件。

基本上,單獨檢查每個小部分代碼,然後將它們拼接在一起。這樣,你就可以知道錯誤在哪裏。