AS-PHP-talk 放到 github 後, 不知不覺已經過了一年 =..=, 突然想來寫個介紹。
這個專案的目的是為了讓 ActionScript 和 PHP 溝通有另一種較為簡單的選擇, 目前後端只有 PHP 的實作。 以往後端 ( 筆者較常使用 PHP ) 和 AS 溝通, 比較舊的方式是通過 XML, 比較多人用的是透過 AMF ( Flash remoting ), AS-PHP-talk 則是使用 JSON。
JSON 和 XML 相比的話, 同樣都是文字格式。XML 可以制訂的資料比較複雜; 然而, JSON 可以描述 Object、Array 和基本類型的資料 , 其實已經很夠用。
JSON 和 AMF 相比的話, AMF 體積應該會比較小, 但由於 AMF 是二元資料, 除錯相對於文字格式的 JSON 要來得麻煩。JSON 資料可以直接秀在網頁上, 有錯誤時也可以在網頁上就查覺。
前端和後端資料交換的程式, 最麻煩就是除錯。AS-PHP-talk的目的是, 可以在完全沒撰寫前端程式 ( Flash ) 之前, 利用簡單的網頁就達到後端 PHP 程式的除錯。後端的開發人員可以完全不用理會前端程式的開發進程; 前端的開發人員也可以透過簡單的後端 ( 送假資料 ) , 進行前端的開發。前、後端的程式可以很方便的切開來。
2012-03-18
2010-03-26
新作:FLASH+PHP資料庫網站開發設計
個人新作「FLASH+PHP資料庫網站開發設計」出版了,感謝舊雨新知的支持!

個人新作「FLASH+PHP資料庫網站開發設計」出版
試讀「第6章」18頁
出版公司書籍介紹
博客來
金石堂
建議:老話一句,一本書是無法滿足所有人需求的,請先到實體書店翻閱,符合需求再購買!

個人新作「FLASH+PHP資料庫網站開發設計」出版
試讀「第6章」18頁
出版公司書籍介紹
博客來
金石堂
建議:老話一句,一本書是無法滿足所有人需求的,請先到實體書店翻閱,符合需求再購買!
2010-03-13
AMFPHP 1.9
AMFPHP 終於在 2010/02/02 釋出 1.9 正式版, 原本以為開發主角換人後, 專案應該會掛掉, 顯然 AMFPHP 還活著 :P。
1.9 正式版的 gateway.php 中, 明顯不同在 PRODUCTION_SERVER 預設為 true, beta 版預設為 false。
PRODUCTION_SERVER 設為 true 時, 在 Flash IDE 測試, 會發生 NetConnection.Call.BadVersion 的錯誤, 但是發佈後卻又正常。應該是 Debug 版 Flash player 造成的問題。
所以使用 Flash IDE 搭 AMFPHP 時, PRODUCTION_SERVER 請設為 false。
1.9 正式版的 gateway.php 中, 明顯不同在 PRODUCTION_SERVER 預設為 true, beta 版預設為 false。
PRODUCTION_SERVER 設為 true 時, 在 Flash IDE 測試, 會發生 NetConnection.Call.BadVersion 的錯誤, 但是發佈後卻又正常。應該是 Debug 版 Flash player 造成的問題。
所以使用 Flash IDE 搭 AMFPHP 時, PRODUCTION_SERVER 請設為 false。
2008-06-05
取得 Domain Name (AS3 版)
/**
* author: shinder lin
* email: shinder.lin@gmail.com
*/
package lin.shinder.net
{
import flash.display.DisplayObject;
public class HttpDomain
{
static public var defaultDomain:String = "http://localhost";
static public function getDomain(displayObj:DisplayObject)
{
var url_str:String = displayObj['stage'].loaderInfo.loaderURL;
if (url_str.indexOf("http://") == 0 || url_str.indexOf("https://") == 0) {
var s_index:int = url_str.indexOf("/", 10);
return url_str.substring(0, s_index);
} else {
return defaultDomain;
}
}
}
}
由 URL 取得 Domain Name (AS2 版)
2007-06-13
由 URL 取得 Domain Name (AS2 版)
在測試和發佈 Flash Remoting 專案時還滿有用的
原始檔 MyDomain.as
原始檔 MyDomain.as
/**
* author: shinder lin
* email: shinder.lin@gmail.com
*/
class MyDomain {
static var defaultDomain = "http://localhost";
static function getDomain() {
var url_str = _root._url;
if (url_str.indexOf("http://") == 0) {
var s_index = url_str.indexOf("/", 10);
return url_str.substring(0, s_index);
} else {
return defaultDomain;
}
}
}
2007-06-10
AS3 與 AMFPHP 1.2 part 3 - Credentials
AS3 沒有 setCredentials() 了
而是利用 NetConnection.addHeader(), 下兩行是 Help 裡說明
Adds a context header to the AMF packet structure.
This header is sent with every future AMF packet.
Flash AS3:
而是利用 NetConnection.addHeader(), 下兩行是 Help 裡說明
Adds a context header to the AMF packet structure.
This header is sent with every future AMF packet.
Flash AS3:
var nc:NetConnection = new NetConnection();
nc.objectEncoding = ObjectEncoding.AMF0;
nc.connect('http://localhost/amfphp/gateway.php');
nc.addHeader("Credentials", false,
{userid:'kitty', password:'kitty'});
var responder:Responder = new Responder(onResult, onError);
nc.call('myremoting.DataOp_6.isLogin', responder);
function onResult(re:Object):void {
QopDump.echo(re);
}
function onError(er:Object):void {
QopDump.echo(er);
}
AS3 與 AMFPHP 1.2 part 2
後台傳送資料表至前端的「格式」
DataOp_2.php 原始碼
Flash AS3
正常執行的結果:
方法名稱錯誤的結果:
DataOp_2.php 原始碼
< ?php
class DataOp_2
{
var $dbhost = "localhost";
var $db = "test";
var $table = "tbl_address_book";
var $user = "root";
var $password = "admin";
function DataOp_2(){
mysql_connect($this->dbhost, $this->user, $this->password);
mysql_query("SET NAMES 'utf8'");
mysql_select_db($this->db);
$this->methodTable = array(
"getAllData"=>array(
"access"=>"remote"
)
);
}
function getAllData(){
$sql = sprintf("select * from `%s`", $this->table);
return mysql_query($sql);
}
}
?>
Flash AS3
import QopDump; // just prompt
var nc:NetConnection = new NetConnection();
nc.connect('http://localhost/amfphp/gateway.php');
var responder:Responder = new Responder(onResult, onError);
nc.call('myremoting.DataOp_2.getAllData', responder);
function onResult(re:Object):void {
QopDump.echo(re);
}
function onError(er:Object):void {
QopDump.echo(er);
}
正常執行的結果:
serverInfo:
version:1
id:
serviceName:PageAbleResult
initialData:
[0]:
[0]:3
[1]:哈利
[2]:0987654321
[3]:台北市大安區
[1]:
[0]:4
[1]:凱蒂貓
[2]:0987654322
[3]:宜蘭縣礁溪鄉
[2]:
[0]:6
[1]:小叮噹
[2]:0987654323
[3]:台東縣知本溫泉旁
columnNames:
[0]:id
[1]:name
[2]:phone
[3]:address
cursor:1
totalCount:3
方法名稱錯誤的結果:
line:171
description:The method {getAll} was not declared in the meta data for class {DataOp_2}.
level:User Error
details:C:\wamp163\www\amfphp\amf-core\app\Actions.php
code:AMFPHP_UNDECLARED_METHOD
AS3 與 AMFPHP 1.2 part 1
AS3 object serialization 預設為 AMF3, 後台若使用 AMFPHP 1.2
且要由 AS3 送資料紿後台時, 記得要設定成 AMF0 的格式溝通
且要由 AS3 送資料紿後台時, 記得要設定成 AMF0 的格式溝通
var nc:NetConnection = new NetConnection();
// 設定為 AMF0, 預設值為 AMF3
nc.objectEncoding = ObjectEncoding.AMF0;
nc.connect('http://localhost/amfphp/gateway.php');
訂閱:
文章 (Atom)