İndirilen dosya doğru biçimde değil açılış

5 Cevap

I have two php files
1. List_files ->show all uploaded files
2. Get_file ->to download files from listed files...

Şimdi ben herhangi bir görüntü veya herhangi bir metin dosyasını indirmek ve açtı almıyor açmaya çalıştığınızda,

Hata biçimi her desteklenmiyor.

Benim görüntü. Jpeg

I am using Windows Vista with Firefox.
No problem in downloading, problem is in opening the file..

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 Cevap

Senin soru yanlış dosyayı attılar, bu dosyaların bir liste, ama sorun büyük olasılıkla diğer dosya ise, get_files.php.

Most likely, you are not sending the "content-type" header. If you say it is an JPEG image, then it should read as

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

Eğer (ve tarayıcıda açmadan değil) bir download olarak istiyorsanız, bir daha başlık ekleyebilirsiniz

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

Senin sorunun get_files.php içinde. Büyük olasılıkla doğru bir content-type header set değildir.

Ben sorunu tahmin ediyorum bu şöyledir: header("Content-Disposition: attachment; filename=".$row['name']); Filenames US-ASCII kısıtlanır ve boşluk içermemelidir. Yani dosya üzerinde bazı temizlik yapmak gerekebilir. (Bazı insanlar boşluk kullanmayın, ve tırnak içinde dosya içine. Bu çalışır, ancak standart dışı Neler yok.)

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

senin başlıklarını bunu ekleyin

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

Bu sorununuzu çözebilir.

Tamam. Biz bazı hata ayıklama yapmak gerekir. Size gönderilen gerçek PHP başlıklarını gösteren bir araç kullanın. (Ben Web-Sniffer.net seviyorum. Bunu bazı Firefox eklentileri de vardır.)

Content-Length başlığını kaldırmak: ilerici indir barlar için olması güzel, ama gereksiz; yanlış ise ve bu şeyleri buggering olabilir.

Content-Disposition başlığını çıkarın. Doğru dosya tüm servis ediliyor olmadığına bakın.

Temel olarak, hep birlikte dikiş önce, tek tek her kod küçük bir bölümünü kontrol edin. Bu şekilde, hata bazı fikrim yok.