ActionScript 2.0 и маленькая база данных в виде текстового файла

Задача: сохранить данные на сервере в виде текстового файла, используя ActionScript 2.0 и php.

Сразу оговорюсь, что за правильность всего изложенного ниже не ручаюсь:-) Но оно работает. Проверено.

Ещё одно важное замечание: не стоит даже пытаться сохранить на сервере в текстовом файле большой объём данных. Как минимум, текстовый файл для этого не предназначен. Но если данных немного, а с базой данных связываться не хочется, то текстовый файл может оказаться хорошей альтернативой.

Естественно, что нам потребуется хостинг с поддержкой php. На данный момент поддержка php имеется даже у многих бесплатных хостингов. Так что проблем здесь не должно возникнуть.

Итак, приступим...

Сперва создадим флеш-приложение на ActionScript 2.0. Для этого я использовал «старый-добрый» Macromedia Flash 8. Создаём в этой программе новый проект и на сцене будущего нашего флеш-приложения размещаем следующие объекты:

1.) поле ввода id_send, в которое мы будем вводить уникальный логин или идентификатор пользователя;

2.) поле ввода score, в которое мы будем вводить, например, количество набранных пользователем очков в игре;

3.) кнопку send_btn с надписью «Отправить» для отправки данных на сервер;

4.) поле ввода id_load для ввода уникального идентификатора или логина пользователя, по которому мы хотим получить данные (например, количество заработанных в игре очков);

5.) динамическое текстовое поле load_txt, в котором будут отображаться данные (например, количество очков) по запрашиваемому пользователю;

6.) кнопку load_btn с надписью «Получить» для получения данных с сервера по конкретному пользователю.

С помощью первых трёх объектов мы будем отправлять данные на сервер, а с помощью трёх последних - получать данные от сервера.

Кроме этого нам понадобиться ещё мувик animLoad, который должен располагаться выше всех прочих элементов сцены. Этим мувиком мы будем накрывать всю нашу сцену в то время, когда происходит обмен данными между сервером и флеш-приложением. Естественно, что animLoad должен по своим размерам совпадать с размерами сцены флеш-ролика (в моём случае - 550 Х 400). Первоначально сделаем его невидимым. А для красоты добавим анимацию, которая будет показывать пользователю, что идёт обмен данными с сервером (анимацию можно создать самим, а можно просто воспользоваться уже готовой анимацией или генераторами анимации загрузки для Ajax).

Итак, простенький интерфейс готов. Теперь переходим к коду. Идём в панель «Действия» («Actions») главной временной шкалы флеш-ролика и пишем/вставляем следующий код...

Код ActionScript 2.0:

/* Подключаем функцию "MD5.as". */ #include "MD5.as" /* Путь к директории, в которой лежит php-скрипт. */ strUrl = "http://edapskov.ru/applications/"; /* Секретный ключ. */ skey = "Natasha"; /* Создаём объект LoadVars для отправки и получения данных. */ var myLoadVars:LoadVars = new LoadVars(); myLoadVars.onLoad = function(success:Boolean) { animLoad._visible = false; if (success) { if (myLoadVars.q == "no") { load_txt.text = "Данных по запрашиваемому пользователю нет!"; } else { load_txt.text = myLoadVars.id+' = '+myLoadVars.q; } } else { load_txt.text = "Ошибка!"; } }; /* Отправляем данные. */ send_btn.onPress = function() { animLoad._visible = true; myLoadVars.id = id_send.text; myLoadVars.q = score.text; myLoadVars.key = MD5(String(myLoadVars.id+myLoadVars.q+skey).toLowerCase()); myLoadVars.sendAndLoad(strUrl+"test.php", myLoadVars, "POST"); }; /* Получаем данные. */ load_btn.onPress = function() { animLoad._visible = true; myLoadVars.id = id_load.text; myLoadVars.q = -1; myLoadVars.key = MD5(String(myLoadVars.id+myLoadVars.q+skey).toLowerCase()); myLoadVars.sendAndLoad(strUrl+"test.php", myLoadVars, "POST"); }; /* Делаем мувик-псевдопрелоадер невидимым. Этот мувик будет видимым только тогда, когда идёт обмен данными между сервером и флеш-приложением. */ animLoad._visible = false; /* Приказываем мувику animLoad ловить мышиные события, что приведёт к фактической блокировке работы всех расположенных ниже объектов. Это нам надо, чтобы пользователи лишний раз не жали кнопки и не меняли содержимое полей ввода во время работы флеш-приложения с сервером. */ animLoad.onPress = function() { };

Обратите внимание, что к проекту подключается функция MD5() (в данном примере она подключается через инструкцию #include "MD5.as", но вы можете эту функцию разместить вместе с остальным кодом или воспользоваться ООП-реализацией данной функции). Зачем нужна MD5? Данная функция хэширования нужна для того, чтобы обеспечить целостность ваших данных при передаче их на сервер. Для работы функции MD5 вводится секретный ключ, который должен быть ОДИНАКОВЫМ и на сервере, и в вашем флеш-приложении. Естественно, не надо оставлять тот секретный ключ, который приведён в данном примере. Вы должны вписать свой секретный ключ и в флеш-проект, и в php-скрипт. И, повторюсь, данный секретный ключ должен быть АБСОЛЮТНО одинаковым для флеш-проекта и php-скрипта. Кроме этого, флеш-проект надо защитить от декомпиляции. Иначе любая программа-декомпилятор откроет исходный код вашего проекта и секретный ключ перестанет быть секретным. MD5 не даст вам 100% защиты, но это лучше, чем ничего...

Если всё сделали правильно, то получаем что-то вроде этого:

Загрузить Adobe Flash Player

Данное флеш-приложение условно разделено на две части. Верхняя часть отвечает за отправку данных. Нижняя - за получение данных. Проверяем работу флешки. Вводим в два верхних поля (id_send и score) свои данные и жмём «Отправить». Появляется мувик animLoad с нашим псевдоиндикатором загрузки. Когда сервер присылает ответ, animLoad снова становится невидимым. Теперь перезагрузим страницу и проверим, действительно ли сервер сохранил наши данные. Для этого в нижнее поле ввода (id_load) вводим то, что ранее ввели в поле id_send и жмём по кнопке «Получить». Теперь в поле load_txt сервер должен прислать данные, отправленные нами ранее... или сообщение об ошибке. Думаю, что принцип понятен. Естественно, это просто демонстрация работы, которую вы можете переделать под свои нужды и потребности.

Переходим к серверной части нашего приложения...

Но перед тем как что-то делать на сервере, надо определиться с версией php на вашем сайте. Напомню, что для этого в php есть специальная встроенная функция - phpinfo(). Следовательно, открываем текстовый редактор (Блокнот, Notepad++,...) и пишем там следующее:

<?php phpinfo(); ?>

Сохраняем как файл phpinfo.php (то есть с расширением .php) и размещаем в главной директории вашего сайта. Теперь идём в ваш любимый браузер и набираем адрес http://ваш_сайт.ru/phpinfo.php. Открывается страница с подробным описанием конфигурации сервера, на котором расположен веб-ресурс. Там же имеется информация о версии php на вашем сайте.

Для php 5-й версии создаём файл test.php со следующим содержанием...

Код php:

<?php /* проверяем, пришли ли переменные, необходимые для работы скрипта */ if(isset($_POST['id']) && isset($_POST['q']) && isset($_POST['key'])){ /* адрес текстового файла, в котором будем хранить информацию */ $filename = "test.txt"; /* $skey - секретный ключ */ $skey = "Natasha"; /* обрабатываем полученные переменные */ $user = trim($_POST['id']); $q = trim($_POST['q']); $h = trim($_POST['key']); /* если данные истинны и не равны пустоте, то запускаем работу скрипта */ if(md5(strtolower($user.$q.$skey))==$h && strlen($user) && strlen($q)){ $arr = array(); if($q=='-1'){ /* данный фрагмент кода возвращает данные */ $arr = unserialize(file_get_contents($filename)); foreach($arr as $key=>$value){ if($key==$user){ echo 'id='.$user.'&q='.$value; exit; } } /* если данных по текущему пользователю нет, то возвращается no */ echo 'id='.$user.'&q=no'; exit; }else{ /* данный фрагмент кода добавляет/обновляет данные */ $arr = unserialize(file_get_contents($filename)); $arr[$user] = $q; file_put_contents($filename,serialize($arr)); echo 'id='.$user.'&q='.$q; } } }

A для php 4-й версии создаём файл test.php с немного иным содержанием...

Код php:

<?php /* проверяем, пришли ли переменные, необходимые для работы скрипта */ if(isset($_POST['id']) && isset($_POST['q']) && isset($_POST['key'])){ /* адрес текстового файла, в котором будем хранить информацию */ $filename = "test.txt"; /* $skey - секретный ключ */ $skey = "Natasha"; /* обрабатываем полученные переменные */ $user = trim($_POST['id']); $q = trim($_POST['q']); $h = trim($_POST['key']); /* если данные истинны и не равны пустоте, то запускаем работу скрипта */ if(md5(strtolower($user.$q.$skey))==$h && strlen($user) && strlen($q)){ $arr = array(); $fr = fopen($filename,"r"); $arr = unserialize(fread($fr,filesize($filename))); fclose($fr); if($q=='-1'){ /* данный фрагмент кода возвращает данные */ foreach($arr as $key=>$value){ if($key==$user){ echo 'id='.$user.'&q='.$value; exit; } } /* если данных по текущему пользователю нет, то возвращается no */ echo 'id='.$user.'&q=no'; exit; }else{ /* данный фрагмент кода добавляет/обновляет данные */ $fw = fopen($filename,"w"); $arr[$user] = $q; fwrite($fw,serialize($arr)); fclose($fw); echo 'id='.$user.'&q='.$q; } } }

Теперь размещаем файл test.php у себя на сайте, а в флеш-проекте указываем новый путь к файлу test.php.

Как можно заметить, посмотрев на php-скрипты, информацию, поступающую из флеш-приложения, php-скрипт сохраняет в обычном текстовом файле test.txt (расширение файла тут большой роли не играет и его можно сделать другим). Файл test.txt можно открывать для просмотра, что очень удобно при тестировании работы php-скрипта.

Исходник под Macromedia Flash 8 и все php-скрипты можно скачать тут.

Вот так вот...

Примечания

[!] В данном примере предполагается, что через поле ввода score отправляется 0 или положительное целое число (как правило, именно такие значения и используются в играх и приложениях). Можно, конечно, отправлять и текстовое значение, но не рекомендуется. Текстом, особенно если это более или менее объёмные фрагменты текста, вы быстро переполните нашу импровизированную текстовую базу данных.

Автор: admin

Дата добавления: 2011-10-07

Просмотров: 6406

Рейтинг поста: +20-

Правила перепечатки

Социальные закладки:
Комментарии:
К данной заметке комментариев пока нет. Ваш комментарий может стать первым.
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика