MP3 portAll

ВНИМАНИЕ!!! Перед установкой прочтите этот файл до конца, чтобы не было мучительно больно за потраченное время.

Что это?

Этот маленький и гибкий в настройке набор скриптов предназначен для организации доступа к распределенным mp3-ресурсам через http-протокол. В качестве ресурсов могут быть публичные или закрытые ftp- и http-сервера, локальные каталоги и т.д.

Отличительной его особенностью является то, что сайт отдает все mp3-файлы "через себя" и гарантированно скрывает их реальное расположение. Платой за это служит увеличение общего траффика через сайт.

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

Особенно удобно использовать сайт вместе с WinAMP-ом или любым другим плеером, умеющим проигрывать mp3-файлы через http на лету без сохранения их на диск.

Написано все это на PHP, для хранения баз использует sql-сервер MySQL, работает под управлением http-сервера Apache.

Предустановка

Для работы необходимо уже иметь установленные и корректно работающие Apache, PHP и MySQL. Опреационная система по вкусу.

Операционная система

Сайт тестировался под FreeBSD-5.3-RELEASE и W2k Prof. В первом случае все необходимые компоненты собирались из исходников, во втором использовались бинарные дистрибутивы.

Поскольку сами скрипты не зависят от конкретной ОС, они будут работать и на других платформах, на которых установлены необходимые компоненты.

MySQL

Использовался MySQL 4.1.11 (http://www.mysql.com).

FreeBSD

Устанавливался дистрибутив mysql-4.1.11.tar.gz.

Для поддержки нужной кодировки возможно потребуется указать соответствующие параметры при конфигурации:

CC=gcc CFLAGS="-O2 -fno-strength-reduce" \
       CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions \
                         -felide-constructors -fno-strength-reduce" \
        ./configure --prefix=/usr/local/mysql \
                    --enable-assembler \
                    --with-mysqld-ldflags=-all-static \
                    --with-charset=koi8r \
                    --with-extra-charsets=complex 

В остальном установка не отличалась от описанной в документации.

Win2k

Устанавливался дистрибутив mysql-essential-4.1.11-win32.msi в режиме полной установки.

Если планируете использовать кодировку, отличную от latin1, не забудьте при настройке сервера установить ее в меню Manual Selected Default Character Set / Collation. Для запуска клиента mysql с нужной кодировкой можно поместить в каталоге с mysql.exe следующий mysql.bat:

mysql.exe --character-sets-dir="C:\Program Files\MySQL\MySQL Server 4.1\share\charsets" 
          --default-character-set=cp1251 -u root -h localhost -p
          %1 %2 %3 %4 %5 %6 %7 %8 %9

Кроме того, не забудьте при настройке сервера включить режим Enable TCP/IP Networking, оставив номер порта по умолчанию (3306).

Apache

Использовался Apache верисии 1.3.33 (http://www.apache.org) с подключенным модулем mod_php4.

FreeBSD

Собирался из дистрибутивов apache_1.3.33.tar.gz Установка не отличалась от описанной в документации.

Win2k

Устанавливался из дистрибутива apache_1.3.33-win32-x86-no_src.exe. Был выбран вариант полной установки, для удобства путь установки был изменен на C:\.

PHP

Используется PHP 4.3.11 (http://www.php.net).

Из дополнительных модулей необходима поддержка ftp, библиотека mcrypt и поддержка MySQL.

FreeBSD

Собирался из дистрибутива php-4.3.11.tar.gz. Пдключались внешняя библиотека MySQL и предустановленная из исходников libmcrypt:
./configure  --with-mysql=/path/to/mysql \ 
             --with-apache=/path/to/apache \
             --with-mcrypt=/path/to/mcrypt \
             --enable-ftp

Win2k

Распакованный php-4.3.11-Win32.zip был перенесен в c:\php и в соответствии с документацией был установлен как Apache module. Поддержка ftp была уже включена. Для подключения libmcrypt в C:\php была положена libmcrypt.dll и в php.ini раскомментирована строчка
extension=php_mcrypt.dll

Поскольку версия собраной в PHP библиотеки MySQL отличалась от версии сервера, понадобились дополнительные меры. Подробнее см. раздел "Создание базы данных".

Установка

После распаковки архива необходимо проделать несколько шагов установки. Они довольно просты для тех, кто осилил предыдущий пункт. Ниже описан пример установки под Unix. Для Win2k процедура практически не отличается

Создание базы данных

Для создания базы данных и таблиц, необходимых для работы сайта, служит скрипт sql/createdb.sql:

#mysql < sql/createdb.sql

По умолчанию PHP 4.x распространяется со встроенной поддержкой MySQL 3.x. В тех случаях, когда нет возможности пересобрать PHP с обновленными библиотеками, потребуются дополнительные действия. Так, например, для исправления ошибки авторизации под Win2k, понадобится запустить скрипт sql/fixoldpasswd.sql:

#mysql < sql/fixoldpasswd.sql

ВНИМАНИЕ!!! В скриптах sql/createdb.sql и sql/fixoldpasswd.sql по умолчанию определены база данных mp3 и пользователь mp3@localhost, имеющий полный доступ к этой базе по паролю password. Те же самые значения определены в файле includes/conf.php (раздел Database section). Кроме того, в скрипте sql/createdb.sql определен пользователь root с паролем password и правами администратора для управления сайтом через web-интерфейс (таблица users). Рекоменедуется в целях безопасности сменить все пароли по умолчанию на более хитрые. Подробнее см. раздел "Безопасность"

Настройка Apache

Пердполагается, что http-сервер запущен и корректно обрабатывает php-скрипты. Для установки сайта достаточно:

  1. Включить фрагмент, описывающий конфигруацию VirtualHost из файла httpd/httpd.conf-include в конфигурационный файл httpd.conf сервера;
  2. Отредактировать в нем пути к каталогу htdocs и лог-файлам;
  3. Перезапустить http-сервер;

Настройка

Основные параметры сайта вынесены в файл includes/config.php. Здесь можно подключить свои стили, добавить поддержку дополнительных языков и т.д. Структура файла довольно проста и понятна (для меня :). Остановлюсь на основных параметрах:

URL
Определяет базовый URL сайта. Используется при конструировании полного адреса.
DB_*
Параметры подключения к базе данных. Имя базы, пользователь и пароль должны быть такими же, как в скриптах sql/createdb.sql и sql/fixoldpasswd.sql.
ACC_ANON
Определяет, имеют ли незарегистрированные пользователи доступ к сайту. По умолчанию 1.
ACC_GB
Определяет, могут ли незарегистрированные пользователи оставлять записи в гостевой книге. По умолчанию 1.
ACC_MP3
Определяет, имеют ли незаригистрированные пользователи доступ к публичным MP3-файлы. По умолчанию 1.
ACC_MP3P
Определяет, имеют ли незаригистрированные пользователи доступ к скрытым MP3-файлы. По умолчанию 0.
CR_KEY
Ключ, используемый при шифровании данных. ВНИМАНИЕ!!! Обязательно измените этот параметр. Подробнее см. раздел "Безопасность"

MP3_LPP
Определяет, сколько строк с MP3 выводить на страницу.
NEWS_RPP, NEWS_RPP
Определяет, сколько новостей выводить на странице новостей и на главной странице соответственно.
GB_RPP, GB_RPP
Аналогично предыдущим параметрам, но определяет вывод записей гостевой книги.
LNG_MULT
Включает режим многоязыковой поддержки.
LNG_DEF
Определяет язык по умолчанию для новых пользователей. Если LNG_MULT установлено в 0, определяет используемый язык.
LNG
Эта структура описывает доступные на сайте языки. Для каждого языка должна существовать своя ветка в каталоге includes/langs, содержащая файлы перевода.
CSS
Эта структура описывает доступные цветовые схемы. Для каждой схемы должен существовать файл в каталоге htdocs/css. Подробнее о цветовых схемах см. раздел "CSS Maker"
CSS_DEF
Определяет цветовую схему по умолчанию.
LOG_DL
C
Если установлен в 1, то информация о каждм скачивании MP3-файла (id файла, дата и IP) записывается в таблицу logdl. По умолчанию 0.

Безопасность

В этом разделе собрана вся информация, касающаяся безопасности сайта. Перечислены все умолчания и даны рекомендации по ограничению доступа к критически важной информации.

Доступ к БД

Имя БД

По умолчанию установлено в mp3. Используется в следующих файлах: Можно оставить по умолчанию.

Пароль доступа к БД

По умолчанию установлен в password. Используется в следующих файлах: Необходимо изменить перед установкой.

Доступ к сайту

Имя суперпользователя

По умолчанию установлено в root. Используется в следующих файлах: Можно оставить по умолчанию.

Пароль суперпользователя

По умолчанию установлен в password. Используется в следующих файлах: Необходимо изменить перед установкой либо сразу после установки через панель управления (см. раздел "Смена пароля").

Шифрование данных

Ключ шифрования

По умолчанию установлен в Very long and secret key. Please change it for security reason.. Используется в следующих файлах: Необходимо изменить перед установкой.

Необходимо ограничить доступ к файлам, содержащим важную информацию. Так, например, sql-скрипты sql/createdb.sql и sql/fixoldpasswd.sql можно вообще удалить после установки, доступ к файлу includes/config.php оставить только для пользователя, от имени которго выполняются http-запросы:

#chown nobody:nobody includes/config.php ; chmod 0400 includes/config.php

Администрирование

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

Смена пароля

Доступ к этому пункту имеют все пользователи, которым разрешен доступ к панели управления. Здесь можно поменять свой пароль. ВНИМАНИЕ!!! Обязательно воспользуйтесь этим пунктом меню для смены установленного по умолчанию пароля суперпользователя.

Гостевая книга

К этому пункту меню имеют доступ пользователи, у которых установлен полный доступ к гостевой книге. Здесь можно удалить из нее лишние, некорректные или просто раздражающие сообщения.

Новости

В этом пункте меню можно отправить новое, удалить старое или отредактировать существующее сообщение на ленте новостей. Те пользователи, у которых установлен доступ только к своим новостным сообщениям, не могут изменять или удалять чужие новости, а также подписываться чужим именем. Пользователи с полным доступом могут менять все поля, удалять и редактировать все новости.

Загрузка MP3

Самый важный пункт :). Загрузка MP3 на портал осуществляется в 3 этапа:

  1. Подготовка xml-файла с информацией о MP3;
  2. Размещение MP3-файлов на каком-либо сервере;
  3. Загрузка информации о MP3 файлах на портал.

Этот пункт реализует 3-й этап загрузки. Прежде чем разбираться с ним, рассмотрим первые два.

Подготовка xml-файла

Как уже говорилось, MP3 portAll предоставляет доступ к MP3-файлам, расположенным на различных серверах сети. Однако для того, чтобы осуществлять поиск и корректно отдавать нужные файлы, необходимо загрузить в него информацию об этих самых файлах. Информация включает в себя содержимое MP3-тегов, сведения о формате кодирования, а также о размещении файла в сети. Для ее подготовки можно воспользоваться утилитой "MP3 to XML", входящей в состав дистрибутива.

Xml-файл должен иметь следующий формат:

<MP3S>
    <MP3>
        ...
    </MP3>
    ...
</MP3S>

В качестве примера рассмотрим файл, содержащий одну запись:

<MP3S>
    <MP3>
        <TITLE>Dancing Queen</TITLE>
        <ARTIST>ABBA</ARTIST>
        <GENRE>Pop</GENRE>
        <ALBUM>Gold Greatest Hits</ALBUM>
        <YEAR>1992</YEAR>
        <TRACKNUM>1</TRACKNUM>
        <PRIVATE>0</PRIVATE>
        <VERSION>3</VERSION>
        <LAYER>1</LAYER>
        <FREQUENCY>44100</FREQUENCY>
        <MODE>1</MODE>
        <BITRATE>198</BITRATE>
        <VBR>1</VBR>
        <SECS>232</SECS>
        <SIZE>5737360</SIZE>
        <PATH>/ABBA/Golden Greatest Hits/01_ABBA_Dancing Queen.mp3</PATH>
        <SERVER>ftp://storage:password@ftp.local/mp3s</SERVER>
    </MP3>
</MP3S>

Рассмотрим каждый из тегов:

TITLE
Обязательный тег. Содержит название композиции. Как правило, заполняется из соответствующего ID3-тега.
ARTIST
Обязательный тег. Содержит имя исполнителя или название группы. Как правило, заполняется из соответствующего ID3-тега.
GENRE
Обязательный тег. Содержит назване стиля. Как правило, заполняется из соответствующего ID3-тега. Для загрузки необходимо, чтобы стиль присутствовал в таблице БД genres. Полный список стилей см. в файле sql/createdb.sql. Новые стили можно дабавить в любой момент, используя консоль MySQL:
mysql> INSERT INTO genres (code, text) VALUES (220, 'New genre');
Число code должно быть уникальным.
ALBUM
Необязательный тег. Содержит название альбома. Как правило, заполняется из соответствующего ID3-тега.
YEAR
Необязательный тег. Содержит год записи композиции. Как правило, заполняется из соответствующего ID3-тега.
TRACKNUM
Необязательный тег. Содержит номер композиции в альбоме. Как правило, заполняется из соответствующего ID3-тега.
PRIVATE
Необязательный тег. Если установлен в 1, MP3-файл помечается как скрытый, и доступ к нему будет ограничен. Утилита mp32xml устанавливает его в зависимости от тега Encoded by. Подробнее см. соответствующий раздел.
VERSION, LAYER, FREQUENCY, MODE
Обязательные теги. Описывают формат MP3-потока. Значения соответствуют описанным в стандарте.
BITRATE
Обязательный тег. Содержит информацию о битрейте (в kb/s). Для перемнного битрейта (тег VBR установлен в 1) содержит средний битрейт потока.
VBR
Необязательный тег. Установлен в 1, если поток закодирован с переменным битрейтом.
SECS
Обязательный тег. Время звучания композиции в секундах.
SIZE
Обязательный тег. Размер MP3-файла в байтах.
PATH
Обязательный тег. Имя файла с серверонезависимым путем. Должен начинаться с символа '/'. Полное имя файла строится путем склеивания содержимого тегов SERVER и PATH
SERVER
Обязательный тег. Адрес сервера с путем к размещенным на нем MP3-файлам. В качестве сервера может выступать локальная файловая система (тег SERVER будет иметь вид /home/mp3storage), ftp-сервер (ftp://user:pass@newftp.local/mp3files) или http-сервер (http://www.mp3.local/mp3s). Сайт использует функцию readfile() для доступа к MP3-файлам, поэтому типы поддерживаемых серверов могут отличаться. Подробнее см. документацию по PHP. Разделение полного имени на SERVER и PATH сделано для быстрого переноса MP3-файлов с одного сервера на другой. При этом достаточно будет сохранить дерево серверонезависимых каталогов и поменять в базе только поле server. Например, при миграции файлов с локального диска на удаленный ftp-сервер после их переноса достаточно будет одной команды в консоли MySQL:
mysql>UPDATE mp3 SET server = 'ftp://user:pass@newftp.local/mp3files' WHERE server = '/home/mp3storage'

Не следует создавать сразу очень большие xml-файлы - это может создать проблемы при загрузке их на портал. Оптимальным числом можно считать не более 100 записей в одном xml-файле.

Размещение MP3-файлов на сервере

Это проще всего. Все, что надо - залить MP3-файлы на какой-либо сервер и убедиться, что они будут доступны скриптам MP3 portAll-а. Подобную проверку можно осуществить на третьем этапе.

Загрузка информации о MP3 файлах на портал

После того, как создан xml-файл и MP3-файлы размещены в сети, можно приступать собственно к загрузке. информации через панель управления. Этомт пункт меню доступен только тем пользователям, которым разрешена загрузка файлов на MP3 portAll.

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

После отправки xml-файла на портал, происходит его разбор и проверка необходимых полей, после чего информация о распознанных MP3-файлах выводится в виде таблицы. Следует обратить внимание на количество распознаных MP3 - если оно меньше ожидаемого, значит формат файла не вполне корректен. Рядом с каждым MP3-файлом размещен чекбокс, в котором ставится отметка для дальнейшей загрузки. После того, как необходимые отметки сделаны, необходимо нажатием кнопки в нижней части экрана подтвердить дальнейшую загрузку.

На втором. заключительном этапе, происходит дополнительная проверка и загрузка информации непосредственно в базу. При этом если запись о данном файле (определяется по полному имени файла из тегов SERVER и PATH) уже существует, она будет обновлена. Разумеется, если попытку обновить делает пользователь с ограниченным доступом к редактированию MP3, обновится информация только о тех MP3, которые загружал он сам.

Редактирование MP3

Так же, как и в случае с новостями, пользователи с ограниченным доступом могут редактировать и удалять только те MP3, которые сами загрузили.

Управление пользователями

Этот пункт меню служит для управления правами всех пользователей сайта, кроме суперпользователя. Здесь можно указать следующие параметры для каждого пользователя (названия даны по английскому языковому файлу):

User
Уникальное имя пользователя в системе. Определяется при его создании, в дальнейшем не редактируется.
Password
Пароль доступа к системе. Может быть изменен также самим пользователем через соответствующий пункт меню.
Logon
Определяет, может ли пользователь вообще входить на сайт.
Guestbook
Определяет режим доступа к гостевой книге. Возможны варианты:
MP3
Определяет режим доступа к MP3. Возможны варианты:
CP
Определяет, есть ли доступ к панели управления. Если этот чекбокс не установлен, пользователь не сможет поменять свой пароль.
Upload
Определяет возможность загрузки пользователем информации об MP3. Возможны варианты:
News
Определяет режим доступа к ленте новостей. Возможны варианты:
Accounts
Определяет, имеет ли пользователь доступ к этому пункту меню.

Утилиты

В дистрибутив включены несколько утилит, облегчающих работу с сайтом.

CSS Maker

На сайте используются css-схемы, основанные на цветовых триплетах: светлый бэкграунд, темный бэкграунд и цвет текста. Для быстрого их создания написан php-скрипт tools/cssmaker/cssmaker.php, которому в качестве параметров командной строки передаются цветовые триплеты и имя выходного файла:

#cssmaker.php 11426E FFFFFF ACC6DD out.css 

В качестве шаблона скрипт использует файл tools/cssmaker/css.tpl. После того, как вновь созданный файл помещен в каталог htdocs/css, необходимо добавить его в структуру CSS (файл includes/config.php). Строчку для атрибута style можно взять из комментария в начале css-файла.

В качестве примера использования в tools/cssmaker находятся скрипты для генерации css-файлов, поставляемых по умолчанию: make_def_css (FreeBSD) и make_def_css.bat (Win2k).

MP3 to XML

Как отмечалось выше, загрузка MP3-файлов на портал состоит из 3-х этапов. Для выполнения первого этапа (подготовки xml-файлов, содержащих информацию о MP3) написана утилита mp32xml, находящаяся в каталоге tools/mp32xml. Версия под Win2k уже скомпилирована (tools/mp32xml/mp32xml.exe), под FreeBSD потребуется самостоятельная сборка из исходников, расположенных в каталоге tools/mp32xml/src. Там же лежат make-файлы для сборки под FreeBSD и Win2k. Дополнительно потребуются библиотеки tinyxml (версия >= 2.3.3) и id3lib (версия >= 3.8.3). Перед сборкой не забудьте исправить пути к дополнительным библиотекам на корректные.

В качестве обязательных параметров командной строки mp32xml необходимо указать адрес сервера, на котором планируется в дальнейшем разместить MP3 файлы (он будет содержаться в теге SERVER), путь к ним на локальном диске и имя выходного файла. Дополнительно может потребоваться указать необходимость перекодировки тегов (если теги записаны в одной кодировке, а в БД установлена другая) и перекодировки адреса сервера и имен MP3-файлов (если кодировки локальной системы и сервера отличаются). Типичный вызов утилиты на машине с Win2k при подготовке файлов к загрузке на FreeBSD-сервер:

c:\mp3portal\toolsmp32xml>mp32xml -T w2k -P w2k /usr/mp3storage C:/mp3files out.xml

Утилита работает только с тегами ID3v2. Для их создания можно воспользоваться любой подходящей программой.

Тег PRIVATE устанавливается в 1, если первый символ ID3v2-тега Encoded by (TENC) равен X.

Удаление

Удаление сайта делается на 1-2-3:

  1. Удалить соответствующую секцию VirtualHost в httpd.conf http-сервера и перезапустить его;
  2. Удалить базу данных:
       #mysql < sql/dropdb.sql
    
  3. Удалить каталог со скриптами и (если остались), лог-файлы http-сервера.

История

Версии ниже 3 не были предназначены для распространения и представляли из себя чудную смесь php- и perl-скриптов. В 3-ей версии была предпринята попытка сделать если не дистрибутив, то хотя бы легко переносимый и настраиваемый набор скриптов и утилит.

Feedback

Нету :)

Лицензионное соглашение

Freeware. Копирайты только не трожьте.

© az, 2001-2005
SourceForge.net Logo