- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用fsockopen()实现异步调用PHP.doc.doc
?使用fsockopen 实现异步调用PHP?
2011-03-09 16:34:42|??分类: php |??标签: |字号大中小?订阅
原文作者: laruence
原文地址: /2008/04/16/98.html Web 服务器执行一个脚本,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。 而有的时候,我们更本不关心这些耗时的脚本的执行结果,但却还要等他执行完返回,才能继续下一步。 那么有没有什么办法,只是简单的触发调用这些耗时的脚本然后就继续下一步,让这些耗时的脚本在服务端慢慢执行? 接下来,我将使用fscokopen来实现这一功能。 PHP是支持socket编程的,就是fsockopen, 在以前做CMS的时候,我也曾经用过它做过smtp发信。 fscokopen返回一个到远程主机连接的句柄。你可以像使用fopen返回的句柄一样,对她进行写fwrite,读取fgets, fread等操作。 我们的异步PHP,主要想要的效果就是,触发一个PHP脚本,然后立即返回,留它在服务器端慢慢执行。前面我也写过一篇文章讨论过这个问题。 那么,我们就可以使用fsockopen连接到本地服务器,触发脚本执行,然后立即返回,不等待脚本执行完成。 function?triggerRequest $url,?$post_data? ?array ,?$cookie? ?array … $method? ?GET;??//可以通过POST或者GET传递一些参数给要触发的脚本 $url_array? ?parse_url $url ;?//获取URL信息,以便平凑HTTP?HEADER $port? ?isset $url_array[port] ??$url_array[port]?:?80; $fp? ?fsockopen $url_array[host],?$port,?$errno,?$errstr,?30 ; if? !$fp ?… return?FALSE; $getPath? ?$url_array[path]?.?.?$url_array[query]; if !empty $post_data … $method? ?POST; $header? ?$method?.???.?$getPath; $header?. ??HTTP/1.1\r\n; $header?. ?Host:?.?$url_array[host]?.?\r\n ;?//HTTP?1.1?Host域不能省略 /**//*以下头信息域可以省略 $header?. ?User-Agent:?Mozilla/5.0? Windows;?U;?Windows?NT?5.1;?en-US;?rv:3 ?Gecko/座机电话号码?Firefox/3?\r\n; $header?. ?Accept:?text/xml,application/xml,application/xhtml+xml,text/html;q 0.9,text/plain;q 0.8,image/png,q 0.5?\r\n; $header?. ?Accept-Language:?en-us,en;q 0.5?; $header?. ?Accept-Encoding:?gzip,deflate\r\n; */ $header?. ?Connection:Close\r\n; if !empty $cookie … $_cookie? ?strval NULL ; foreach $cookie?as?$k? ?$v … $_cookie?. ?$k. .$v.;?; $cookie_str? ??Cookie:??.?base64_encode $_cookie ?.?\r\n;//传递Cookie $header?. ?$cookie_str; if !empty $post_data … $_post? ?strval NULL ; foreach $post_data?as?$k? ?$v … $_post?. ?$k. .$v.; $post_str?? ?Content-Type:?application/x-www-form-urlencoded\r\n;//POST数据 $post_str?. ?Content-Length:?.?strlen $_post ?.?\r\n;//POST数据的长度 $post_str?. ?$_post.\r\n\r\n?;?//传递POST数据 $header?. ?$post_str; fwrite $fp,?$header ; //echo?fread $fp,?1
文档评论(0)