Скачивание mp3 файлов через скрипт

floydback

Новичок
Скачивание mp3 файлов через скрипт

Здравствуйте!

Сразу прошу прощения у модераторов, если тему поместил не в подходящий форум, подходящий не нашел.

У меня такая задача: нужно отдавать файлы mp3 через скрипт, чтобы убрать возможность тотального скачивания и как-то вести отчет скачиваемости файлов.
В общем, все стандартно.
Защита от скачивания такая: создаю сессии в БД перед скачкой (почему не просто сессии - 2 сервера: на одном сайт, на втором файлы mp3)
При успешной проверки сессии - отдаю файл mp3 через скрипт.

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

У меня и во многих местах, где я тестировал во всех браузерах все отлично скачивается.

Заголовки отдаю вроде правильно, перепробовал несколько сторонних скриптов по скачке через php файл, т.к. уже думал сам ошибаюсь в загаловках - безрезультатно ((
Вот пример простого варианта кода без "докачек" и т.п., который не работает:
PHP:
//$filename - путь к файлу
// ...

if (!file_exists($filename))
{
	header ("HTTP/1.0 404 Not Found");
	exit;
}
 
// размер файла
$fsize = filesize($filename);

// дата модификации
$ftime = date("D, d M Y H:i:s T", filemtime($filename));


if (!$handle = @fopen($filename, "rb"))
{
	header ("HTTP/1.0 403 Forbidden");
	exit;
}
 
 
header("HTTP/1.1 200 OK");
header('Content-Type: audio/mpeg');
header("Content-Disposition: attachment; filename=\"".basename($filename)."\"");
header("Last-Modified: {$ftime}");
header("Accept-Ranges: bytes");
header("Content-Length: ".$fsize); 


while(!feof($handle))
{
	$buf = fread($handle,512);
	print($buf);
}
 
fclose($handle);
Content-type: application/octet-stream тоже пробовал, все аналогично.

При скачивании по прямой ссылке с сервера, все хорошо.

Я не знаю как решить эту проблему, тем более протестировать ошибку не могу - везде где тестил все было удачно.
Возможно проблема в настройках на хостинге?

Подскажите у кого какие мысли есть.
Спасибо.
 

DiMA

php.spb.ru
Команда форума
мысль - отдавать файл не через пхп, а через веб-сервер nginx
погугли, куча примеров сделать сессию и учитывать скачки, как ты хочешь
 

floydback

Новичок
Спасибо!
Рассмотрю этот вариант, если не останется других.
Думаю, не обойдется без писем в саппорт хостинга по поводу дополнительных настроек и т.п. А обычно этим мало что от них добmtimcz ....

Но большое спасибо за совет, для меня это ново :)
думаю этот вариант даже более оптимальный и надежный.
 

darrios

Новичок
У меня такая проблема: mp3-файлы скачиваются без тэгов.
То есть на сервере mp3-файл имеет тэги, а скачиваешь без тэгов...
Иногда бывает некоторые скаченные mp3-файлы на работают (плеер выдает ошибку: типа неизвестный формат)...

Кто знает в чем дело?
Использовал разные скрипты...

И вот так тоже :
PHP:
header('HTTP/1.1 200 OK');
	header('Connection: close');
	header('Content-Type: application/octet-stream');
	header('Accept-Ranges: bytes');
	header('Content-Disposition: attachment; filename='.$filename);
	header('Content-Length: '.$filesize);
	readfile($path);
 
Сверху