![点击分享此内容可以赚币 分享](/master/images/share_but.png)
AMFPHP入门教程.doc
《AMFPHP入门教程.doc》由会员分享,可在线阅读,更多相关《AMFPHP入门教程.doc(21页珍藏版)》请在咨信网上搜索。
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: If you're 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 documentation Load the service browser 说明安装成功。 打开网站根目录的AMFPHP文件夹,进入SERVICES文件夹,新建一个PHP文件命名为HELLOWORLD.php 拷贝以下代码: <?php class HelloWorld { function HelloWorld() { $this->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输入内容(比如"xiaoxiaocainiao"), 单击call按钮: 看到页面下方的提示结果: 好了,你已经初步学会安装AMFPHP并使用了,具体的语法,函数,还需要查看一下官方的文档啦。 下面一起来做一个FLASH通过AMFPHP和PHP交互的小例子: 到这里下载AMFPHP for FLASH8的组件,如果你使用其他版本,请到这里选择下载: 下载后安装,完毕后打开FLASH ,查看 “窗口|公用库|Remoting”就可以看到AMFPHP的组件了。 新建立一个工程,拖一个RemotingClasses组件到舞台的任何地方,再拖一个List组件,命名为myls,拖一个Button组件,命名为"mybt" 在第一帧的代码行复制以下代码: 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("getPerson"); 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 onClick() { getPerson(); } mybt.addEventListener("click", Delegate.create(this, onClick)); 在AMFPHP的SERVICES文件夹下新建一个文件,命名为PersonService.php 复制一下内容到PersonService.php <?php class PersonService { function PersonService() { $this->methodTable=array( "getPerson"=> array( "access"=>"remote" ) ); mysql_connect('localhost','root','wuliqunao'); mysql_select_db('test'); } function getPerson() { $sql=sprintf("SELECT * FROM persons"); $query=mysql_query($sql); return $query; } } ?> 好了,发布你的程序,单击Button按钮,看到结果: 当然了,你的本机需要有个MYSQL数据有,里面简历一个test数据库,这个库里面创建一个persons数据表,表里2个字段,一个是name,一个是age.(表告诉我,你搞不好这个库啊,搜一个MYSQL数据库入门教程,一下就知道啦。) 好了,大功告成,开始学习AMFPHP之路吧~~~~ AMFPhp 与 Flex Builder3 的交互(一) 写一下php与Flex的交互。作为学习笔记,现在这方面中文文档貌似比较少。下面的大多数都来自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。 在 amfphp-1.9.beta.20070513.zip 。下载后,解压到我的本地服务目录,即 D:\php 。然后再浏览器中输入:http://localhost/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 you're 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 documentation Load the service browser 好了,让我们写一个HelloWorld程序吧。首先打开D:\php\amfphp\services目录,新建一个HelloWorld.php文件,在文件中输入以下代码: 1. <?php 2. class HelloWorld 3. { 4. 5. function sayHello() 6. { 7. return "Hello World!"; 8. } 9. } 10. ?> 复制代码 好啦,php端,就先这样了。然后我们写flex端的吧。在Flex builder3新建一个Flex工程。 需要注意的是,在Application server type选择php。呵呵,下一步。 在web root 下填入 D:\php 即我的本地web服务的目录。root url 填入:http://127.0.0.1 即本地IP啦,呵呵。然后下一步,如果你不改源文件的目录的话,就直接Finish啦。 好,在src里再新建一个xml文档,名字叫: services-config.xml ,打开,输入以下代码,这个flex与amfphp的配置文件。 1. <?xml version="1.0" encoding="UTF-8"?> 2. <services-config> 3. <services> 4. <service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage"> 5. <destination id="amfphp"> 6. <channels> 7. <channel ref="my-amfphp"/> 8. </channels> 9. <properties> 10. <source>*</source> 11. </properties> 12. </destination> 13. </service> 14. </services> 15. <channels> 16. <channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel"> 17. <endpoint uri="http://127.0.0.1/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/> 18. </channel-definition> 19. </channels> 20. </services-config> 复制代码 然后右键点击你的项目,选择Properties选项,在弹出的对话框里选择Flex Compiler,在Additional compiler arguments里加入 -services "services-config.xml",如图: 点击src ,打开AMFphp.mxml,好输入以下代码: 1. <?xml version="1.0" encoding="utf-8"?> 2. <mx:Application xmlns:mx=" layout="absolute" backgroundColor="#FFFFFF" viewSourceURL="srcview/index.html"> 3. <mx:RemoteObject id="myservice" fault="faultHandler(event)" showBusyCursor="true" source="HelloWorld" destination="amfphp"> 4. <mx:method name="sayHello" result="resultHandler(event)" /> 5. </mx:RemoteObject> 6. 7. <mx:Script> 8. <![CDATA[ 9. import mx.managers.CursorManager; 10. import mx.rpc.events.ResultEvent; 11. import mx.rpc.events.FaultEvent; 12. private function faultHandler(fault:FaultEvent):void 13. { 14. CursorManager.removeBusyCursor(); 15. result_text.text = "code:\n" + fault.fault.faultCode + "\n\nMessage:\n" + fault.fault.faultString + "\n\nDetail:\n" + fault.fault.faultDetail; 16. } 17. 18. private function resultHandler(evt:ResultEvent):void 19. { 20. result_text.text = evt.message.body.toString(); // same as: evt.result.toString(); 21. } 22. ]]> 23. </mx:Script> 24. 25. <mx:Button x="250" y="157" label="sayHello" width="79" click="myservice.getOperation('sayHello').send();"/> 26. <mx:Button x="250" y="187" label="test fault" click="myservice.getOperation('foo').send(); "/> 27. <mx:TextArea x="10" y="36" width="319" height="113" id="result_text"/> 28. <mx:Label x="10" y="10" text="Result:"/> 29. </mx:Application> 复制代码 好,先不管代码的含义,我们运行一下吧,如果你看见了下面的图片,你就成功了。 点击sayHello按钮,看见它和你问好了吗? 看见了!oh,Good.你太有天赋了,不编程可惜了,呵呵。今天先到这,有空继续。 (本文与作者博客同步更新,呵呵,做个广告,博客地址在下面) 好,让我们来分析一下这段代码吧! 在<mx:RemoteObject>下呢,定义的就是RemoteObject相关的一些东东.(这话题听着别扭),id这个就不解释了,fault就是当服务调用失败并且操作自身不处理时,调度fault事件。showBusyCursor呢,如果为 true,在执行服务时就会显示忙碌光标。在这里重点是后两个属性,source和destination。source后面写的是,你在服务器上的文件名,也就是咱们用php写的那个类的文件的名字,即在D:\php\amfphp\services目录下,这个算是咱们本地服务的根目录。如果你要建一个新的目录为hello,然后把HelloWorld.php这个文件放进去,那么我们的程序应该改一下,即source = "hello.HelloWorld" 。destination有代表什么呢?服务的目标。这个值应该与services-config.xml文件中的目标条目匹配,那好,去找一下services-config.xml这个文件吧,看看有这个叫做destination这个东东吗? 该 <mx:method />这行了,很简单,这个就是咱们要用的方法啊,名字和php里面方法的名字要一致哦。 另外,需要注意的是在我们的显示界面的代码中,在label为sayHello的<mx:Button />里面,click = "myservice.getOperation('sayHello').send" ,这行代码的意思就是当我们点击按钮的时候,将要执行我们的remoteObject对像中的sayHello方法,并且等待result事件,如果一切顺利,php端会给我们返回一个叫做"Hello world"的字符串,然后,将去调用<![CDATA ..... ]]>里面的ResultHandler函数,接着我们的result_text文本就有任务啦,那就是显示这个字符串。怎么样,很简单吧。(其他的请看源代码注释,我也是刚研究,有错误的地方请指正) 哇,今天学到了不少东西,明天继续。原来世界这么美好! 1. <?xml version="1.0" encoding="utf-8"?> 2. <mx:Application xmlns:mx=" layout="absolute" backgroundColor="#FFFFFF" viewSourceURL="srcview/index.html"> 3. <mx:RemoteObject id="myservice" fault="FaultHandler(event)" showBusyCursor="true" source="hello.HelloWorld" destination="amfphp"> 4. <mx:method name="sayHello" result="ResultHandler(event)" /> 5. </mx:RemoteObject> 6. 7. <mx:Script> 8. <![CDATA[ 9. import mx.managers.CursorManager; 10. import mx.rpc.events.ResultEvent; 11. import mx.rpc.events.FaultEvent; 12. //注:错误处理函数 13. private function FaultHandler(fault:FaultEvent):void 14. { 15. //注:删除忙状态光标 16. CursorManager.removeBusyCursor(); 17. //注:返回的错误信息,让其在result_test中显示出来 18. result_text.text = "code:\n" + fault.fault.faultCode + "\n\nMessage:\n" + fault.fault.faultString + "\n\nDetail:\n" + fault.fault.faultDetail; 19. } 20. 21. private function ResultHandler(evt:ResultEvent):void 22. { 23. //注: 将获得的结果转化为String类型,并交给result_text显示出来 24. result_text.text = evt.message.body.toString(); // same as: evt.result.toString(); 25. } 26. ]]> 27. </mx:Script> 28. <!--下面这个东东呢,就是我们的显示界面了,2个按钮、一个文本区域、一个标签。 --> 29. <mx:Button x="250" y="157" label="sayHello" width="79" click="myservice.getOperation('sayHello').send();"/> 30. <mx:Button x="250" y="187" label="test fault" click="myservice.getOperation('hoo').send(); "/> 31. <mx:TextArea x="10" y="36" width="319" height="113" id="result_text"/> 32. <mx:Label x="10" y="10" text="Result:"/> 33. </mx:Application> 复制代码 Amfphp与Flex交互--(三 ) 向php端写数据,并读返回数据 好,还记得我们第一章讲得吗?不记得啦?看下这个链接啊 我们今天做的呢,前端,只要在第一章代码的基础上修改一下就好了,主要的是php端的改变。 所以呢,你可以在你以前的工程里面新建一个Application,然后粘贴下面的代码哦。 先看一下flex端的代码: 1. <?xml version="1.0" encoding="utf-8"?> 2. <mx:Application xmlns:mx=" layout="absolute" backgroundColor="#FFFFFF" viewSourceURL="srcview/index.html"> 3. <mx:RemoteObject id="myservice" fault="FaultHandler(event)" showBusyCursor="true" source="hello.AddEmailDb" destination="amfphp"> 4. <mx:method name="InputUser" result="ResultHandler(event)" /> 5. </mx:RemoteObject> 6. 7. <mx:Script> 8. <![CDATA[ 9. import mx.managers.CursorManager; 10. import mx.rpc.events.ResultEvent; 11. import mx.rpc.events.FaultEvent; 12. //注:错误处理函数 13. private function FaultHandler(fault:FaultEvent):void 14. { 15. //注:删除忙状态光标 16. CursorManager.removeBusyCursor(); 17. //注:返回的错误信息,让其在result_test中显示出来 18. result_text.text = "code:\n" + fault.fault.faultCode + "\n\nMessage:\n" + fault.fault.faultString + "\n\nDetail:\n" + fault.fault.faultDetail; 19. } 20. 21. private function ResultHandler(evt:ResultEvent):void 22. { 23. //注: 将获得的结果转化为String类型,并交给result_text显示出来 24. result_text.text = evt.message.body.toString(); // same as: evt.result.toString(); 25. } 26. ]]> 27. </mx:Script> 28. <!--下面这些东东呢,就是我们的显示界面了,2个按钮、一个文本区域、一个标签。 --> 29. <mx:Button x="250" y="157" label="Send" width="79" click="myservice.getOperation('InputUser').send(result_text.text);"/> 30. <mx:Button x="250" y="187" label="test fault" click="myservice.getOperation('hoo').send(); "/> 31. <mx:TextArea x="10" y="36" width="319" height="113" id="result_text"/> 32. <mx:Label x="10" y="10" text="Result:"/> 33. 34. </mx:Application> 复制代码 发现变化了吗?没有?再仔细瞅瞅,哦!原来,在第三行,source里面,多了一个这个东东"hello.AddEmialDb",这个是干什么的呢?就是帮助flex找到php的文件啊。在第4行,即 定义RemoteObject的里面,我们换了一个叫做InputUser的函数,当然,这个一定是php端函数啦。在第29行,按钮的click事件里面getOperation的参数也同样改变为InputUser,另外send()函数里面好像多了一个文本信息,猜猜?恩,对,这个就是要向Amfphp端发送的东东。很好理解。对吧? 然后是php端,在D:\webroot\amfphp\services\ 新建一个hello目录,在这个目录中再新建一个叫做AddEmailDb.php的文件。然后用你所熟悉的编辑器打开它,敲入以下代码:(“傻瓜,我才不敲呢,我要copy过去。” 好吧,随你!) 1. <?php 2. class AddEmailDb 3. { 4. function InputUser($post) 5. { 6. global $host,$dbTable, $dbPass,$dbId; 7. $host = "localhost"; 8. $dbId = "root"; 9. $dbPass = "123456"; 10. $dbTable = "mmmm"; 11. 12. $link = mysql_connect($host,$dbId,$dbPass); 13. mysql_select_db($dbTable); 14. if(!$link) 15. { 16. die('Connection Impossible:' . mysql_error()); 17. } 18. else 19. { 20. $sql = "Insert INTO mmmm(id, adressemail) VALUES ('','$post')"; 21. mysql_query($sql); 22. 23. } 24. mysql_close($link); 25. return "success"; 26. 27. } 28. } 29. ?> 复制代码 运行你的Apache ,开启你的mysql。在mysql里面要建立一个数据库(我用的是phpMyAdmin),起个名字叫做“mmmm”,建立一张表叫做“mmmm”,表有两个字段,一个叫做“id”,另一个叫做“adressemail”。好! 在flex端运行。 看到与下面这张图一样的界面了吗? 看到了?继续,在文本区域内,输入一个邮件地址吧。然后点击Send按钮,如果文本框里出现了一个success的单词,那么恭喜你,成功了。你太有才了,还真不是盖的。哈哈!) php端的代码是啥意思呢?首先我们看到一个叫做 AddEmailDb的类,这里一定要注意,这个类的名字一定要和这个文件的名字相同,然后是InputUser($post)这个函数,它带了一个参数,这个参数就是我们用来接收Flex端 result_text.text 里面的信息的。然后呢,下面是一对链接mysql的语句,关键的是 1. 2. else 3. { 4. $sql = "Insert INTO mmmm(id, adressemail) VALUES ('','$post')"; 5. mysql_query($sql); 6. } 复制代码 这段代码,就是往数据库里面插入信息啊。 最后还注意一个 return "success"; 这个就是我们发送成功后返回的那个单词啊,怎么样,很好理解吧。 看到这,你还犹豫什么呢?继续在code的世界里面遨游吧。没有解决不了的问题哈!加油! AMFPhp与Flex3交互(二)--一个带有DataGrid稍微复杂的例子 今天我们做一个稍微复杂的例子,在这个例子中,我们将要用到ArrayCollection作为返回的结果。在这个例子中,我们可爱的remote方法将会返回一个数组,数组中的值哪来的呢,就是在Person类里面的属性,呵呵。 首先在我们的本地服务大本营,D:\php\amfphp\services (为啥这个是大本营啊,去看看教程的第一节,呵呵),建立一个叫做tutorials(认识这个单词吗?它是“指南”的意思,我又学会了个单词)的目录,我们今天要在这个目录里写一些php文档。废话不多说,上代码!建立一个叫做Person.php的文档。代码如下: 1. <?php 2. class Person 3. { 4. var $firstName; 5. var $lastName; 6. var $phone; 7. var $email; 8. // explicit actionscript package 9. var $_explicitType = "tutorials.Person"; 10. } 11. ?> 复制代码 在这里面我们看到这样一个变量$_explicitType ,这位老兄是干什么的呢?他是告诉amfphp老大,这个类是与flash中的tutorials.Person(注意,这里的这个类是在flash中的,我们还没有建立,马上我们就要创建它)这个类等价的。好,既然你告诉amfphp老大有这个类了,那就要建立一个啊,要不被老大揍可不是闹着玩的。 好,上一节我们已经建立了一个工程,我们就还用那个工程吧,点击打开src文件夹,右键新建一个文件夹,起名字叫做tutorials,在这个文件夹中再建立一个Person.as文件。好,把下面的代码拷贝进去。 1. package tutorials 2. { 3. [RemoteClass(alias="tutorials.Person")] 4. [Bindable] 5. public class Person 6. { 7. public var firstName:String; 8.- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AMFPHP 入门教程
![提示](https://www.zixin.com.cn/images/bang_tan.gif)
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文