Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Download из MySQL, Пример кода... 
:(
    Опции темы
Kesh
  Дата 8.8.2006, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



Здравствуйте всем... У меня такой вот вопросик.
Есть БД MySQL в которой хранятся файлы, в табличке MyTable есть два поля FileName и FileData.

Файлы могут быть DOC, XLS, PDF, ZIP и RAR... Принадлежность определяется расширением в имени файла.

Из базы они достаются обычной кверей в последующим mysql_fetch_array

Внимание вопрос...

Как мне выдать содержимое их этой БД пользователю?
Т.е. Пользотель имеет ссылку вида index.php?item=64, а в ответ получает для скачивания файл test.doc, который взят из БД...

Буду очень признателен за кусочек кода...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
HalkaR
Дата 8.8.2006, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 2
Всего: 42



Код

$res = mysql_query("... WHERE id={$_GET['item']}");
$data = mysql_fetch_array($res);
header("Location: {$data['FileName']}\n\r");

Примерно так с соответсвующими проверками конечно.
PM MAIL   Вверх
Kesh
Дата 8.8.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



HalkaR, А сам файл потом как выдать? И как сообщить что я выдаю именно DOC или PDF


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
HalkaR
Дата 8.8.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 2
Всего: 42



Цитата(Kesh @ 8.8.2006,  10:26)
HalkaR, А сам файл потом как выдать? И как сообщить что я выдаю именно DOC или PDF

А так у тебя данные храняться в таблице smile

Тогда это вгядит так.

Код

header('Content-type: application/pdf\n\r') // здесь вместо application/pdf вставляешь соответствующий тип (application/msword для word, application/excel или application/vnd.ms-excel для excel, application/x-zip-compressed для zip и т.д.)
echo $data['FileData']; // выдаем файл


Добавлено @ 13:03 
Немного лучше будет вот так

Код

header( "Content-type: application/pdf" ); 

ob_start(); 

echo $data['FileData'];

$length = ob_get_length(); 

header("Content-Length: $length"); 

ob_end_flush();

PM MAIL   Вверх
Kesh
Дата 8.8.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 5
Всего: 54



HalkaR, Я вот так сделал... Вроде работает...

Код

function ExportHeader($ExportFileName){ 
    if(ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER["HTTP_USER_AGENT"], $log_version)) { 
        define('USR_BROWSER_VER', $log_version[1]); 
        define('USR_BROWSER_AGENT', 'IE'); 
    } elseif (ereg('Opera(/| )([0-9].[0-9]{1,2})', $_SERVER["HTTP_USER_AGENT"], $log_version)) { 
        define('USR_BROWSER_VER', $log_version[2]); 
        define('USR_BROWSER_AGENT', 'OPERA'); 
    } elseif (ereg('OmniWeb/([0-9].[0-9]{1,2})', $_SERVER["HTTP_USER_AGENT"], $log_version)) { 
        define('USR_BROWSER_VER', $log_version[1]); 
        define('USR_BROWSER_AGENT', 'OMNIWEB'); 
    } elseif (ereg('Mozilla/([0-9].[0-9]{1,2})', $_SERVER["HTTP_USER_AGENT"], $log_version)) { 
        define('USR_BROWSER_VER', $log_version[1]); 
        define('USR_BROWSER_AGENT', 'MOZILLA'); 
    } elseif (ereg('Konqueror/([0-9].[0-9]{1,2})', $_SERVER["HTTP_USER_AGENT"], $log_version)) { 
        define('USR_BROWSER_VER', $log_version[1]); 
        define('USR_BROWSER_AGENT', 'KONQUEROR'); 
    } else { 
        define('USR_BROWSER_VER', 0); 
        define('USR_BROWSER_AGENT', 'OTHER'); 
    } 
 
    $export_file = explode(".", $ExportFileName); 
    if(preg_match("/pdf/i", $export_file[sizeof($export_file)-1])) $mime_type = "application/pdf"; 
        elseif (preg_match("/zip/i", $export_file[sizeof($export_file)-1])) $mime_type = "application/zip"; 
        elseif (preg_match("/rar/i", $export_file[sizeof($export_file)-1])) $mime_type = "application/x-rar-compressed"; 
        elseif (preg_match("/doc/i", $export_file[sizeof($export_file)-1])) $mime_type = "application/msword"; 
        elseif (preg_match("/xls/i", $export_file[sizeof($export_file)-1])) $mime_type = "application/msexcel"; 
    else $mime_type = (USR_BROWSER_AGENT == 'IE' || USR_BROWSER_AGENT == 'OPERA') ? 'application/octetstream' : 'application/octet-stream'; 
 
    header("Content-Type: $mime_type"); 
    if (USR_BROWSER_AGENT == 'IE') { 
        header("Content-Disposition: inline; filename=$ExportFileName"); 
        header("Expires: 0"); 
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
        header("Pragma: public"); 
    } else { 
        header("Content-Disposition: attachment; filename=$ExportFileName"); 
        header("Expires: 0"); 
        header("Pragma: no-cache"); 
    } 
} 


    $query = "SELECT `$filenamefield`, `$filedatafield` FROM `competitions` WHERE `id`=$id";

    $result = mysql_query($query);
    if (mysql_num_rows($result) <> 1) { die("Файл не найден. Скачивание невозможно."); }

    $filerecord = mysql_fetch_array($result);
    
    ExportHeader($filerecord[$filenamefield]);
    
    header("Accept-Ranges: bytes"); 
    header("Content-Length: " . strlen($filerecord[$filedatafield]) ); 

    echo $filerecord[$filedatafield];



Пойдет?

Это сообщение отредактировал(а) Kesh - 8.8.2006, 14:12


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
HalkaR
Дата 8.8.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 2
Всего: 42



Если работает, то вполне пойдет smile Кстати, сейчас вроде и не в IE можно делать файлы inline.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.3871 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.