Применение библиотеки GDLib (http://www.boutell.com/gd/) для работы с изображениями различных форматов в PHP привычно для большинства разработчиков. Но иногда могут потребоваться и более серьезные возможности, например использование технологии Flash для создания динамических интерактивных приложений.
Для таких случаев можно воспользоваться библиотекой Ming, которая входит в пакет PHP начиная с версии 4.0.5.
Кто-то может возразить: зачем, собственно, придумывать велосипед, если можно создавать Flash-объекты стандартным путем? Существует простая программистская истина: каждый программирует на том, что хорошо знает. А библиотека Ming позволяет оперировать Flash-объектами через понятные функции, интегрированные в PHP. Так что разработчику не потребуется постигать особую логику Flash.
Кроме того, излагаемый в статье вариант взаимо-действия двух технологий позволяет писать максимально гибкие по возможностям скрипты, так как весь код, определяющий Flash-ролик (картинка ли это или сложный динамический модуль), формируется на лету. А значит, почти любые свойства ролика (так принято называть любой Flash-объект) могут задаваться PHP-скриптом. Такая комбинация позволит создавать причудливые, графически насыщенные статические и динамические объекты, зависимые от текущего серверного или клиентского контекста, т. е. учитывающие состояние глобальных переменных, значения информационных файлов (cookie) и т. д.
Последняя бета-версия библиотеки ming-0.4.0-beta5 была выложена на sourceforge.net в сентябре прошлого года. Но сейчас сайт разработчиков уже не существует.
Библиотека содержит в себе функционал, необходимый для создания Flash-фильмов: формы, градиенты, функции работы с изображениями и трансформации форм и цветов, поддержку фильмов в формате Quicktime и аудиофайлы MP3. В настоящий момент библиотека доступна как для UNIX, так и для Windows.
Установка под Windows
При установке под Windows библиотека должна находиться в подкаталоге/ext установочной папки самого пакета. Надо сказать, что автору не удалось найти библиотеку php_ming.dll, скомпилированную под Windows и распространяемую отдельно от пакета PHP. На интернет-ресурсе sourceforge.net выложены только ее исходные тексты; впрочем, особой необходимости в них, наверно, нет. Ведь библиотека доступна в самом пакете PHP. Конечно, речь идет о полном zip-архиве пакета на сайте www.php.net, а не об инсталляторе, который многие по неопытности загружают из Cети.
Атрибуты последнего варианта поставки в бинарном виде для php-5.2.5.5-Win32: 327 738 байт от 08.11.2007.
Далее действуем как обычно при подключении дополнительных модулей: убеждаемся, что в файле php. ini стоят необходимые настройки, или корректируем их. Параметр extention_dir должен указывать путь к каталогу модулей расширения, например:
extention_dir = “c:/php/ext”
И наконец, раскомментируем строку:
extention = php_ming.dll
Если мы все сделали верно, то после вывода в php результата функции phpinfo () получим версию библиотеки (рис. 1).
Установка под Linux
Если в системе еще нет модуля libming.so, то придется доустанавливать его из исходных файлов. Пошаговая инструкция по установке Ming для Linux Fedora приведена на странице http://linux.saini.co.in/2007/11/29 . Также на сайте http://rpm.pbone.net можно посмотреть список соответствия уже оптимизированных для установки RPM-пакетов и версий различных сборок Linux.
Простой пример
Для начала создадим простой статический объект в виде картинки в рамке с указанием настоящих размеров (рис. 2). Надо заметить, что в процессе отладки этого примера было получено несколько сообщений о фатальных ошибках со стороны сервера Apache, не говоря уже об устранении обычных ошибок. При работе с библиотекой надо помнить, что ее использование до сих пор является экспериментальным, как и всех тех функций, которые документированы к настоящему моменту. Некоторые фрагменты руководств, встречающихся в Интернете, содержат забавные комментарии наподобие: «Я так думаю». В общем, разработчик должен помнить об ответственности за функционирование портала при использовании этой библиотеки в промышленных целях.
Рассмотрим подробнее листинг 1 и обратим внимание на использованные в нем классы библиотеки Ming. Объект класса SWFBitmap позволяет загружать внешние изображения из файлов формата JPEG. Есть вероятность, что особенности использования объектов этого класса могут меняться с течением времени, если, конечно, продолжится поддержка библиотеки Ming. В нашем примере мы с помощью созданного объекта класса SWFBitmap загружаем jpeg-файл (кадр из мультфильма «Братец медвежонок» студии Уолта Диснея), указывая локальный путь сервера. Попытки загрузить что-либо, указав http-адрес в Интернете, ни к чему хорошему не привели.
Объект класса SWFMovie обеспечивает поддержку технологии Flash. Его можно вывести на просмотр методом output (), но перед этим необходимо указать тип выводимых данных: application/x-shockwave-flash.
Объект класса SWFShape представляет собой непо-средственно визуальную составляющую, с которой идет работа.
Функция addFill позволяет создавать одноцветную заливку, заливку градиентом или изображением.
Пример посложнее
Теперь рассмотрим более интересный пример, где применяется объект класса SWFMorph, позволяющий отображать динамическое преобразование одной формы в другую (листинги 2, 3). Пусть в нашем примере это две окружности, назовем их условно начальной и конечной. Они будут отличаться друг от друга расположением, радиусом, цветом и шириной внешнего контура. Задача Flash — обеспечить в динамике плавное преобразование всех этих свойств, создавая при этом несложную анимацию (рис. 3).
В Сети можно легко найти аналогичный базовый пример с использованием прямоугольников в качестве фигур преобразования.
Проблемы со шрифтами
По умолчанию библиотека Ming не поддерживает кириллицу. При попытке вывести что-то на русском языке на экран выдается нечитаемая абракадабра. Шрифт можно явно указывать в специфическом формате fdb (font definition block) или прописывать константу, соответствующую имени используемого в браузере шрифта. Порой кажется, что чем дальше углубляешься в этот вопрос, тем больше может вырасти проблем. Но для их решения существует метод SWFFont->getUTF8Width (), требующий, правда, дополнительного изучения. Можно также скачать пакет утилит ming-winutils.zip (он выложен на странице http://www.opaque.net/ming/index.html ), в который входит утилита преобразования шрифтов makefdb. exe. Судя по результатам экспериментов автора и по информации с форумов, поддержка кириллицы находится в плохом состоянии. Быстро найти в Сети готовые fdb-шрифты для кириллицы вообще не удалось, а впечатления людей о конвертированных шрифтах не самые лучшие.
Пример с использованием базы данных
Еще одним наглядным примером возможностей биб-лиотеки Ming будет использование ее для визуализации работы с базой данных. Рассмотрим достаточно простой пример отображения данных из стандартной тестовой базы EMPLOYEE, которая поставляется вместе с СУБД FireBird. В данном случае решается несложная задача — вывод результата запроса на экран (рис. 4).
Для удобства ограничимся двадцатью записями таблицы. В качестве фона таблицы используем внешний файл — рисунок в формате JPG. Размер и цвет шрифта, параметры сетки — все формируется непосредственно в скрипте (листинг 3).
* * *
Несмотря на вечно сырое состояние библиотеки Ming, она предоставляет разработчику богатый набор мультимедийных возможностей технологии Flash и фактически является стандартным модулем пакета PHP. Статья задумывалась как вводная, поэтому возможности использования языка Action Script непосредственно из PHP в ней не рассматривались.
Источники
-
Ковалев В. Генерация Flash на веб-сервере в PHP. http://www.test.codingclub.net/Modules/Articles/Default.aspx?Cat=6&ID=478
-
Кузнецов М. В., Симдянов И. В., Голышев С. В. PHP 5. Практика разработки Web-сайтов. СПб.: БХВ-Петербург, 2005.
-
Список функций (Ming functions for Flash) . http://ru2.php.net/manual/ru/ref.ming.php,http://php.ru/manual/ref.ming.html