本文展示的是 Flash ActionScript 2.0 / 3.0 時代 的 AMFPHP 整合範例。AMFPHP 實現 AMF (Action Message Format) 二進制協議,讓 Flash 客戶端直接呼叫 PHP 服務端方法,傳遞強型別物件,比 XML/JSON 更高效。現代專案已全面轉向 HTML5/JavaScript + REST API 或 GraphQL,本文僅供歷史參考或維護舊系統參考。
Flash (AS2/AS3)
│ AMF over HTTP
▼
AMFPHP Gateway (gateway.php)
│ PHP Remoting Service
▼
PHP Service Class (favorite.php)
│ PDO / mysqli
▼
MySQL Database
// 服務連接設定
_global.svc = new Service(
"https://localhost/amfphp/gateway.php", // Gateway 端點
myLogger, // 除錯 Logger
"favorite", // 服務名稱(對應 PHP 類)
null, null
);
// 新增收藏
append_btn.onRelease = function() {
var pc = svc.append(webname_txt.text, url_txt.text); // 呼叫 PHP append()
pc.responder = new RelayResponder(this, "append_Result", "onError");
webname_txt.text = url_txt.text = "";
};
append_Result = function(re) {
var id = re.result;
if (id != "error") {
Alert.show("保存成功,ID: " + id);
refresh_data(); // 重新載入列表
} else {
Alert.show("儲存失敗");
}
};
// 取得資料列表
function refresh_data() {
favorite_dg.removeAllColumns();
var pc = svc.get_data();
pc.responder = new RelayResponder(this, "getData_Result", "onError");
}
function getData_Result(re) {
var rs = re.result; // 陣列集合
favorite_dg.columnNames = ["id_PK", "webname", "url", "timeline"];
favorite_dg.dataProvider = rs; // 直接綁定 DataGrid
}
<?php
require_once 'config.php'; // PDO 連接
class FavoriteService {
private $pdo;
public function __construct() {
$this->pdo = pdo(); // 取得 PDO 實例
}
// 新增收藏
public function append($webname, $url) {
$webname = trim($webname);
$url = trim($url);
if ($webname === '' || $url === '') return "error";
$stmt = $this->pdo->prepare(
"INSERT INTO favorites (webname, url, created_at) VALUES (?, ?, NOW())"
);
if ($stmt->execute([$webname, $url])) {
return (string)$this->pdo->lastInsertId();
}
return "error";
}
// 取得所有收藏
public function get_data() {
$stmt = $this->pdo->query(
"SELECT id_PK, webname, url, created_at AS timeline FROM favorites ORDER BY id_PK DESC"
);
return $stmt->fetchAll(); // 回傳關聯陣列,AMFPHP 自動序列化為 AS 物件陣列
}
}
?>
CREATE TABLE `favorites` (
`id_PK` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`webname` VARCHAR(200) NOT NULL,
`url` VARCHAR(500) NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在 amfphp/services/ 目錄放置 FavoriteService.php,或透過 services-config.xml 註冊。
/api/favorites 端點,前端用 fetch()/Axios 呼叫Flash Player 2020 年底已停止支援,新專案請勿採用 AMFPHP 架構。