загрузить значения sql-таблицы для повторного использования в офлайн-режиме

У меня есть приложение 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, через собственный процесс или собственное расширение, но это не так просто ..

  • редактировать:
    Работа с локальными базами данных SQL в AIR
    [+] вы можете хранить свои данные в безопасности – с помощью шифрования, пароля при запуске и т. д.
    [-] потребуется намного больше кода
    (создавать базу данных после установки, регулярно синхронизировать, получать данные из локальной базы данных, если нет подключения к интернету). mysql и sqlite также имеют некоторые отличия (например, выражение «вставить или обновить» для sqlite)