手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

一次糟糕的测试

首页 > PHP >

关于飞信,我上次写过学着写PHP飞信,然而今天晚上我把上文中测试的内容重现时却发现,现实有点残酷。我用curl的时候,速度居然没有fsocketopen快?我于是多次测试,然而,我却得到了一些令人沮丧的结果

【$postData,$postLength,都不提供。。。】

1、curl,利用curl来post

平均【大约 1.8~1.9秒】
  1. $ch = curl_init();  
  2. $chOptions = array(  
  3.     CURLOPT_URL => "http://nav.fetion.com.cn/nav/getsystemconfig.aspx",  
  4.     CURLOPT_HTTP_VERSION => 'HTTP/1.0',  
  5.     CURLOPT_USERAGENT => sprintf('IIC2.0/pc %s' , self::FETION_CLIENT_VERSION),  
  6.     CURLOPT_ENCODING => 'gzip,deflate',  
  7.     CURLOPT_HTTPHEADER => array('Content-Type: text/xml; charset=utf-8'),  
  8.     CURLOPT_POST => 1,  
  9.     CURLOPT_POSTFIELDS => $postData ,  
  10.     CURLOPT_RETURNTRANSFER => 1,  
  11.     CURLOPT_HEADER => 0  
  12. );  
  13. curl_setopt_array($ch$chOptions);  
  14. $res = curl_exec($ch);  

 2、fsocketopen,同样POST数据

平均【大约 0.8~0.9秒】
  1. $headers=<<<eot  
  2. POST /nav/getsystemconfig.aspx HTTP/1.0  
  3. User-Agent: IIC2.0/pc 3.1.0480  
  4. Accept-Encoding: deflate, gzip  
  5. Host: nav.fetion.com.cn:80  
  6. Content-Length: {$postLength}  
  7.   
  8. {$postData}  
  9. eot;  
  10. fwrite($fp,$headers);  
  11. $received=fread($fp,1024);  
  12. fclose($fp);  

3、stream,利用文件流

平均【大约 1.3~1.4秒】
  1. $opts = array (  
  2.     'http' => array (  
  3.         'method' => 'POST',  
  4.         'header'=> "Content-type: application/x-www-form-urlencoded" .  
  5.                    "Content-Length: " . $postLength . "",  
  6.         'content' => $postData  
  7.     ),  
  8. );  
  9. $context = stream_context_create($opts);  
  10. //$received = file_get_contents('http://nav.fetion.com.cn/nav/getsystemconfig.aspx', false, $context , 0 ,1024);  
  11. $fp = fopen('http://nav.fetion.com.cn/nav/getsystemconfig.aspx','r',false,$context);  
  12. if($fp){  
  13.     $received = fgets($fp, 512);  //在这里我用了三种测试,fgets,fread,stream_get_contents
  14.     fclose($fp);  
  15. }  

在这里我用了两种方式,一种是file_get_contents还有一种是fopen,file_get_contents的方法被我注释了。。。

在这三种中,我发现真的只有fsocketopen后然后fread是最快的。

真让我沮丧。。因为第三种方法中file_get_contens也可以指定读取的长度。但PHPRPC作者andot却认为,file_get_contents把头已经读回来了。我想,file_get_contents其实已经把数据读回来了,虽然是指定了长度,但其实只是读回来后再截取的。

唉。看来,不得不用fsocketopen了。。不知道除此之外有没有什么好办法。




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):