Displaying articles with tag amfphp

Testing your AMFPHP installation

Posted by PunNeng, Sun Nov 27 01:52:00 UTC 2005

ตรวจสอบ gateway.php ก่อนเลยครับ ว่าใช้ได้หรือเป่า จากนั้นมาลองกันเลย เริ่มด้วย save code ข้างล่างเป็น HelloWorld.php ไว้ใน services folder

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
<?php
class HelloWorld{
    function HelloWorld(){
        $this->methodTable = array(
            "say" => array(
                "access" => "remote",
                "description" => "Pings back a message"
            )
        );
    }

    function say($sMessage){
        return 'You said: ' . $sMessage;
    }
}
?>

เสร็จแล้ว มาที่ Flash ไปเอาตัว RemotingClasses กับ RemotingDebugClasses มาแปะไว้ก่อน ที่ Window > Common Libraries > Remoting แล้วยัด code นี้ไปที่งาน Flash ของเราเลย

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
import mx.remoting.*;
import mx.rpc.*;
import mx.remoting.debug.NetDebug;

var gatewayUrl:String="http://localhost/flashservices/gateway.php";

NetDebug.initialize();
var _service:Service = new Service(gatewayUrl, null, 'HelloWorld', null , null);
var pc:PendingCall = _service.say("Hello world!");
pc.responder = new RelayResponder(this, "handleResult", "handleError");

function handleResult(re:ResultEvent){
    trace('The result is: ' + re.result);
}

function handleError(fe:FaultEvent){
    trace('There has been an error');
    trace('result : '+ fe.fault.faultstring);
}

แค่นี้ก้อเป็นอันเสร็จเรียบร้อย ลองสั่ง publish เลย แล้วมาดูผลกัน ควรจะได้ตามนี้นะ

The result is: You said: Hello world!

แล้วในหน้า NetConnection Debugger จะเป็นแบบนี้

ถ้าไม่ได้ น่าจะมีสองสาเหตุ อันแรกคือตอน Compilation errors

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 8: The class 'Service' could not be loaded.
     var _service:Service = new Service(gatewayUrl, null, 'HelloWorld', null , null);

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 9: The class 'PendingCall' could not be loaded.
     var pc:PendingCall = _service.say("Hello world!");

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 12: The class 'ResultEvent' could not be loaded.
     function handleResult(re:ResultEvent)

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 17: The class 'FaultEvent' could not be loaded.
     function handleError(fe:FaultEvent)

Total ActionScript Errors: 4     Reported Errors: 4

อันนี้คือไม่ได้โยนเจ้าตัว Remoting Component ทั้งสองตัว ลงไปแปะเอาไว้ หรืออย่างที่สอง Runtime errors

Error opening URL http://localhost/flashservices/gateway.php

อันนี้อาจจะเป็นไปได้ทั้งยังไม่ได้เซ็ต gatewayUrl หรือ ยังไม่ได้เปิด server ของเรา แต่ถ้าได้อันนี้

There has been an error

หา errors ได้จาก NetConnection Debugger

Status (object #2)
.....description: "The class {HelloWorld} could not be constructed, check the stack trace for the root cause"
.....details: "c:\pat\projets\amfphp\src\actions\ClassLoaderAction.php"
.....level: "User Error"
.....line: 61
.....exceptionStack (object #3)
..........[0] (object #4)
...............[0] (object #5)
....................code: 256
....................description: "The class {HelloWorld} could not be constructed, check the stack trace for the root cause"
....................details: "c:\pat\projets\amfphp\src\actions\ClassLoaderAction.php"
....................level: "User Error"
....................line: 61
..........[1] (object #6)
...............[0] (object #7)
....................code: 256
....................description: "The class {HelloWorld} could not be loaded.  The class file exists but may contain syntax errors, or the class is misnamed."
....................details: "c:\pat\projets\amfphp\src\actions\ClassLoaderAction.php"
....................level: "User Error"
....................line: 83

หมายความว่า AMFPHP หา class ของเราไม่เจอ อาจจะเพราะว่ายังไม่ได้สร้าง class ไว้ใน services folder หรือยังไม่ได้ไปเซ็ต base class path ใน gateway.php

เรียบร้อยยยแว้วววว

แก้ไขล่าสุด วันที่ 17 มิถุนายน 2550 เวลา 2.50 น.

ข้อมูลจาก
http://www.amfphp.org/docs/testingamfphp.html

1 comment | Filed Under: General | Tags: amfphp

Installing Flash Remoting and AMFPHP

Posted by PunNeng, Thu Nov 24 00:13:00 UTC 2005

Installing Flash Remoting

ถ้าคนไม่เคยทำ Flash มาก่อน ดูเหมือนจะลำบากหน่อยกับการที่จะมาใช้ Remoting อาจจะต้องไปหา Flash มาติดตั้งก่อน แล้วก็ลองฝึก ActionScript สักหน่อย ตำราก็หาไม่ยาก มีเยอะ หรือจะไปที่ actionscript.org ก็ได้

ติดตั้ง Flash Remoting Component

ในการที่จะเข้าถึง Flash Remoting ต้องติดตั้ง AS2 Remoting Component ก่อน เลือกเอา ว่าจะใช้ตัวไหน

ทำความคุ้นเคยกับ Remoting ก่อน

5 สิ่ง ที่จะได้หลังจากการติดตั้ง
  • NetConnection Debugger จะช่วยแสดง message ต่างๆ ที่เราส่งไปหา server จะช่วยเรา debug ได้เป็นอย่างดี หลังจากติดตั้งไปแล้ว ใน Flash ให้ไปที่ Window > Other Panels > NetConnection Debugger ถ้าหาตัวนี้ไม่เจอ ให้ไปที่ C:\Documents and Settings\{Your username}\Local Settings\Application Data\Macromedia\Flash MX 2004\en\configuration\WindowSWF\NetConnection Debugger.swf
  • Service Browser จะช่วยแสดง services ต่างๆ ที่คุณสร้างเอาไว้ แต่อันนี้ยังไม่ได้ทำงานร่วมกับ AMFPHP1 ให้ไปที่ Windows > Other Panels > Service Browser ถ้าไม่เจอ มันจะอยู่ที่เดียวกับ NetConnection Debugger.swf
  • ใน Help ของ Flash จะมี topic เกี่ยวกับ remoting โผล่ขึ้นมา
  • Library ของ Remoting จะอยู่ที่ Window > Common Libraries > Remoting ต้อง เอามันมาแปะไว้บนงานของเราด้วยนะ ไม่งั้นรันไม่ออก
  • ตัว connenct component จะอยู่ที่ Components > Data components > RemotingConnector
(1) ถ้าติดตั้ง AMFPHP ไปแล้ว เราจะสามารถ generate code บนหน้า browser ได้เลย ทุ่นแรงได้เยอะ

Installing AMFPHP

ความต้องการของระบบ

อันดับแรกเลยคงต้องติดตั้งชุด PHP ก่อน ใครสนใจใช้อะไร ค่ายไหนตามสบายคับ แต่ผมใช้ XAMPP อาจจะเป็น AppServ ก็ได้ แต่ขอเป็น PHP4 เป็นอย่างต่ำ(> 4.3.0) เราจะได้ test ได้ในเครื่องเราเอง และก็อย่างลืมไป enable error logging ด้วยละ เพราะตอน debug ตัว log file จะช่วยเราได้อย่างมาก

วิธี enable error logging บน Apache

เปิด php.ini แล้ว search 'log_errors' แล้วเปลี่ยนค่าให้เป็น On แล้ว restart Apache ก็เสร็จสิ้น บรรดา message ทั้งหมดที่จะเกิดขึ้น ก็จะไปปรากฎบน log file ตัวนี้จะช่วย debug ได้เยอะ แต่ถ้ามือใหม่ ก็จะมี NetConnect Debugger โดยใช้ NetConnection.Call.BadVersion คอยช่วยอยู่ (ตัวอย่าง)

ติดตั้ง AMFPHP บน Server

Download here จากนั้นก็ทำการ copy ไปยัง path แรกของเว็บของเรา แล้วเปลี่ยนชื่อให้เป็น /flashservices จะดีมาก แต่จริงๆ แล้วไม่ต้องเปลี่ยนก็ได้ แต่เราต้องไปเปลี่ยนค่าในหลายๆ จุดบนใน Remoting

gateway.php

เปลี่ยนค่าในนี้นิหน่อย ตามนี้เลย

<?php
$gateway->setLooseMode(true);
$gateway->setCharsetHandler("iconv", "UTF-8", "UTF-8");
$gateway->setWebServiceHandler('php5');
?>

ทดสอบการติดตั้ง

หลังจากที่เราทำการเปลี่ยนค่าอะไรนิหน่อยแล้ว ต่อไปก็มาดูว่า AMFPHP ของเราทำงานหรือไม่ โดยการเปิด http://localhost/flashservices/gateway.php แล้วจะมีข้อความอีกเล็กน้อยมาบอกว่าติดตั้งได้ถูกต้องแล้ว นั่นละ เสร็จเรียบร้อย ถ้าไม่ออก ลองดู path อีกที

หรือลอง http://localhost/flashservices/debuggateway.php ก็จะได้ผลคล้ายๆ กัน แต่ debuggateway.php จะเป็น gateway ที่ใช้สำหรับช่วงที่กำลังพัฒนางานอยู่ โดยจะทำงานผ่าน gateway.php อีกที โดยมันจะเรียกผ่าน cURL ใช้ตัวนี้ ถ้าไม่อยากไปยุ่งกับ error_logs จาก php โดยตรง ถ้า log จาก php มาไม่ถึง(ด้วยการใช้ FaultEvent.fault.faultstring) ให้ใช้วิธีข้างบนที่ใช้ NetConnection.Call.BadVersion แก้ขัดเอา
ปัญหาที่มันไม่ยอมสมประกอบก็คือ AMFPHP เป็นผลมาจากการ reverse engineering มาจาก AMF ที่สร้างโดย Macromedia(ตอนนั้น) เป็นธรรมดา ที่ผลของการ reverse จะไม่ปกติ 100%

ติดตั้ง HTML Service browser

เปิด browser/config.inc.php เพื่อไปตรวจดู path ให้แน่ใจเสียก่อน path จากนั้นก็เปิด http://localhost/flashservices/browser/ จะมี sevice ให้เราปรับแต่งกันได้ แล้วจะมีหน้าต่างที่คอย generate ActionScript ให้เราด้วย อันนี้จะช่วยเรามากทีเดียว

ฝากไว้

มาถึงตรงนี้ คงพอจะมองออกเป็นรูปเป็นร่างแล้ว เริ่มจากตัว Flash มี Remoting Framework อยู่แล้ว เหลือเพียง Gateway เท่านั้น ที่จะมาเป็นตัวต่อเข้ากับ back-end ต่างๆ เพียงแต่อันนี้ ผมเลือก PHP ซึ่งมีตัว gateway หลายตัวและผมก็เลือก AMFPHP จากนั้น ตัว Gateway ก็จะทำการต่อเข้ากับ back-end ของเรา


ลองสังเกต ว่าการใช้ Flash Remoting มีข้อกำหนดอยู่อย่างเดียวคือ เราจะใช้ back-end เป็นอะไร เท่านั้น เพราะฉะนั้น บน Host ของเราจริงๆ เป็นอะไรก็ได้ ไม่มีข้อกำหนด ขอเพียงมีเงื่อนไขที่ตามที่เขียนๆ มา เท่านั้นเอง ถ้าเป็น back-end เป็น PHP เราจะต้องใช้ Gateway ที่สนับสนุน PHP เช่น AMFPHP, PHPObject หรืออื่นๆ ถ้าเป็น Java ก็ต้องใช้ OpenAMF, RemotingMX for java หรืออื่นๆ ตามที่ว่าไปแล้ว

คราวหน้าเราจะมา HelloWorld กัน ใน HowTo ครับ

แก้ไขล่าสุด วันที่ 15 มิถุนายน 2550 เวลา 3.10 น.

ข้อมูลจาก
http://www.amfphp.org/docs/installingremoting.html
http://www.amfphp.org/docs/installingamfphp.html

0 comments | Filed Under: General | Tags: amfphp

Feature comparison between AMFPHP and other Remoting gateway

Posted by PunNeng, Sun Nov 20 00:56:00 UTC 2005

นอกจาก AMFPHP แล้ว ยังมีอีกหลายๆค่ายที่สร้างตัว Remoting Gateway นี้มา เช่น PHPObject, Cabron Connector, NKConnector แต่ที่เห็นเด่นๆเลยคงจะเป็น PHPObject

AMFPHP กับ PHPObject

PHPObject ก็ทำหน้าที่เหมือนๆกับ AMFPHP แต่มีอย่างนึงที่ต่างออกไปคือไม่ได้ใช้ AMF Format แต่หันมาใช้ PHP Serialize Fromat แทน แล้วจะส่งข้อมูลผ่านให้ Flash โดยผ่าน POST method โดยใช้ร่วมกับ XML Object แทนที่จะใช้ NetConnection ในส่วนของ Flash Comm รองรับ Remoting แต่ไม่รองรับ LoadVars หรือ XML นั่นหมายความว่า PHPObject ไม่สามารถทำงานร่วมกับ Flash Comm ได้

ข้อแตกต่างอื่น ของ PHPObject คือ Object จะถูก syncronize ข้ามระหว่าง Flash กะ PHP หรือ ก่อนที่จะมีการส่งอะไรไปให้ Flash จะมีการวิ่งไปบน Server สองเที่ยว แทนที่จะิวิ่งเที่ยวเดียวในการติดต่อกับ Remoting หรือ บนฝั่ง PHP, function ทีถูกทำการ serialize ไว้ ถ้าส่งไปใช้บน Flash จะต้องมาเสียเวลา deserialize อีก เสียเวลาตายเลย และ PHPObject ยังไม่ทำการ serialize SQL resultset โดยอัติโนมัติด้วย แต่ AMFPHP มันทำให้ และตัวที่คุม Web Services ของ PHPObject ยังมีข้อจำกัดคือใช้ได้เฉพาะ NuSOAP แต่ AMFPHP ใช้ได้ทั้ง SOAP::Pear และ PHP5 SoapClient

ลองมาดูค่ายอื่นๆ หน่อย

แก้ไขล่าสุด วันที่ 14 มิถุนายน 2550 เวลา 3.25 น.

ข้อมูลจาก
link ตายไปแล้ว ==' http://www.amfphp.org

ปล. FlashORB คือ Midnight Coders' WebORB (อันเดียวกัน)

0 comments | Filed Under: General | Tags: amfphp

AMFPHP

Posted by PunNeng, Wed Nov 16 23:07:00 UTC 2005

มาต่อจากคราวที่แล้ว Flash Remoting คราวนี้มาว่ากันด้วยเรื่อง AMFPHP

AMFPHP คืออะไร

AMFPHP เป็นชุดที่ต่อเติมมาจาก Flash Remoting Framwork ทำหน้าที่เป็นทางผ่านจาก Flash ไปยัง PHP ซึ่งเป็นชุด Open-Source ของฟรีครับ ของฟรี การทำงานไว้ใจได้ ตัวเวอร์ชันใหม่นี้ ฝ่ายพัฒนาได้พยายามทำให้ชุดพัฒนาอันนี้มีความเสถียร และเพิ่มความสามารถให้มากขึ้นให้เหมือนกับการต่อ Remoting กับ ColdFusion

ลองมาเปรียบเทียบ AMFPHP กับตัวอื่นดู

ชุดที่ถูกพัฒนาต่อยอดจาก Flash Remoting ที่ทำหน้าที่เหมือนๆ กับ AMFPHP นี้ (ยกเว้น FlashORB) จะใช้การระบุค่าที่ทำให้ Flash กับ back-end อีกฝั่งอ่านกันออก จะทำกันบนฝั่ง Server side เช่น ชุด RemotingMX for .NET or JAVA จะใช้ ASObject เป็นตัวห่อหุ้ม ระบุค่าที่กำหนดเอาไว้ ของ actionscript object เป็น Obejct ตัวใหม่ ถ้ามันทำการส่งไปยัง back-end อีกตัว ฝั่ง back-end นั้น ก็ต้อง import ASObject เข้ามา เพื่อจะทำให้มองเป็น Object ชนิดเดียวกัน ทำให้อ่านกันรู้เรื่อง (ตัวอย่าง)

แต่ AMFPHP ไม่ใช่ มันจะไม่ใช่วิธีแบบนี้ AMFPHP จะใช้การระบุไปใน PHP เลย โดยใช้ methodTable เป็นตัวกำหนดก่อน ใน PHP class นั้นๆ (ตัวอย่าง) ซึ่งมันจะไม่ไปตีกับ class ของเรา ในกรณีที่เราจะเอา class นี้ ไป reuse ในงานอื่นๆ ที่ไม่เกี่ยวกับ Flash Remoting และในส่วนของ ActionScript จะมีการส่งผ่านข้อมูลโดยมี datatype ของมัน

มันจะเป็นการง่ายมากถ้าเราเกิดต้องย้าย app ของเราซึ่งถูกสร้างสำหรับ ColdFusion, Java or .NET แล้วจะ remote ไปยัง AMFPHP Framework เพราะ ActionScript ทีทำไว้ไม่ต้องไปเปลี่ยนแปลง ซึ่งไม่เหมือนกับ PHPObject (จะกล่าวถึงอีกทีในคราวหลัง) ตัว AMFPHP จึงทำหน้าที่เสมือนประตูทางผ่านจริงๆ

จุดเด่นอีกอย่างก็คือ ทำงานผ่าน service browser ได้ นั่นหมายความว่า เราจะทำการสร้าง code ให้เรา ผ่านทาง html ซึ่งจะมี form ให้กรอก สำหรับมือใหม่ คงถูกใจ

ทำไมต้อง PHPAMF

  • ฟรี
  • เร็ว
  • เป็น open-source ง่ายต่อการพัฒนา
  • ไม่ยากต่อการต่อเติม เพราะตัว Framework มีลักษณะเป็น pattern ทำให้ศึกษาง่าย
  • ใช้ OOP ซึ่งมีลักษณะง่ายต่อการควบคุม
  • ตัว gateway และ ตัว service ไม่ขึ้นแก่กัน เพราะสร้างนอก AMFPHP ทำให้เอาไป reuse ได้ง่าย
  • มีการ generate code ผ่านบน html ง่ายสุดๆ ไม่ต้องไปเสียเวลาพิมพ์
  • การควบคุม SQL จะสะดวกขึ้น เพราะ support SQLเกือบทุกชนิด ไม่ว่าจะเป็น mysql, postgress, adodb, sqlite, mysqli และอื่นๆ
  • ไม่ต้องมาคอยทำซ้ำกับ source เราหลายๆครัง ในกรณีที่ต้องย้ายไปทำร่วมกับตัวอื่นๆ เช่น ColdFusion, Java, .NET ฯลฯ ซึ่งไม่เหมือนกับ PHPObject
  • มีตัวอย่างบานเลย มี comunity เยอะมาก

(1)ตอนนี้มันจะต่อกัน 4 ตัวนะ คือ Flash - Flash Remoting - AMFPHP - PHP โครงสร้างจริงๆ อาจจะไม่ใช่แบบนี้ 100% แต่แบบนี้ มันก็มองเห็นเป็นรูปเป็นร่างและทำความเข้าใจง่ายดี

แก้ไขล่าสุด วันที่ 12 มิถุนายน 2550 เวลา 3.04 น.

ปล. ใครเข้า FlashORB ไม่ได้ เข้า FlashORB Documentation แทนนะครับ

ข้อมูลจาก
http://www.amfphp.org

1 comment | Filed Under: General | Tags: amfphp

codegent: we're hiring