1、AMFPHP入门教程。 不想传递拆分字符串,解析串行 XML了吧?厌烦 JSON了?试试 AMF吧,传送多种数据格式。首先下载 AMFPHP(本教程使用 1.9BETA2)你可以选择其他版本 在这里选择下载下载后,解压缩,把文件夹中的 amfphp 文件夹拷贝到 APACHE服务器的网站根目录。然后打开浏览器,输入http:/localhost/amfphp/gateway.php 确定如果提示:amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash.Note
2、: If youre reading an old tutorial, it will tell you that you should see a download window instead of this message. This confused people so this is the new behaviour starting from amfphp 1.2.View the amfphp documentationLoad the service browser说明安装成功。打开网站根目录的 AMFPHP 文件夹,进入 SERVICES 文件夹,新建一个 PHP文件命名为
3、 HELLOWORLD.php拷贝以下代码:methodTable = array(“say“ = array(“access“ = “remote“,“description“ = “Pings back a message“);function say($sMessage)return You said: . $sMessage;?保存!在浏览器地址栏输入http:/localhost/amfphp/browser/回车AMFPHP 的项目管理器:单击 HelloWorld看到一下内容,就是 HELLOWORLD 项目具体内容:在 sMessage 输入内容(比如“xiaoxiaocain
4、iao“), 单击 call 按钮:看到页面下方的提示结果:好了,你已经初步学会安装 AMFPHP 并使用了,具体的语法,函数,还需要查看一下官方的文档啦。下面一起来做一个 FLASH 通过 AMFPHP 和 PHP 交互的小例子:到这里下载 AMFPHP for FLASH8 的组件,如果你使用其他版本,请到这里选择下载:http:/ FLASH ,查看 “窗口|公用库|Remoting”就可以看到 AMFPHP 的组件了。新建立一个工程,拖一个 RemotingClasses 组件到舞台的任何地方,再拖一个 List 组件,命名为 myls,拖一个 Button 组件,命名为 “mybt“
5、在第一帧的代码行复制以下代码:import mx.remoting.*;import mx.rpc.*;import mx.utils.Delegate;import mx.remoting.debug.NetDebug;var gatewayUrl:String = “http:/localhost/amfphp/gateway.php“;var service:Service;NetDebug.initialize();service = new Service(gatewayUrl, null, “PersonService“);function getPerson() trace(“g
6、etPerson“);var pc:PendingCall = service.getPerson();pc.responder = new RelayResponder(this, “handleGetPerson“);function handleGetPerson(re:ResultEvent) trace(“handleGetPerson“);trace(re.result.getItemAt(0).name);_root.mytree.dataProvider = re.result;_root.mydg.dataProvider = re.result;function onCli
7、ck() getPerson();mybt.addEventListener(“click“, Delegate.create(this, onClick);在 AMFPHP 的 SERVICES 文件夹下新建一个文件,命名为PersonService.php复制一下内容到 PersonService.phpmethodTable=array(“getPerson“=array(“access“=“remote“ );mysql_connect(localhost,root,wuliqunao);mysql_select_db(test);function getPerson()$sql=sp
8、rintf(“SELECT * FROM persons“); $query=mysql_query($sql);return $query;?好了,发布你的程序,单击 Button 按钮,看到结果:当然了,你的本机需要有个 MYSQL 数据有,里面简历一个 test 数据库,这个库里面创建一个 persons 数据表,表里 2 个字段,一个是 name,一个是age.(表告诉我,你搞不好这个库啊,搜一个 MYSQL 数据库入门教程,一下就知道啦。)好了,大功告成,开始学习 AMFPHP 之路吧AMFPhp 与 Flex Builder3 的交互(一)写一下 php与 Flex的交互。作为学习
9、笔记,现在这方面中文文档貌似比较少。下面的大多数都来自 http:/www.sephiroth.it 。英文好的同学可以直接去看。好,先说一下我的基本配置吧。php 版本:php-5.2.6-Win32.zip,apache 版本:apache_2.2.8-win32-x86,mysql 版本:mysql-5.0.51a-win32.具体的配置方法就不说了,去网上搜吧,太多了。我的本地服务放在 D:php。 好,ok。在 http:/ amfphp-1.9.beta.20070513.zip 。下载后,解压到我的本地服务目录,即 D:php 。然后再浏览器中输入:http:/localhost
10、/amfphp/gateway.php 如果你看到了如下信息,就说明安装成功了。amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash.AMF C Extension is loaded and enabled.Note: If youre reading an old tutorial, it will tell you that you should see a download window instead of this message. This c
11、onfused people so this is the new behaviour starting from amfphp 1.2.View the amfphp documentationLoad the service browser好了,让我们写一个 HelloWorld程序吧。首先打开 D:phpamfphpservices目录,新建一个 HelloWorld.php文件,在文件中输入以下代码: 1. 复制代码好啦,php 端,就先这样了。然后我们写 flex端的吧。在 Flex builder3新建一个 Flex工程。需要注意的是,在 Application server ty
12、pe选择 php。呵呵,下一步。在 web root 下填入 D:php 即我的本地 web服务的目录。root url 填入:http:/127.0.0.1 即本地 IP啦,呵呵。然后下一步,如果你不改源文件的目录的话,就直接 Finish啦。好,在 src里再新建一个 xml文档,名字叫: services-config.xml ,打开,输入以下代码,这个 flex与 amfphp的配置文件。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. *11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 复制代码然后右键点击你的项目,选择 Propertie
13、s选项,在弹出的对话框里选择 Flex Compiler,在 Additional compiler arguments里加入 -services “services-config.xml“,如图:点击 src ,打开 AMFphp.mxml,好输入以下代码: 1. 2. 3. 4. 5. 6.7. 8. 23. 24.25. 26. 27. 28. 29. 复制代码好,先不管代码的含义,我们运行一下吧,如果你看见了下面的图片,你就成功了。点击 sayHello按钮,看见它和你问好了吗?看见了!oh,Good.你太有天赋了,不编程可惜了,呵呵。今天先到这,有空继续。(本文与作者博客同步更新,呵
14、呵,做个广告,博客地址在下面)好,让我们来分析一下这段代码吧!在下呢,定义的就是 RemoteObject 相关的一些东东.(这话题听着别扭),id 这个就不解释了,fault 就是当服务调用失败并且操作自身不处理时,调度 fault 事件。showBusyCursor 呢,如果为 true,在执行服务时就会显示忙碌光标。在这里重点是后两个属性,source 和 destination。 source 后面写的是,你在服务器上的文件名,也就是咱们用php 写的那个类的文件的名字,即在 D:phpamfphpservices 目录下,这个算是咱们本地服务的根目录。如果你要建一个新的目录为 hel
15、lo,然后把 HelloWorld.php 这个文件放进去,那么我们的程序应该改一下,即 source = “hello.HelloWorld“ 。destination 有代表什么呢?服务的目标。这个值应该与 services-config.xml 文件中的目标条目匹配,那好,去找一下services-config.xml 这个文件吧,看看有这个叫做 destination 这个东东吗?该 这行了,很简单,这个就是咱们要用的方法啊,名字和 php 里面方法的名字要一致哦。另外,需要注意的是在我们的显示界面的代码中,在 label 为 sayHello 的里面,click = “myservi
16、ce.getOperation(sayHello).send“ ,这行代码的意思就是当我们点击按钮的时候,将要执行我们的 remoteObject 对像中的 sayHello 方法,并且等待 result 事件,如果一切顺利,php 端会给我们返回一个叫做“Hello world“的字符串,然后,将去调用里面的 ResultHandler 函数,接着我们的 result_text 文本就有任务啦,那就是显示这个字符串。怎么样,很简单吧。 (其他的请看源代码注释,我也是刚研究,有错误的地方请指正)哇,今天学到了不少东西,明天继续。原来世界这么美好! 1. 2. 3. 4. 5. 6.7. 8.
17、!CDATA9. import mx.managers.CursorManager;10. import mx.rpc.events.ResultEvent;11. import mx.rpc.events.FaultEvent;12. /注:错误处理函数13. private function FaultHandler(fault:FaultEvent):void14. 15. /注:删除忙状态光标 16. CursorManager.removeBusyCursor();17. /注:返回的错误信息,让其在 result_test中显示出来18. result_text.text = “code:n“ + fault.fault.faultCode