|
|
|
| Всем привет!
Появилась такая проблемка.
Есть флеш-плеер на сайте, он воспроизводит музыку, если кинуть в него прямой линк на файл на сервере. Сейчас с сервера(сторонний) скачать напрямую файл нельзя, поэтому выдаю песню, через скрипт. Если вставляю свою скриптовую ссылку, то она не подходит. После долгих размышлений так и не дошло до меня, как сделать скриптом, который считывает данные а потом выводит их как файл, имитацию отдачи какбы сервером. Какие параметры передать и тд.. просто в ступоре. Простая отдача считанных символов ничего не даёт.
Кто сталкивался или просто знает - буду признателей любой помощи! | |
|
|
|
|
|
|
|
для: lorenberg
(26.11.2008 в 23:16)
| | что значит "иммитацию отдачи"?
Может Вам потоковый вывод вообще нужен? | |
|
|
|
|
|
|
|
для: ddhvvn
(26.11.2008 в 23:35)
| | > что значит "иммитацию отдачи"?
Есть сервер. На нём лежит мп3файл - http://server.ru/pesnya.mp3
Вот чтобы его скачать, я просто вбиваю ссылку в "качалку" или захожу с ссылки на сайте. Происходят какие-то действия, которые я не замечаю и я просто получаю файл.
Флеш-плеер каким-то образом различает подачу данных в него, т.к. если поместить в него прямой линк - то он играет. А если помещать линк, который выдаёт(для скачки) файл на сайте, то плеер его не понимает. Вот и нужно подделать выдачу данных скрипта, чтобы плееру казалось, что идёт прямая отдача со стороннего сервера.
>Может Вам потоковый вывод вообще нужен?
А вот и не знаю, может и нужен. Поэтому и обратился за помощью) | |
|
|
|
|
|
|
|
для: lorenberg
(26.11.2008 в 23:50)
| | Просто отправить HTTP-заголовки и вывести файл (это как капчу выводить...), только опять же не хватит памяти если файл большой. | |
|
|
|
|
|
|
|
для: 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'); }
|
Далее считываю и вывожу. Выводится таким образом, что выскакивает окошечко "Скачать или открыть"(если браузером пользоваться, без качалок), а качалка сразу подхватывает и скачивает.
Какие именно заголовки отправить, т.к. Ваш пример не сгодился. | |
|
|
|
|
|
|
|
для: 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" отвечает за открытье окошка сохранеия файла. | |
|
|
|
|
|
|
|
для: Zend72
(27.11.2008 в 00:16)
| | Протестил.
У мя квиктаймом воспроизводистя в браузере, у другого друга тоже, а у другого выдаётся табличка воспроизвести или скачать, но скачивается с названием скрипта тоесть script.php
Плеер опять не воспроиводит. Что делать?
p.s. Свёл заголовки до минимума - header('Content-Type: audio/mpeg');
Файл воспроизводится в браузере средствами Квиктайма, но в плеере тишина. | |
|
|
|
|
|
|
|
для: 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($file, filesize($path));
fclose($file);
echo $buffer;
}
?>
|
| |
|
|
|