首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Flash 後台資料連接:AMFPHP 實現 PHP + MySQL 收藏夾範例

     編輯:PHP 綜合知識

技術背景說明

本文展示的是 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

客戶端 ActionScript 代碼解析

// 服務連接設定
_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 服務類 (favorite.php)

<?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 服務註冊

在 amfphp/services/ 目錄放置 FavoriteService.php,或透過 services-config.xml 註冊。

現代替代方案

  • REST API + JSON:PHP 建立 /api/favorites 端點,前端用 fetch()/Axios 呼叫
  • GraphQL:單一端點彈性查詢,適合複雜資料關係
  • WebSocket / Server-Sent Events:即時雙向通訊需求

Flash Player 2020 年底已停止支援,新專案請勿採用 AMFPHP 架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved