Php. Как проверить файл mp3 на валидность?

Здравствуйте!
У меня стоит такая задача: нужно сделать загрузку файлов на сервер путем перетаскивания файлов в окно браузера в определенную область. Как дополнительное условие загружаться должны только аудио файлы формата mp3. В общем все сделал и работает.
Только подумалось, что можно переименовать любой НЕ аудио файл в mp3 и загрузить его на сервер, что не есть хорошо. С одной стороны проигрываться не будет, а с другой стороны кто знает что там загрузят? Собственно вопрос именно в этом: как проверить mp3 файл, что это действительно аудио файл и не загружать на сервер все остальное, что могут подсунуть под видом музыки? На клиенте проверяется только формат файла (mp3) через javascript. Более детальная проверка, думаю, должна вестись на сервере. Пока что скрипт серверной части имеет такой вид:
<?php
	$uploaddir = getcwd().DIRECTORY_SEPARATOR.'upload'.DIRECTORY_SEPARATOR;
	$uploadfile = $uploaddir.basename($_FILES['file']['name']);
	if($_FILES["file"]["type"]=="audio/mp3"){
		move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
	}
?>

Если по мимо самого решения проблемы дадите еще какие-нибудь дельные советы по этой задаче, буду благодарен :)
  • Вопрос задан
  • 7870 просмотров
Пригласить эксперта
Ответы на вопрос 7
RuslanCC
@RuslanCC
Воспользуйтесь любым классом для работы с MP3 и проверьте битрейт, длительность и т.д. Если все корректно — значит это настоящий MP3.
Вот, например, один из классов — www.zend.com//code/codex.php?ozid=160&single=1
Ответ написан
dekameron
@dekameron
В дополнение (если нужна работа не только с mp3) полезным будет такой вот комбайн getid3.org
Ответ написан
Dzuba
@Dzuba
Если есть возможность установки расширений PHP на сервер, то, дабы не изобретать велосипед, я бы рекомендовал PECL-расширение id3: php.net.
Мне кажется, это будет менее ресурсоемко и более скорострельно, нежели какие-либо классы, написанные на PHP.

Проверять, на мой взгляд, проще всего так:
$version = id3_get_version($filename);
if (!$version)
    die('Не аудиофайл!');
Ответ написан
BeLove
@BeLove
security
Дайте ссылку на сервис, загрузим php (если форма аплоада, как выше) :)
Ответ написан
makkarpov
@makkarpov
Как вариант — проверка каких-то magic-значений, сам поток декодировать-то не обязательно. Кстати, ID3 тегов может просто не быть, а если есть — то никаких расширений не надо, всего лишь считать последние 128 байт файла — строка должна начинаться словом «TAG»
Ответ написан
@Richard_Ferlow
Веб-программист
А на сервере расширение почему не проверяется?
Ответ написан
@Elkan
Обычного установленного www.php.net/manual/en/book.fileinfo.php будет достаточно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы