当前位置: 首页 > 面试题库 >

下载sql表的值以供脱机重用

夹谷俊远
2023-03-14
问题内容

我有一个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.");

问题:如果用户处于脱机状态,则无法访问这些值。

有没有办法下载带有AS3代码的SQL表(当用户有Internet时)以便脱机访问它。

喜欢 :

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表,应该有sql_result_offline.php吗?

 $connection = mysql_connect("LOCAL", "user", "password");

谢谢,


问题答案:

对于闪光灯:

要使用Flash在本地保存数据,可以使用以下三种方式之一:Flash
Player缓存,SharedObject或FileReference对象。对于您的本地文件,请不要使用PHP和MySQL,因为我们仅谈论您获得的数据(json,xml,txt,…)。

-Flash Player缓存:

您应该知道,默认情况下,Flash Player将文件的本地副本放入其缓存中。您可以将此本地副本用作数据的脱机源,但在这里不要忘记Flash
Player不会保存远程文件的最新版本,而是保存第一个版本和http://www.example.com/。
data.php
http://www.example.com/data.php?123是不同的,即使它是同一文件!有关此的更多详细信息,请看我对这个问题的回答。

-SharedObject:

我不知道您加载的数据的大小,但是正如Adobe关于SharedObject所说的那样:

…用于在用户计算机上读取和存储有限数量的数据…

我认为这不适用于大文件,不建议存储文件,而是存储一些简单数据。当然,作为浏览器的cookie,SharedOject需要用户的授权才能将数据写入硬盘,用户可以随时将其删除。

-FileReference:

我认为这是做您想要的最好的方式。您应该知道,要使用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);            
}

希望能对您有所帮助。



 类似资料:
  • 我一直有互联网问题,所以为android studio安装gradle是一个大问题,所以我下载了zip文件。但是,我不知道如何离线安装它,并设置Android studio使用离线版本。我需要帮助。

  • 我尝试使用Zip4j生成一个zip文件供下载。但我总是得到错误:

  • 之后运行会导致 [ERROR]未能在Oxalis项目上执行goal org.apache.maven.Plugin:maven-surefire-plugin:3.0.0-M4:test(default-test)Tils:jar:1.1以前没有从它下载过。->[帮助1] (我启用了快照存储库,因为maven-dependency-plugin在多模块项目中存在严重问题,否则) POM包括 如上所

  • %pdf-1.3 3 0 obj<>endobj 4 0 obj<>stream x 3 r 2 35 w(r q w 3 t 04 30 pisp z*[(Hx+(j*d 7 w endstream endobj 1 0 obj< >endobj 5 0 obj /xobject<<>>endobj 6 0 obj<endobj 7 0 obj<endobj xref 0 8 000 00000

  • 我为iOS开发了一个移动应用程序 /Android我想启用离线播放,以便用户可以下载内容并在飞机上观看等...下载后长达1个月。此内容需要受到保护,以免用户下载以进一步分发。在查看Azure媒体服务的留档(此处:https://docs.microsoft.com/en-us/azure/media-services/previous/offline-widevine-for-android)时,

  • Java中是否有任何方法可以检测Android设备是否安装了脱机语音识别语言,以及它是否不会提示用户下载该语言? 我知道您可以要求语音对文本以选择脱机语音对文本,但您如何知道设备是否安装了该语言? 这个问题不是关于如何使用脱机语音,这是可行的。问题是“如何从Java应用程序代码中检测和下载/安装脱机语音语言”。i、 e.让应用程序检测他们是否安装了离线德语,如果没有,则提示用户下载/安装。