У меня есть приложение Flash, которое вызывает онлайн-файл php, чтобы прочитать некоторые значения моей таблицы SQL.
Итак, у меня есть такая строка в моем AS3-коде:
var urlReq:URLRequest = new URLRequest ("http://www.****.com/sql_result.php");
И это в моем php:
$connection = mysql_connect("mysql***.perso", "test", "password") or die ("Couldn't connect to the server.");
Проблема: если пользователь находится в автономном режиме, он не может получить доступ к значениям.
Есть ли способ загрузить таблицу SQL с кодом AS3 (когда у пользователя есть интернет), чтобы получить доступ к нему в автономном режиме.
Подобно :
function onConnection(e:Event = null):void{ if(monitor.available) { trace("You are connected to the internet"); read_php_online(); } else { trace("You are not connected to the internet"); read_php_offline(); } monitor.stop(); } function read_php_offline():void{ var urlReq:URLRequest = new URLRequest ("local/sql_result_offline.php"); .. .. }
И что должно иметь sql_result_offline.php для доступа к автономной таблице SQL?
$connection = mysql_connect("LOCAL", "user", "password");
Спасибо,
Для FLASH:
Чтобы сохранять данные локально со вспышкой, вы можете использовать один из трех способов: кеш Flash Player, объект SharedObject или объект FileReference . И для вашего локального файла забудьте PHP и MySQL, потому что мы говорим только о данных, которые вы получили (json, xml, txt, …).
– Кэш Flash Player:
Вы должны знать, что по умолчанию flash-плеер помещает локальную копию вашего файла в кеш. Вы можете использовать эту локальную копию в качестве автономного источника ваших данных, но здесь не забывайте, что флеш-плеер не сохранил последнюю версию вашего удаленного файла, а первый и тот http://www.example.com/ data.php отличается от http://www.example.com/data.php?123, даже если это тот же файл! Для получения дополнительной информации об этом, взгляните на мой ответ на этот вопрос .
– SharedObject:
Я не знаю размер загруженных данных, но, как сказал Adobe об SharedObject:
… используется для чтения и хранения ограниченного количества данных на компьютере пользователя …
Я думаю, что это не используется для больших файлов, и не рекомендуется хранить файлы, но некоторые простые данные. Конечно, в качестве файла cookie для браузера SharedOject требуется авторизация пользователя для записи данных на жесткий диск, и пользователь может удалить его в любое время.
– Ссылка на файл :
Я думаю, что это лучший способ сделать то, что вы ищете. Вы должны знать, что для сохранения файла с помощью FileReference ваш пользователь может выбрать файл для сохранения данных и чтения его во второй раз. Поэтому, если вы не хотите, чтобы какое-либо взаимодействие пользователя с вашим приложением, забудьте об этом.
Пример FileReference:
var local_file_name:String = 'local.data', file:FileReference = new FileReference(), local_file_filter:FileFilter = new FileFilter('local data file', '*.data'), remote_data_url:String = 'http://www.example.com/data.php', url_request:URLRequest, url_loader:URLLoader, connected:Boolean = true; if(connected){ get_remote_data(); } else { get_local_data(); } function get_remote_data(): void { //we use a param to be sure that we have always the last version of our file url_request = new URLRequest(remote_data_url + ('?' + new Date().getTime())); url_loader = new URLLoader(); url_loader.addEventListener(Event.COMPLETE, on_data_loaded); url_loader.load(url_request); } function get_local_data(): void { // show the select dialog to the user to select the local data file file.browse([local_file_filter]); file.addEventListener(Event.SELECT, on_file_selected); } function on_data_loaded(e:Event): void { var data:String = e.target.data; // if the remote data is successfully loaded, save it on a local file if(connected){ // show the save dialog and save data to a local file file.save(data, local_file_name); } // use your loaded data trace(data); } function on_file_selected(e:Event): void { file.addEventListener(Event.COMPLETE, on_data_loaded); file.load(); }
Этот код будет отображаться каждый раз, когда диалог сохранения пользователя, конечно, это всего лишь образец, вам нужно адаптировать его к вашим потребностям …
РЕДАКТИРОВАТЬ
Для AIR:
С AIR нам не нужен объект FileReference, вместо этого мы используем File и объект FileStream для сохранения данных:
// for example, our local file will be saved in the same dir of our AIR app var file:File = new File( File.applicationDirectory.resolvePath('local.data').nativePath ), remote_data_url:String = 'http://www.example.com/data.php', data_url:String = remote_data_url, url_request:URLRequest, url_loader:URLLoader, connected:Boolean = true; if(!connected){ // if we are not connected, we use the path of the local file data_url = file.nativePath; } load_data(); function load_data(): void { url_request = new URLRequest(data_url); url_loader = new URLLoader(); url_loader.addEventListener(Event.COMPLETE, on_data_loaded); url_loader.load(url_request); } function on_data_loaded(e:Event): void { var data:String = e.target.data; if(connected){ // save data to the local file var file_stream:FileStream = new FileStream(); file_stream.open(file, FileMode.WRITE); file_stream.writeUTFBytes(data); file_stream.close(); } trace(data); }
Надеюсь, что это поможет.
у вас есть flash swf, мобильное приложение или приложение для эфира?
Сохранение локальных данных
вы можете использовать файл как базу данных (например, csv), для мобильной и воздушной вы можете использовать локальную базу данных SQLite.
если у вас есть собственное настольное приложение – можно использовать mysql, через собственный процесс или собственное расширение, но это не так просто ..