使用fsockopen()实现异步调用PHP.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:3 大小:66KB 金币:14 举报 版权申诉
预览加载中,请您耐心等待几秒...

使用fsockopen()实现异步调用PHP.doc

使用fsockopen()实现异步调用PHP.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

14 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

使用fsockopen()实现异步调用PHP2011-03-0916:34:42|分类:HYPERLINK"http://blog.163.com/lgh_2002/blog/"\l"m=0&t=1&c=fks_081065086083085070093086074071080086080068081084080"\o"php"php|标签:|字号大中小订阅原文作者:laruence(HYPERLINK"http://www.laruence.com/"\o"风雪之隅"\t"_blank"http://www.laruence.com)原文地址:HYPERLINK"http://www.laruence.com/2008/04/16/98.html"\o"PermanetLinkto使用fscok实现异步调用PHP"http://www.laruence.com/2008/04/16/98.htmlWeb服务器执行一个脚本,可能几毫秒就完成,也可能几分钟都完不成。如果程序执行缓慢,用户可能没有耐心等下去,就关闭浏览器了。而有的时候,我们更本不关心这些耗时的脚本的执行结果,但却还要等他执行完返回,才能继续下一步。那么有没有什么办法,只是简单的触发调用这些耗时的脚本然后就继续下一步,让这些耗时的脚本在服务端慢慢执行?接下来,我将使用fscokopen来实现这一功能。PHP是支持socket编程的,就是fsockopen,在以前做CMS的时候,我也曾经用过它做过smtp发信。fscokopen返回一个到远程主机连接的句柄。你可以像使用fopen返回的句柄一样,对她进行写fwrite,读取fgets,fread等操作。我们的异步PHP,主要想要的效果就是,触发一个PHP脚本,然后立即返回,留它在服务器端慢慢执行。前面我也写过一篇文章讨论过这个问题。那么,我们就可以使用fsockopen连接到本地服务器,触发脚本执行,然后立即返回,不等待脚本执行完成。functiontriggerRequest($url,$post_data=array(),$cookie=array())…{$method="GET";//可以通过POST或者GET传递一些参数给要触发的脚本$url_array=parse_url($url);//获取URL信息,以便平凑HTTPHEADER$port=isset($url_array['port'])?$url_array['port']:80;$fp=fsockopen($url_array['host'],$port,$errno,$errstr,30);if(!$fp)…{returnFALSE;}$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";//HTTP1.1Host域不能省略/**//*以下头信息域可以省略$header.="User-Agent:Mozilla/5.0(Windows;U;WindowsNT5.1;en-US;rv:1.8.1.13)Gecko/20080311Firefox/2.0.0.13\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($cookieas$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_dataas$k=>$v)…{$_post.=$k."=".$v."&";}$post_str="C