2012-09-20 21 views
1

我正在爲我的學校開展聖誕節日曆活動,當我注意到日期級別不是我以前的樣子時。Actionscript 3:我如何從服務器獲取日期(不是客戶端)

它從客戶端CPU獲取時間,這是不行的。

所以,我一直在網上尋找,但一直沒有很好的答案(至少我可以做出任何意義)。

所以在這裏,它是:

我如何獲得的時間和日期(*)在UTC + 1,從服務器我的閃存程序託管,或者一些外部時間服務器?

* 在UNIX的時間,或以某種方式否則ActionScript 3的可以理解

我搜索答案有一段PHP的腳本的建議,但我不明白如何使用(那裏有幾個例子,但他們在AS2中)。

+0

你有什麼服務器/託管? –

+0

我的主機是Hosting24.com 我完全訪問FTP的文件,以及一個文件瀏覽器與什麼稱爲「cPanel」。 我的網站是www.grambogames.net –

回答

1

這樣做的一個更安全的方法(例如不使用可以被篡改的閃存變量),將創建一個非常簡單的服務器頁面(輸出純文本而不是html)輸出日期,然後將其加載到使用加載程序進行閃存並將其解析爲本機Date對象。

Flash端應該是這樣的:

var loader:URLLoader = new URLLoader() 
loader.load(new URLRequest("your server page")) 
loader.addEventListener(Event.COMPLETE, onLoaded) 
function onLoaded(evt:Event){ 
    var date:Date; 
    try{ 
     date = new Date(Number(loader.data)); //need to cast the loader data as a number 
    }catch(e:Error){ 
    } 

    if(!date){ 
     //your output from the server isn't formatted in a way flash can convert it 
     date = new Date(); //use local time 
    } 
} 

之所以使用try/catch語句,是因爲如果從服務器輸出不是有效的日期會嘗試時拋出一個錯誤將其轉換。如果在try塊內的任何地方拋出一個錯誤,它將在錯誤的行中退出(跳過其餘的代碼)並運行catch塊中的內容。如果try塊中沒有錯誤,catch塊中的代碼將永遠不會運行。


隨着PHP(雖然我沒有在任何地方PHP方便檢查所以這可能需要有人來糾正,它已經約10年,因爲我已經編程的話)

<?php 
    header("Content-Type: text/plain"); 
    print time() * 1000; 
?> 
+0

我收到了一個重要的問題,還有一個小問題,以及一個感謝。 1:我如何編寫你建議的服務器頁面? 2:做什麼和做什麼? 3:謝謝你的幫助。 –

+0

問題1取決於您使用的服務器端編程語言。 (PHP,ASP,JSP等)。如果你讓我知道你可以使用哪一個,我會在答案中包含一個樣本。我已經更新了這個問題來解釋try/catch – BadFeelingAboutThis

+0

那麼,鑑於我有root權限,我相信任何語言都可以。但因爲我從來沒有聽說過ASP或JPS,它應該是PHP(我對它有一些瞭解)。 –

1

你可以通過日期SWF文件是這樣的:

<param name=FlashVars value="date=<?php date(); ?>" /> 

你可以閱讀更多關於如何日期傳遞到SWF文件的位置:http://helpx.adobe.com/flash/kb/pass-variables-swfs-flashvars.html ,更多的是如何在這裏格式的日期: http://php.net/manual/en/function.date.php

在此變體中,必須將.html文件重命名爲.php。

+0

這是一個很好的答案,但如果篡改不是問題,那麼這是一個完全可以接受的方法。 – BadFeelingAboutThis

+1

以後我會仔細看看,謝謝你的回答。 –

+0

我時間很短。但對於簡單的日期字符串應該沒問題。希望能幫助到你。否則問。 – thgie

0

所以要summerize,答案是包含PHP腳本只有這個:

<?php 
header("Content-Type: text/plain"); 
print time(); 
?> 

,我用它來從服務器獲取時間的腳本是:

//cut from a larger script 
{ 
loader = new URLLoader(); 
loader.load(new URLRequest("http://grambogames.net/serverTime.php")); 
loader.addEventListener(Event.COMPLETE, onServerTimeLoad); 
trace("waiting for time to load"); 
} 



private function onServerTimeLoad(e:Event):void 
{ 
trace("date loaded:", loader.data); 
try 
{ 
    var num:Number = Number(loader.data) * 1000 
    dato = new Date(num); 
    trace("tid & dato synkronisert med server.", dato); 
} 
catch (e:Error) 
{ 
    //the passed date was invalid, lets just use the local system date 
    dato = new Date(); 
    trace("date did not work, local time used"); 
    txt_error.text = "ERROR! COULD NOT GET TIME FROM SERVER!" 
} 
    if (! dato) 
{ 
    //your output from the server isn't formatted in a way flash can convert it 
    trace("not working, date farmated wrong"); 
} 
} 

感謝LondonDrugs_MediaServices

...我只是希望沒有更多的錯誤出現。

相關問題