Flash сьогодні є цілком прийнятним рішенням для організації веб-додатків, що використовують інтенсивний обмін даними між сервером і клієнтом.
Flash — це мультимедійний графічний формат, що забезпечує роботу з векторною і растровою графікою, а також із звуком. Flash має внутрішню мову сценаріїв, за допомогою якої можна створювати інтерактивні мультимедійні компоненти (Flash-фільми), що використовуються в муль-тимедійних системах, презентаціях, анімації і так далі. Завдяки невеликому розміру отримуваних Flash-фільмів та інтерактивності, технологія Flash успішно застосовується в оформленні Web-сайтів. В основному, це створення анімаційних роликів, метою яких є підвищення привабливості сайту. Не менш важливе використання технології Flash — для реалізації користувацького інтерфейсу. В цьому випадку Flash можна розглядувати як заміна JavaScript і технології DHTML, яка також покликана забезпечувати інтерактивну роботу з користувачами.
Далі будуть розглянуті способи застосування технології Flash при розробці Web-сайтів: генерація Flash-фільмів на сервері за допомогою мови РНР, впровадження Flash-роликів в HTML-код, метод визначення наявності Flash-програвача в браузері відвідувача і передача параметрів з HTML-сторінки у Flash за допомогою JavaScript.
На відміну від звичайних HTML-сторінок, де обмін інформацією з сервером відбувається шляхом перезавантаження сторінок (хоча перезавантажувати можна тільки частину сторінки), flash-додаток поводиться як незалежний клієнт, тобто, він сам (не без допомоги браузера, природно) здатен передати дані серверу і отримати їх. При цьому даний процес не зачіпає оточення самого ролика (самої сторінки).
Де це можна використовувати? Власне, там, де потрібний обмін даними, але немає особливої потреби в пошуковій індексації сторінок, там де потрібна багатократна видача проміжних даних, що розрізняються залежно від того, що вводить користувач. І, звичайно, там де потрібна анімація або її елементи. Типовий для сьогоднішнього дня приклад - онлайнова іграшка із веденням таблиці рекордів. Отож,
Дано:
Flash-додаток, якому потрібний обмін даними з сервером. Потрібно організувати спосіб передачі даних. Даними в цьому простому прикладі виступить довільний рядок.
Рішення:
Передати і прийняти дані в ActionScript можна різними способами. Одін з найстаріших і надійніших - це використання об'єкту XML.
Коли ми говоримо про XML, завжди мається на увазі деяка валідність документа. У випадку з Flash це теж так, але в процесі обміну інформацією з сервером, валідація не потрібна. Практично будь-яка послідовність символів може бути передана і прийнята.
Перший крок — на підставі рядка створюємо об'єкт XML:
var my_str = "blabla";
var my_xml:XML = new XML(my_str);
Тепер знов створений об'єкт XML несе в собі нашу корисну стрічкову інформацію (не дивлячись на те, що вона не є well-formed XML-документом). Її можна вивести на екран методом toString() объекта XML:
trace (my_xml.toString());
Другий крок: задаємо contentType:
my_xml.contentType = "text/xml";
Було багато дискусій щодо того, треба чи не треба це робити. Я не хочу вдаватися до механізми роботи об'єкту XML у Flash. Для мене ця властивість - гарантія того, що вміст XML при відправці його на сервер, буде розміщено в області RAW POST DATA (сирих, нерозібраних POST-даних), звідки ми їх зможемо легко витягувати в php-скрипті.
Третій крок: готуємо обробник отримання результату.
Як правило, нас мало цікавить просто відправка даних, ми хочемо бути упевнені, що вони прийняті, оброблені і отриманий результат. Для цього PHP повинен відправити щось у відповідь, а Flash повинен його отримати. Отримувати дані від сервера буде знову-таки об'єкт XML. Взагалі, це може бути будь-який XML ролик, у тому числі і той, який відправляв дані. Йому ми призначимо обробник отриманого результату. Для простоти він трасуватиме отримані дані:
var receive_xml:XML = new XML();
recrive_xml.onLoad = function(success){
if(success){
trace(this.toString());
} else {
trace( "дані отримати не вдалося");
}
} Останній крок: відправляємо дані і чекаємо результат.
Для цього скористаємося методом sendAndLoad(). Як параметри він приймає назву файлу, який планується завантажувати і об'єкт, в який будуть завантажені отримані дані. Оскільки завдання стоїть в передачі даних в php, ім'я цього скрипта і буде як файл, а об'єкт прийому даних вже готовий:
my_xml.sendAndLoad("phpscript.php", receive_xml);
Тепер справа за серверною часткою. Ми повинні створити скрипт, який зміг би прочитати відправлені дані і видати відповідь. У php є декілька способів отримати RAW POST дані. Один з варіантів - використання Stream-ів (для цього нам потрібний php версії не нижче 4.3). RAW POST DATA в цьому випадку читаються функцією file_get_contents("php://input"). Далі ми організовуємо просте виведення якої-небудь маркерної фрази, щоб переконатися, що скрипт працює. У реальному застосуванні відбуватиметься обробка отриманих даних, і всі інші штуки, на які здатний php і програміст. У прикладі все простіше:
Важливе зауваження: Flash працює з кодуванням UTF-8. Тому, щоб не було проблем, php файл теж має бути в цьому кодуванні. Якщо по якихось причинах це неможливо, всі вихідні дані мають бути перекодовані в UTF-8. Хороший спосіб для цього - функція iconv(). Отож:
В статті описані ключові моменти взаємодії Flash та сервера. Зрозуміло, що спосіб рішення цієї задачі не один. Я використовую цей варіант тому, що XML дає додатковий інструментарій обробки переданих і прийнятих даних. Що коштує, наприклад, тільки можливості, які надає клас XPath від
xfactorstudio! На стороні сервера маса засобів для роботи з XML при використанні PHP5 і набору функцій DOM.
Створюємо новий документ, в першому кадрі тиснемо F9, там і буде розміщений весь наш ActionScript.
Частина 1: захист, прийом та передача даних.
Використовуємо найбільш зручну функцію sendAndLoad (адреса обробника, параметри, метод передачі GET/POST);
Передавати будемо сам PHP код, скрипт оброблятиме і повертатиме результат, тому нам треба придумати оптимальний варіант перевірки коду від flash або хакер придумає свій аріант.
Задача: захистити передачу даних.
Рішення:
Використовуємо необоротне шифрування MD5 sil="1r5y8i999oy"; //стрічка, яку знають тільки Flash і php
Зашифровуємо її, зашифровуємо код, який передаємо, потім зашифровуємо все разом, і отримуємо ключ. Передаємо його разом з кодом php. Обробник робить також і звіряє свій ключ з переданим, якщо збігаються, то ок, виконуємо код, немає - хацкер намагається виконати свій код.
У своїх запасах знайшов скрипт в якого функції аналогічні як і в php наприклад MD5, не знаю хто автор, але респект йому. Файл зі скриптом лежить з "вихідними файлами". Підключаємо цей файлик : #include "md5.as" Викликаємо функцію MD5 так:
MD5.hex_md5 (“);
Поверне шифровку.
key=MD5.hex_md5(MD5.hex_md5(comand)+MD5.hex_md5(sil)); // Отримали ключ.
Створимо два об'єкти, які отримуватимуть і прийматимуть дані. var inp:LoadVars = new LoadVars();//цей об'єкт отримуватиме дані var out:LoadVars = new LoadVars();//а цей відправлятиме
Тепер, напишемо функції відправки і прийому даних:
Для прикладу викличемо функцию sendcomand(“$res=\I working!\; echo$res+123;”);
Частина 2: обробник на PHP
З відправкою і прийомом даних розібралися, тепер напишемо їх обробник на php. У файлі php пишемо:
cntrl+enter у flash і дивимося у вікні виводу що вийшло. Можна вважати працю закінченою, але виник неприємний сюрприз - неможливість передати/прийняти російськомовний текст, замість нього кракозябри.
Доводитимемо до пуття. Собака заритий в тому, що ActionScript користується Юнікодом. Ну беремо лопату, розкопуватимемо.
Кодова сторінка для кирилиці в Юнікоді починається з числа 848, це код нульового символу. Російська заголовна буква А має в кодуванні Windows код 192, тому в Юнікоді вона кодується числом 1040. За буквою А йде підряд решта заголовних букв, потім маленьких від а до я, код букви я дорівнює 1103. Букви ё і Ё кодуються окремо. Їх коди 1025 для Ё і 1105 для ё.
Деякі корисні функції:Рядок.charAt(індекс); - в ActionScript видає символ по індексу
Рядок[Індекс] - в php
String.fromCharCode(індекс); - в ActionScript поверне символ по його 10 значному коду.
Chr(індекс); - в php
String.ord(символ); - в ActionScript видає 10 код за значенням символа
Ord(символ) - в php Частина 3: Передача російського тексту в PHP і назад.
У flash пишемо:
Тепер теж саме треба написати на php:
Тепер у файлі з php треба замінити це:
На це:
У функції відправки даних перед початком дописати: comand=chr_uni(comand); і не забувати при відправці скрипта на php перед будь-яким виводом писати chr_uni().Заодно функції прийому даних на самому початку дописати: data=uni_str(data);
Приклад відправки скрипта: sendcomand("$rez='sendcomand("$rez='<img descr=\"ПривеЕет\" src=\"abcd.jpg\" >проверка</img>'; echo (chr_uni($rez));");
Не забуваємо екранувати лапки.
Hа цьому начебто все, проблем більше виникнути не повинно, ще одна корисна штука: xml=new XML(data); напишіть це в тілі функції прийому даних, і можете парсити що повернув обробник як нормальний xml. Якщо знадобиться напишу урок, як використовуючи цей урок зробити галерею/меню/та ін. Вихідні файли _________.zip ( 9.33к )
Тут описується взаємодія між Flash, PHP та MYSQL. Ми навчимося як передавати текст в HTML-відформатованого текстового поля з зовнішнього файлу Actionscript. Для того що б отримати дані з MYSQL бази даних, використовуватиметься PHP скрипт, який надалі передасть дані у flash (флеш) ролик. Для цього ми створимо текстове поле лінків на сайти (а адреси сайтів і їх назви візьмемо з бази даних)
Для того щоб приступити до роботи вам знадобитися PHP сервер, MYSQL база даних, і само собою Macramedia Flash.
Давайте почнемо! Наступні кроки покажуть як створювати динамічний список з даними у флеші.
Створіть новий документ у flash (флеш), клавіші Ctrl+J, і вкажіть необхідні вам розміри робочої області (у мене це 165px by 200px)
створіть новий шар і назвіть його Sites потім створіть на ньому динамічне текстове поле використовуючи інструмент Text і задайте його ім'я sites_txt. Переконайтеся що у вас включене HTML форматування тексту.
[ властивості текстового поля повинні виглядати як тут, кнопка HTML форматування тексту <> ]
зараз нам потрібно створити ActionScript файл. Тому створіть новий ActionScript файл вибравши в меню File > New > Actionscript file.
нижній код запихніть в свій новий файл, і збережіть його під ім'ям sites.as (зараз я вам все в коді поясню):
Як ви можливо встигли помітити, в цьому Actionscript коді, потрібний для роботи .php файл (sites.php). Створимо цей файл - для цього запустіть текстовий редактор типу Dreamweaver/блокнот і вставте код що йде нижче:
Що б цей php скрипт заробив, нам необхідна база даних до якої він звертатиметься. Щоб її створити ви можете скористатися кодом SQL запитів наведеним нижче(ну або створити самим базу даних)
Ось всі приготування закінчені, тепер необхідно включити наш зовнішній AS файл у flash (флеш) ролик. Для цього поверніться назад до ролика, що розробляється, створіть новий шар і назвіть його Actions. У першому кадрі цього слою вставте наступний код:
#include "sites.as";
от і все розробка прикладу закінчена, його можна вже протестувати і подивитися як він працює.
давайте розберемося в цьому коді.
почнемо з коду створення таблиці в MYSQL базі даних. Він має достатньо простий формат для додавання даних в Базу даних.
CREATE TABLE `sites` ( // створюємо таблицю названу sites
="color: #000099"font size="2"; text-align: justify>
`id` int(11) NOT NULL auto_increment
// створюємо колонки в таблиці, перший параметр - її назва, другий - тип даних, NOT NULL забороняє залишати запис без даних, auto_increment - дані в цій колонці мають значення - автоматичне збільшення значення (тобто лічильник)
php файл безпосередньо підключається до створеної нами бази даних.
для того що б працювати з MYSQL базою даних необхідно підключитися до неї. З міркувань безпеки, до сервера бази даних, що підключається, необхідно вказати ім'я користувача, і його пароль. Якщо у вас декілька баз даних, ви можете використовувати mysql_select_db, що б повідомити php скрипту яку базу даних потрібно використовувати.
mysql_pconnect ("адрес_сервера ", "имя_пользователя", "пароль");
mysql_select_db ("здесь_указываем_базу_данных_с_которой_мы_хотим_работать");
Наступний код може виглядати трохи заплутаним, але насправді тут все просто. Все що я намагаюся зробити, це отримати дані з mysql бази даних і передати їх flash (флеш) ролику. Це зробимо за допомогою наступного php коду (який вам потрібно буде зберегти в окремий файл)
Що б отримати дані з таблиці, було б дуже зручно використовувати цикли - for в нашому випадку. А цикли for завжди вимагають наявність початкової точки, кінцевої точки циклу, і лічильника, що збільшується, який проведе вас від початкової точки до кінцевої.
Наша початкова точка це нуль, вона проголошена як $i =0. Наша кінцева точка, має дорівнювати кількості рядків в базі даних. Що б отримати значення кількості рядків, можна використовувати функцію mysql_num_rows(data) яка повертає це значення в змінну data.
$nRows = mysql_num_rows($qResult);
тепер у нас є кінцева точка($nRows), ще є лічильник $i++. Означає структуру циклу можна закінчити, і ми можемо вже спокійно отримати необхідні дані з нашої бази даних
for ($i=0; $i< $nRows; $i++){
$row = mysql_fetch_array($qResult);
$rString .="&id".$i."=".$row['id']."&"."&title".$i."=".$row['title']."&"."&link".$i."=http://".$row['link']."&";
}
echo $rString."&";
Код вище це аналог для отримання даних з масиву. Змінна $i збільшується від 0 до значення спільної кількості рядків, і це ж значення використовується як індекс позиції, і запис стовпців з цим індексом рядка, додаються до змінної $rString
Цей скрипт в php повертає довгий рядок з даними через змінну $rString. flash (флеш) ролик бачить дані із $rString змінної.
Ось ніби і всі зауваження. Якщо хочете можете завантажити вихідні файли до цієї статті. Сподіваюся вона допомогла вам розібратися із взаємодією між flash, php і mysql.
П.С.:
Потрібно пам’ятати що текстове поле, яке використовується для відображення тексту, має HTML формат, тому я використовую html формат, щоб задати лінк і його назву, ще я використовую в кінці кожного рядка код переходу на новий рядок - .
Для створення Flash-фільмів за допомогою РНР призначена бібліотека ming. З її допомогою можна динамічно генерувати Flash-фільми і відображати їх на сторінках сайту. Завдання динамічного створення Flash актуальна в тому випадку, якщо використовується велике число унікальних Flash-фільмів, які скрутно створити власноруч, або параметри створюваних Flash-фільмів неможливо визначити до початку виконання скриптів, а також при створенні сторінок за технологією Flash.
Бібліотека ming, дозволяє працювати з Flash, підтримує майже всі основні об'єкти і властивості Flash 4, такі як форми, градієнти, зображення у форматах JPEG і PNG. трансформацію форм з однієї в іншу, текст, кнопки, механізм подій, movie-кліпи, завантаження потокового звуку у форматі МРЗ, трансформацію кольорів. Єдина непідтримувана опція — це звукові події.
Бібліотека ming — це розробка з відкритим кодом за угодою LGPL. Новини про цю бібліотеку, приклади кодів, нові версії доступні на сайті, присвяченому бібліотеці ming, no адресі sourceforge.net. Бібліотека ming була введена в РНР з версії 4.0.5.
Зауваження:
Докладний опис функцій дпя роботи з бібліотекою ming можна знайти в книзі по мові РНР — "РНР 5. Практика розробки Web-сайтов".
Зауваження:
Як і будь-яке розширення в РНР 5, бібліотека ming за замовчуванням відключена. Для її підключення слід зняти коментар з рядка extension = php_ming.dll у конфігураційному файлі php.ini.
Нижче розглянуто декілька прикладів, що демонструють створення Flash-фільмів за допомогою РНР.
Створення Flash-фільма з градієнтом
Спочатку створюється об'єкт Flash-фільма SWFMovie і встановлюються його розміри. Потім створюються об’єкти форми SWFShape і градієнта SWFGradient. За допомогою методу addEntry() додаються 3 кольори градієнта. Методом addFill() градієнт додається до форми, і тим самим створюється об'єкт заливки SWFFill, над яким потім проводяться операції трансформації. Остаточне встановлення заливки здійснюється методом setRightFill(). Після всіх необхідних дій з налаштування об'єктів градієнта і заливки малюються лінії форми методами drawLine(). Останнім етапом об'єкт форми додається до об'єкту Flash-фільма (add($s)) і виводиться в браузер методом output().
Java важка, гальмова, але може все. Вона використовується там, де потрібно майже-десктоп додаток. Ява - одна з найбільш поширених у світі мов. На ній існує величезна кількість бібліотек, за допомогою яких можна описувати складні інтерфейси та алгоритми. У вебі це потрібно рідко.
Flash
Flash спочатку з'явився як кросплатформенна платформа та мова для мультимедіа, для пожвавлення вебу барвистою анімацією, аудіо та відео. Але не тільки це смачно в технології Flash:
вона має багато серйозних засобів для створення мережевих з'єднань (сокетів);
об'єкти для роботи з мультимедіа: зображеннями, аудіо, відео;
внутрішнє сховище об'єктів, які не посилаються на сервер при кожному запиті, як куки;
зручні графічні засоби розробки для Flash.
Ну і для балансу - недоліки, по зрівнянню із JavaScript.
Окремий контейнер. Наприклад, не можна виділити фрагмент тексту, який частково знаходиться в контейнері Flash.
Погано індексується пошуковими системами. Пошуковики ходять по HTML-посиланнях, але (поки?) не клацають по посиланнях всередині Flash-додатків.
З Flash можна легко викликати JavaScript. Навпаки - складніше, але теж можливо, тому доцільно знати обидві технології та застосовувати їх разом.
Кросс-браузерна передача даних між Javascript і Flash
Питання, що неодноразово підняте і перемолочене в Інтернеті, проте, до нього повертаються знову і знову.
Дано:
Додаток, з різних причин вимушений передавати дані з javascript в flash і назад. Варіант описаний macromedia збоїть при використанні Mozilla, варіант, описаный Коліном Муком (Colin Moock) збоїть при використанні Opera. Під словом «збоїть» розуміється «працює з помилками, працює нестабільно або не працює зовсім»
Рішення:
Отже, рішення. Для передачі даних з Flash в javaScript потрібно використовувати виклик getURL(), де як параметр передавати js-функції.
У прикладі:
getURL("javascript: receive("+flash_variable+")");
Ніяких особливих налаштувань при цьому не потрібно.
Інша справа - зворотний процес. Тут необхідна зміна в HTML-коді виклику флеш-ролика. По-перше, тегу потрібно привласнити id, по якому javascript до нього звертатиметься, по-друге, тегу <embed/> дати атрибут name із значенням, співпадаючим з id тега <object>, і там же - атрибут swliveconnect із значенням "true". Це потрібно, щоб всякі підозрілі браузери типу Opera також працювали без помилок.
window.document.flash_id.SetVariable("flash_var", jsvalue);
Тільки такий запис допомагає добитися результату. Opera як flash_id візьме name елементу <embed/> і працюватиме нормально. Подробиці - в коді сторінки прикладу. У флеш-ролику нічого особливого нема
Відмічені проблеми:
1. По якихось причинах в прикладі в Mozilla не передається російський текст з флешки в сторінку. Швидше за все, це пов'язано з самим роликом.
2. Опера так і працює неоднозначно. Навіть якщо використаний один і той же білд на різних машинах.
Передача параметрів з JavaScript в Flash
Передача параметрів з JavaScript у Flash може використовуватися для организации динамічних інтерактивних сторінок без звернення до серверних скриптів. Передача даних здійснюється за допомогою функцій JavaScript. Для організації передачі даних має бути виконані декілька умов:
тег <object> повинен мати параметр id, наприклад id="myfiash";
тег <embed> повинен мати параметр name, наприклад name="myflash";
для тега <embed> має бути встановлений параметр SWLIVECONNECT=true, що вирішує передачу даних між Flash і JavaScript.
Передача даних здійснюється виконанням методу Setvariable() у Flash-фільма. Метод має наступний формат:
window.document.флешФільм.SetVariable(variableName, variableValue)Приклад:window.document.myflash.SetVariable("param",12345);
Нижче наведений приклад, що встановлює змінною param, що знаходиться на кореневому рівні Flash-фільма, значення 12345. Передача даних здійснюється викликом функції send() при натисненні кнопки Передати дані.
Передача параметрів з JavaScript у Flash
Нижче наведений приклад, який ілюструє дію методів SetVariable() та ExternalInterface() при передачі даних з JavaScript у Flash
Цей приклад пересилає текст: з верхнього JS-поля направо у Flash, та з нижнього Flash-поля - наліво в JS.
Введіть будь-який текст та натисніть кнопку для пересилки потрібним методом.