Направление файла на вывод!

shefeduard

Guest
Направление файла на вывод!

Здравствуйте, я писал вам когда то, но мне внятно не кто не ответил, а сказали искать на форуме!
но я все облазил - не нашел :(((((

Есть такая фича... забиваешь рисунок в базу в бинарном коде,
далее пишишь скрипт что бы он выводил ее - предложил сохранять ее!

но при сохранении - имя файла = имени скрипта!!

как исправить эту проблему! пожалуйста хотябы ссылку адйте где можно прочесть...
 

moxnatiy

Новичок
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($content));
header('Content-Disposition: attachment; filename='.$file_name.');

а зачем тебе хранить картинки в базе?
ты же не собираешься делать по ним полно-текстовый поиск?
 

shefeduard

Guest
)))
нет, я не хранб картинки в базе, просто эта статья есть, на этом сайте!!! я так и написал!!!

а мен надо направлять флеш файлы на выаод!!!

а так де где можно прочитать про
header('Content-Disposition: );

не саму функцию header - а параметры для нее ?
 

shefeduard

Guest
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($content));
header('Content-Disposition: attachment; filename='.$file_name.');

Чет я не могу разобратся
у меня есть фаил http://www.domain.com/file.swf
пишу
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename=http://www.domain.com/file.swf
);

он мне его пустым сохраняет, да еще имя = названию файла!!!
как сделать нормально?
 

white phoenix

Новичок
moxnatiy
Давай только рабочие примеры.
shefeduard
> у меня есть фаил http://www.domain.com/file.swf
Тебе нужно отдать на скачивание локальный файл или удаленный?
Если локальный, то:
PHP:
$path = 'file.swf';
header('Content-type: application/octet-stream');
header('Content-Length: '.filesize($path));
header('Content-disposition: attachment; filename="'.basename($path).'";');
readfile($path);
А если удаленный, то
PHP:
$path = 'http://www.domain.com/file.swf';
$data = file_get_contents($path);
header('Content-type: application/octet-stream');
header('Content-Length: '.strlen($data));
header('Content-disposition: attachment; filename="'.basename($path).'";');
echo $data;
 

shefeduard

Guest
да удаленный

но иногда бывают глюки и этот скрипт выводит в текстовом виде этот фаил прям в браузер...
СПАСИБО...
 

Анатолий

Новичок
shefeduard
Такой глюк, наверное, в Опере случается, да?
У меня тоже так бывает. Так и не нашел как с этим бороться.
 

shefeduard

Guest
PHP:
<?php
$data = "http://eagames.505.com1.ru:8037/WWW/flash_games/135/flash.swf"; 
$data = file_get_contents($path); 
header("Content-type: application/octet-stream"); 
header('Content-Length: '.strlen($data));
$name = md5(125);
$name = substr($name, 0, 10);
$name = "www_eagames_ru_".$name."swf";
header('Content-disposition: attachment; filename="'.$name.'";'); 
echo $data;
?>
Выдается потверждение на сохранение файла, но фаил весит 0 кб - тобишь пустой!!! почему? :(
хостинг вроде нормальный - платный!

-~{}~ 27.01.06 11:53:

ааа....
соррии нашел ошибку
PHP:
$data = file_get_contents($path);
переменно $path нету, я же ее изменил на $data...
 

6epcepk

Новичок
Ребят, не получается отдать пользователю файл с удаленного сервера на скачивания.
Использую код, предложенных выше:
PHP:
$data = file_get_contents($file); // $file - http://starpromo.ru/uploads/downloads/files/emotions_by_dj_mylo_17_12_2007.mp3
header('Content-type: application/octet-stream');
header('Content-Length: '.strlen($data));
header('Content-disposition: attachment; filename="'.basename($file).'";');
echo $data;
Но ничего не выводится в браузер. Для примера - _http://www.djmylo.ru/music/download-10 должен запрашиваться файл. ФАйл большой (200 Мб).
Атрибуты на файл 777.
 

6epcepk

Новичок
Оба сервера мои, просто не хочу дублировать файлы на обоих.
 

6epcepk

Новичок
Дык и давай пользователю ссылку на другой сервер, зачем лишний траф гонять?
У меня не прямые ссылки (_http://www.djmylo.ru/music).
Если давать прямую ссылку, то придется пользователю предлагать выбрать из контекстного меню "Сохранить как", в противном случае будет аудио-файл открываться в этом же окне стандартным проигрывателем (с таким же успехом можно делать редирект на этот файл).

Причем здесь атрибуты, ты же берешь его по http
Что-то мне подсказывает, если поставить права доступа 000, то файл не возьмется (;
 

Dovg

Продвинутый новичок
В скрипте, который ты привел, пять строк
неужели так сложно самостоятельно найти ошибку

убери заголовки и сделай var_dump($data); хоть посмотришь, что приходит
 

kode

never knows best
блин, ну вы даёте, кто-же get_file_contents использует?

Корректный пример:

PHP:
$file = 'http://starpromo.ru/uploads/downloads/files/emotions_by_dj_mylo_17_12_2007.mp3';

$fp = fopen($file,"rb");

header('Content-type: application/octet-stream'); 
header('Content-Length: '.filesize($file)); 
header('Content-disposition: attachment; filename="'.basename($file).'";'); 

stream_copy_to_stream($fp, STDOUT);
 

6epcepk

Новичок
Dovg
приходит переменная типа string c данными файла.

kode
Все хорошо, но filesize для удаленного файла не возвращает значение.
Можно, конечно, посмотреть заголовки:
PHP:
$headers = array_change_key_case(get_headers($file, 1), CASE_LOWER);
$filesize = $headers['content-length'];
Но почему-то в обоих случаях файл приходит нулевого размера (хотя размер возвращает нормальный для заголовков).
 

kode

never knows best
Автор оригинала: 6epcepk
kode
Все хорошо, но filesize для удаленного файла не возвращает значение.
Можно, конечно, посмотреть заголовки:
PHP:
$headers = array_change_key_case(get_headers($file, 1), CASE_LOWER);
$filesize = $headers['content-length'];
Но почему-то в обоих случаях файл приходит нулевого размера (хотя размер возвращает нормальный для заголовков).
Да, неправ, нужно вытаскивать из хидеров, но не всегда Content-Length посылает
 
Сверху