Запрос данных во Flash-фильме из PHP во время выполнения - PullRequest
1 голос
/ 09 июня 2009

Можно ли запросить некоторые данные во Flash-ролике из PHP во время выполнения? Может быть, моя реальная реализация может прояснить некоторые вещи:

Я использую Flash-фильм для хранения локального общего объекта (потому что по какой-то причине мне нужны LSO или обычные PHP-куки). Теперь, когда я загружаю файл PHP, я хочу каким-то образом извлечь данные из LSO во время выполнения, назначить их некоторым переменным и использовать переменные в оставшейся части сценария.

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

Ответы [ 4 ]

2 голосов
/ 09 июня 2009

Лучший способ связать Flash и PHP - это XML (не забудьте использовать UTF-8!).

в PHP:

$xml = new DOMDocument('1.0', 'UTF-8');
$doc = $xml->appendChild($xml->createElement('my-root-element'));
...
header('Content-Type: text/xml; charset=utf-8');
echo $xml->saveXML();

В as3

var myLoader:URLLoader = new URLLoader();
var req:URLRequest = new URLRequest('http://host.com/my_xml.php');
myLoader.addEventListener(Event.COMPLETE, onMyXMLLoad);
myLoader.load(req);

function onMyXMLLoad(evt:Event)
{
    trace(evt.target.data);
    var xml:XML = new XML(evt.target.data);
    ...
}

Вы также можете прочитать о ExternalInterface ... Да, иногда это помогает ... Возможно, вы захотите динамически генерировать JS для связи с флэш-фильмом.

1 голос
/ 09 июня 2009

Есть два способа сделать это здесь (и мы делаем это честно). Одним из них является написание вашего PHP, чтобы он выводил правильно сформированный XML, который может быть использован вашим Flash-приложением. Другой использует AMFPHP , который немного сложнее в настройке, но может многое сделать с точки зрения перевода PHP-объектов / массивов в нативные объекты Flash.

Не уверен, что это точно соответствует вашей конкретной ситуации, но с точки зрения общего решения для извлечения данных из PHP внутри приложения Flash, он выполняет свою работу.

0 голосов
/ 09 июня 2009

по моему мнению (я не флэш-кодер) ...

Вы должны нажать на php (вместо pull от swf), что означает, что ваш флэш-фильм должен сообщать о состоянии своего LSO, если он изменяется. Зачем? потому что ваш сервер не знает работающих экземпляров SWF.

Вы можете сделать это с помощью ...

  • либо постоянно публиковать сериализованную версию LSO на сервере (и сохранять ее в файл или в базу данных)

    => если вы запускаете свой php-скрипт, он работает с самыми последними данными

    очень просто и прямо. вероятно путь.

  • или создайте сервер сокетов в вашем PHP-скрипте. SWF теперь пытается подключиться к серверу непрерывно. если сервер отвечает, опубликуйте сериализованное LSO.

    => если вы запускаете свой php-скрипт, он блокируется до тех пор, пока не будет установлено соединение, и тогда будет работать с живыми данными

    написание сокет-сервера на php не является ни тривиальным, ни сложным, но вы должны иметь возможность запускать php в режиме cli

проблемы:

  1. если флэш-фильм является общедоступным, может быть запущено много экземпляров - вам нужно отдельно сказать клиентам, иначе вы не будете знать, кто сообщает, что это LSO.

  2. если запущено много экземпляров этого флэш-фильма, вы будете постоянно засыпаны запросами.

  3. для решения с сокет-сервером вам понадобится ...

    • чтобы иметь возможность запускать php как cli-приложение
    • открытый порт в брандмауэре. Сторонние хостеры не допустят этого (пока вам не повезет или не повезет).

могут быть и другие способы, о которых я не знаю.

0 голосов
/ 09 июня 2009

Используйте getURL () . Вы можете выбрать страницу, которая возвращает необходимые данные или устанавливает необходимые данные.

Я хотел бы предложить, чтобы вы называли страницу типа flashExchange.php через

getURL('flashExchange.php?cacheBust=' + random(99999), '_blank');

Вы можете добавить больше переменных GET или данные POST, с помощью этого.

...