Здесь я постарался затронуть актуальную тему – как обращаться из flash к php и наиболее часто встречающиеся проблемы.
Создаем новый документ, в первом кадре жмем F9, там и будет размещен весь наш ActionScript.

Часть 1 защита, прием, передача данных.
Используем наиболее удобную функцию sendAndLoad(адрес обработчика, параметры, метод передачи GET/POST);
Передавать будем сам php код, скрипт будет обрабатывать и возвращать результат, поэтому нам надо придумать оптимальный вариант проверки, от flash этот код или хакер пытается подсунуть свой.
Задача: защитить передачу данных.
Решение:
Используем необратимое шифрование MD5
[cc lang=»actionscript»] sil=»1r5y8i999oy»; //строка, которую знают только Flash и php [/cc] Зашифровываем ее, зашифровываем код, который передаем, потом зашифровываем все вместе, и получаем ключ. Передаем его вместе с кодом php. Обработчик делает также и сверяет свой ключ с переданным, если совпадают, то ок, выполняем код, нет – хацкер пытается выполнить свой код.
В своих запасах нашел скрипт у которого функции аналогичные как и в php например MD5, не знаю кто автор, но респект ему. Файл со скриптом лежит с исходниками. Подключаем этот файлик : #include «md5.as» Вызываем функцию MD5 так:
[cc lang=»actionscript»] MD5.hex_md5 (“”);[/cc] Вернет шифровку.
[cc lang=»actionscript»] key=MD5.hex_md5(MD5.hex_md5(comand)+MD5.hex_md5(sil)); // Получили ключ.[/cc] Создадим два объекта, которые будут получать и принимать данные.
[cc lang=»actionscript»] var inp:LoadVars = new LoadVars();//этот объект будет получать данные
var out:LoadVars = new LoadVars();//а этот отправлять[/cc] Теперь, напишем функции отправки и приема данных:
[cc lang=»actionscript»] function sendcomand(comand){ //функция отправки серверу данных.
//Comand – php код
out.comand =comand; // равносильно записи http://test.ru/index.php?comand=php код
out.idd=MD5.hex_md5(MD5.hex_md5(comand)+MD5.hex_md5(sil)); // ключ для сравнения
out.sendAndLoad(“http://www.test.ru/index.php”,inp,»POST»);//отправляем серверу данные
//Запрос будет выглядеть так: http://www.test.ru/index.php?comand=команда&idd=шифр метод — POST
} // Благополучно отправили. Но теперь нам надо принять результат.
inp.onData = function(data){//момент получения ответа
trace(data); //водим полученное
}[/cc] Для примера вызовем функцию
[cc lang=»actionscript»] sendcomand(“$res=\”I working!\”; echo$res+123;”);[/cc] Часть 2 обработчик на php
С отправкой и приемом данных разобрались, теперь напишем их обработчик на php. В файле php пишем:
[cc lang=»php»][/cc] cntrl+enter во flash и смотрим в окне вывода что получилось. Можно считать труд оконченным, но возник неприятный сюрприз – невозможность передать/принять русскоязычный текст, вместо него кракозябры . Будем доводить до ума. Собака зарыта в том, что ActionScript пользуется Юникодом. Ну берем лопату, будем раскапывать.

Кодовая страница для кириллицы в Юникоде начинается с числа 848, это код нулевого символа. Русская заглавная буква А имеет в кодировке Windows код 192, поэтому в Юникоде она кодируется числом 1040. За буквой А идут подряд остальные заглавные буквы, затем маленькие от а до я, код буквы я равен 1103. Буквы ё и Ё кодируются отдельно. Их коды 1025 для Ё и 1105 для ё. Пример:
[cc lang=»actionscript»] trace(String.fromCharCode(1040,1041,1071,1072,1073,1103,1025,1105)); //В окне вывода увидим АБЯабяЁё.[/cc] Как будем действовать: обмен должен происходит последовательностями четырех значных числе. А как быть с теми, код которых меньше 1000, да просто дополнять их слева нулями! Т.к. данные пойдут в фульм одним потоком, нам надо определить где кончается код для одного символа, поэтому обязательно 4цифры в числе. А на другой стороне отсекать левые нули и переводить обратно в нормальные символы. Напишем на стороне Flash две функции одна для кодирования (чтоб передавать русский текст), другая для декодирования (принимать русский текст).
Некоторые полезные функции:

Строка.charAt(индекс); — в ActionScript выдает символ по индексу
Строка[Индекс] – в php
String.fromCharCode(индекс); — в ActionScript вернет символ по его 10 значному коду.
Chr(индекс); — в php
String.ord(символ); — в ActionScript выдает 10 код по значению символа
Ord(символ) – в php

Часть 3: Передача русского текста в php и обратно.
Во flash пишем:
[cc lang=»actionscript»] function uni_str(uni) { //декодирование принятого
var
i,res,l=Math.floor(uni.length/4);
//длина строки будет в 4 раза меньше, т.к. на кодировку каждого символа мы отвели 4 цифры
res=»; //результат
for (i=0; iord(‘Ё’)) ad=0; else ad=848; //если нерусский то ничего не прибовляем, если русский прибавляем 848
c=sprintf(String(o+ad)); //доводим до ума
if (c==ord(‘Ё’)+ad) c=1025; //если это ё или Ё пишем коды отдельно
else if(c==ord(‘ё’)+ad) c=1105;
res+=c;
}
return res; // вернули результат
}[/cc] Тееперь тоже самое надо написать на php:
[cc lang=»php»]function chr_uni($s) {
$l=strlen($s);
$res=»;
for ($i=0; $i< $l; $i++) { $o=ord($s[$i]); if ($osendcomand(«$rez=’проверка’; echo (chr_uni($rez));»);
Не забываем экранировать кавычки.
Ух, на этом вродебы все, проблем больше возникнуть не должно, еще одна полезная штука: xml=new XML(data); напишите это в теле функции према данных, и можете парсить что вернул обработчик как нормальный xml.
Писалось под as2, легко можно переделать под as3.
Исходник:flashandphp.zip

[ratings]