Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выдать файл, как будто сервер
 
 автор: lorenberg   (26.11.2008 в 23:16)   письмо автору
 
 

Всем привет!

Появилась такая проблемка.
Есть флеш-плеер на сайте, он воспроизводит музыку, если кинуть в него прямой линк на файл на сервере. Сейчас с сервера(сторонний) скачать напрямую файл нельзя, поэтому выдаю песню, через скрипт. Если вставляю свою скриптовую ссылку, то она не подходит. После долгих размышлений так и не дошло до меня, как сделать скриптом, который считывает данные а потом выводит их как файл, имитацию отдачи какбы сервером. Какие параметры передать и тд.. просто в ступоре. Простая отдача считанных символов ничего не даёт.

Кто сталкивался или просто знает - буду признателей любой помощи!

  Ответить  
 
 автор: ddhvvn   (26.11.2008 в 23:35)   письмо автору
 
   для: lorenberg   (26.11.2008 в 23:16)
 

что значит "иммитацию отдачи"?
Может Вам потоковый вывод вообще нужен?

  Ответить  
 
 автор: lorenberg   (26.11.2008 в 23:50)   письмо автору
 
   для: ddhvvn   (26.11.2008 в 23:35)
 

> что значит "иммитацию отдачи"?

Есть сервер. На нём лежит мп3файл - http://server.ru/pesnya.mp3
Вот чтобы его скачать, я просто вбиваю ссылку в "качалку" или захожу с ссылки на сайте. Происходят какие-то действия, которые я не замечаю и я просто получаю файл.
Флеш-плеер каким-то образом различает подачу данных в него, т.к. если поместить в него прямой линк - то он играет. А если помещать линк, который выдаёт(для скачки) файл на сайте, то плеер его не понимает. Вот и нужно подделать выдачу данных скрипта, чтобы плееру казалось, что идёт прямая отдача со стороннего сервера.

>Может Вам потоковый вывод вообще нужен?
А вот и не знаю, может и нужен. Поэтому и обратился за помощью)

  Ответить  
 
 автор: Zend72   (26.11.2008 в 23:52)   письмо автору
 
   для: lorenberg   (26.11.2008 в 23:50)
 

Просто отправить HTTP-заголовки и вывести файл (это как капчу выводить...), только опять же не хватит памяти если файл большой.

  Ответить  
 
 автор: lorenberg   (27.11.2008 в 00:08)   письмо автору
 
   для: Zend72   (26.11.2008 в 23:52)
 

>Просто отправить HTTP-заголовки и вывести файл (это как капчу выводить...), только опять же не хватит памяти если файл большой.

Можете поподробнее, т.к. я так и делаю.

header("Content-Disposition: attachment; filename=\"$filen\""); 
header("Last-Modified: {$ftime}"); 
header("Content-Length: ".($fsize-$range)); 
header("Accept-Ranges: bytes"); 
header("Content-Range: bytes {$range}-".($fsize - 1)."/".$fsize);

if(isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
{ Header('Content-Type: application/force-download'); } else { Header('Content-Type: application/octet-stream'); }


Далее считываю и вывожу. Выводится таким образом, что выскакивает окошечко "Скачать или открыть"(если браузером пользоваться, без качалок), а качалка сразу подхватывает и скачивает.

Какие именно заголовки отправить, т.к. Ваш пример не сгодился.

  Ответить  
 
 автор: Zend72   (27.11.2008 в 00:16)   письмо автору
 
   для: lorenberg   (27.11.2008 в 00:08)
 

Видимо как то так:


<?php

header
("Last-Modified: {$ftime}");  
header("Content-Length: ".($fsize-$range));  
header("Accept-Ranges: bytes");  
header("Content-Range: bytes {$range}-".($fsize 1)."/".$fsize); 
header('Content-Type: audio/mpeg');

?>


PS
Заголовок Content-Disposition: attachment; filename=name.mp3" отвечает за открытье окошка сохранеия файла.

  Ответить  
 
 автор: lorenberg   (27.11.2008 в 00:47)   письмо автору
 
   для: Zend72   (27.11.2008 в 00:16)
 

Протестил.

У мя квиктаймом воспроизводистя в браузере, у другого друга тоже, а у другого выдаётся табличка воспроизвести или скачать, но скачивается с названием скрипта тоесть script.php

Плеер опять не воспроиводит. Что делать?

p.s. Свёл заголовки до минимума - header('Content-Type: audio/mpeg');
Файл воспроизводится в браузере средствами Квиктайма, но в плеере тишина.

  Ответить  
 
 автор: Zend72   (26.11.2008 в 23:48)   письмо автору
 
   для: lorenberg   (26.11.2008 в 23:16)
 

Сначала HTTP-зголовки отправить, потом прочитать файл и вывести его, но тут проблема: если файл большой, то не хватит памяти (по умолчанию под скрипт выделяется 30 мегабайт) и скрпт завершиться с ошибкой.

Вот первое что в голову пришло:


<?php
          $file_type 
'text/html';
          
$path '/home/zend/test.html';
          
$file_name 'test.html'
          
header("Content-type: ".$file_type);
          
header("Content-Disposition: attachment; filename=".$file_name);
          
$file fopen($path'r');
          if(!
$file)
          {
            echo 
'Ошибка открытья файла';
          }
          else
          {
            
$buffer fread($filefilesize($path));
            
fclose($file);
            echo 
$buffer;
          }
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования