Эта тема на forum.dklab.ru


Ramzes (гость): Бинарный вывод mp3 в винамп
Делаю музыкальный архив... Столкнулся с проблемой: выводится все только когда перестает работать скрипт... т.е. я не могу во время чтения выводить музыку винампу... она ему попадает только по завершении цикла, а мне нужно чтоб все сразу отправлялось... Что делать? Флаш почему-то не работает тут :(

// ...
// пропущены строки получения записи из базы данных
$m=$db->farray();
header('Content-type: audio/mpeg');
header('Content-Length: '.filesize($m['path']));
header('Accept-Ranges: bytes');

$fp = fopen($m['path'],'rb');
while (!feof($fp))
{
print fread($fp,1024);
flush();
}
Anonymous:
Черт! ребята! Модераторы!! Я случайно зыбыл тему написать! Переименуйте в "Бинарный вывод mp3 в винамп"...
Не ругайтесь, я случайно... :)
ЗЫ На счет вируса тоже не ругайтесь... =) Просто я после посещения той ссылки целый день лечился... Захлестнули эмоции... Я не псих :)
Ramzes:
Блин, достало! Иду региться к вам! Задолбался свое имя вводить!!! :) Хоть в куки сохраняли бы...
ЗЫ Предыдущее сообщение от меня =)
Ant:
Я не псих
Спорное утверждение. Пока видно одно: Вы не уравновешанный человек. А на счёт регистрации — это правильно.
Юрий Насретдинов:
Ramzes:
Попробуй ob_flush()
Ramzes:
yUAC:
ob работает только для текстового вывода насколько я помню... а может я и не прав...
Юрий Насретдинов:
Ramzes:
Попробовал чтоли для начала...
Ramzes:
yUAC:
попробовал... никаких изменений.... Данные идут с задержкой... Даже не знаю в чем проблема! уже заменил на это:

include('main.php');
if (!is_numeric($id)) die('Че ты мне за *** подсунул?! ;)<br> это блин не число!!!');

$db->query('SELECT path FROM file WHERE id='.$id);
if ($db->num_rows() != 1) die('Че ты мне за *** подсунул?! ;) <br> Ну и где ты такой номер надыбал?!');

$m=$db->farray();
header("Content-Type: audio/mpeg");//application/force-download\r\n");// audio/mpeg
header("Content-Transfer-Encoding: binary\r\n");
header("Content-Length: ".filesize($m['path']));
header("Content-Disposition: attachment; filename=".basename($m['path'])."\r\n");

flush();

readfile($m['path']);

Но тем не менее какая-то задержка :( я вообще ничего понять не могу! запрос к базе занимает несколько миллисекунд... это отпадает...
Юрий Насретдинов:
Ramzes:
ob_implict_flush (как-то так) попробуй в php.ini еще поставить на 1, тоже может помочь
Ramzes:
; Implicit flush tells PHP to tell the output layer to flush itself
; automatically after every output block. This is equivalent to calling the
; PHP function flush() after each and every call to print() or echo() and each
; and every HTML block. Turning this option on has serious performance
; implications and is generally recommended for debugging purposes only.

Эм... не думаю что мне это поможет... :(
Ramzes:
Ребят, еще такой вопрос: как получить содержимое заголовков которые получил сервак? Просто когда в винампе юзаешь перемотку, отправляется специальный хедер, который управляет начальным байтом...
Дмитрий Котеров:
как получить содержимое заголовков которые получил сервак
Попробуйте, во-первых, http://php.net/getallheaders — но это только для mod_php (в CGI версии работать не будет). Еще попробуйте посмотреть print_r($_SERVER) — может, там есть нужная переменная окружения.

Вообще, если flush() не помогает, то, боюсь, трудно будет что-то сделать... Вероятно, причина не в PHP.

Эта тема на forum.dklab.ru