Загруженный файл не открывается в правильном формате - PullRequest
0 голосов
/ 26 января 2010

У меня есть два php-файла
1. List_files -> показать все загруженные файлы
2. Get_file -> для загрузки файлов из перечисленных файлов ...

Теперь, когда я загружаю любое изображение или любой текстовый документ и пытаюсь открыть его, он не открывается,

Ошибка - формат не поддерживается каждый раз.

Мое изображение .jpeg

Я использую Windows Vista с Firefox.
Нет проблем с загрузкой, проблема с открытием файла ..

<code>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()."
"; } mysql_close (); } } еще { эхо 'Ошибка! ID не был передан. '; } ?>

Ответы [ 5 ]

2 голосов
/ 26 января 2010

Вы разместили неправильный файл в своем вопросе, это список файлов, но проблема, скорее всего, в другом файле, get_files.php.

Скорее всего, вы не отправляете заголовок "content-type". Если вы говорите, что это изображение в формате JPEG, тогда оно должно читаться как

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

Если вы хотите загрузить его (а не открывать в браузере), вы можете добавить еще один заголовок

header("Content-Disposition: attachment;filename=your_current_filename.jpg");
1 голос
/ 26 января 2010

Ваша проблема в get_files.php. Скорее всего, он не устанавливает правильный заголовок типа контента .

0 голосов
/ 28 января 2010

Хорошо. Нам нужно сделать некоторую отладку. Используйте инструмент, который показывает фактические отправляемые заголовки PHP. (Мне нравится Web-Sniffer.net. Есть также несколько плагинов Firefox, которые делают это.)

Удалите заголовок Content-Length: это хорошо для прогрессивных баров загрузки, но это не нужно; и если это не так, то это может испортить ситуацию.

Удалить заголовок Content-Disposition. Проверьте, обслуживается ли нужный файл вообще.

В основном, проверяйте каждую небольшую часть кода по отдельности, прежде чем соединять все вместе. Таким образом, у вас есть представление о том, где ошибки.

0 голосов
/ 26 января 2010

добавьте это к своим заголовкам

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

это может решить вашу проблему.

0 голосов
/ 26 января 2010

Я предполагаю, что проблема заключается в следующем: header("Content-Disposition: attachment; filename=".$row['name']); Имена файлов ограничены US-ASCII и не должны содержать пробелов. Так что вам может понадобиться очистить имя файла. (Некоторые люди используют пробелы и заключают имя файла в кавычки. Это работает, но это нестандартно.)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...