如题。代码
如下<?
$fp = fsockopen("localhost", 8888, &$errno, &$errstr, 10);
if(!$fp) {
        echo "$errstr ($errno)<br>\n";
} else {
        fputs($fp,"this is atest from sms server");
        while(!feof($fp)) {
                echo fgets($fp,128);
        }
        fclose($fp);
}
?>

解决方案 »

  1.   

    不是 fsockopen慢,是下面那句while(!feof($fp)) 慢,如果该文件有长度或者有结束标志的话,通过检测读入的长度或结束标志来判断,会使程序提高很多倍,最简单的你试一下收定长的数据,很快的。以前我收个38K的文件需要2分20秒,现在通过检测结束标志,速度提高到15秒到20秒之间,那个指令估计多数情况下是通过超时判断的,所以时间很长。
      

  2.   

    我把那句 while 去掉了,还是很慢,几乎没什么变化。应该怎么判断呢?
    我服务器端就返回一个字串success 或者 failed 我尝试用 filesize($fp) 去判断是否大于 5 就行了。但是出错了。哪里有问题
      

  3.   

    用CURL吧,速度比FILE()或FOPEN()都快,参考http://curl.haxx.se/libcurl/ 
    简单点的 
    <? 
    $url='http://www.163.com'; 
    ob_start();                                                                            //打开输出缓冲区 
    $ch = curl_init();                                                            //初始化会话 
    curl_setopt( $ch, CURLOPT_URL, $url );                        //设定目标URL 
    curl_exec( $ch );                                                                //发送请求 
    //$retrievedhtml = ob_get_contents();                                  //返回内部缓冲区的内容 
    //ob_end_clean();                          //删除内部缓冲区的内容并关闭内部缓冲区 
    curl_close( $ch );                        //会话结束 
    ?> 
    复杂点的 
    <? 
    $url='http://202.201.7.9/CSTJ/Sear.dll?SearchZK'; 
    $param='E=%3C1%2C4%3E%3A%28%28Title_C%3DCAm%29*Years%3D%282002%2B2003%2B2004%2B2005%2B2006%2B2007%29%29&S=1&N=20&P=1&C=0&H=%28%CC%E2%C3%FB%3DCAD%29*Year%3D2002-2007&M=&KM=&GX=&CSID=%7BC8E8BDCF-73D3-45F2-9FE9-89C8B28A02D1%7D';                                                //指定POST数据 
    ob_start();                                                                            //打开输出缓冲区 
    $ch = curl_init();                                                            //初始化会话 
    curl_setopt( $ch, CURLOPT_URL, $url );                        //设定目标URL 
    curl_setopt( $ch, CURLOPT_POST, 1 );                            //设定表单发送方式为POST 
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $param );    //POST数据 
    curl_exec( $ch );                                                                //发送请求 
    //$retrievedhtml = ob_get_contents();                                  //返回内部缓冲区的内容 
    //ob_end_clean();                          //删除内部缓冲区的内容并关闭内部缓冲区 
    curl_close( $ch );                        //会话结束 
    ?> 
      

  4.   

    通过程序模拟访问网页的方法有SOCKET通信方式、FOPEN方式、第三方组件(如:libcurl)等。当网页文件很大或者网页根本不存在的时候,使用FOPEN的方法经常会出现超时。在实际工程应用中,必须考虑系统的性能及可移植性。Web信息获取工具是系统性能好坏的一个最重要的技术环节,不论是采用PHP中的SOCKET通信方式还是FOPEN方式都不能胜任如此频繁的文件获取时间要求。系统采用性能优异的CURL访问组件,该组件远程访问速度比传统方式速度快了近200倍,采用FOPEN方式对于100个HTTP文件请求每分钟只能打开10个,而采用CURL组件方式对于2000个HTTP文件请求每分钟可以打开2000个[4]。该组件支持FTP,FTPS,TFTP,HTTP,HTTPS,TELNET,DICT,FILE和LDAP协议的访问,极大地提高了Web会话的速度和协议范围。此外,该组件支持多种开发语言工具的驱动,主要包括C、C++、PHP、PERL、JAVA、.NET等,支持广泛的操作系统,包括Solaris、NetBSD、FreeBSD、OpenBSD、HPUX、IRIX、AIX、Tru64、Linux、UnixWare、Windows等,具有广泛的可移植性,为程序开发打造了良好的接口。
    参考http://blog.csai.cn/group.asp?cmd=show&gid=83&pid=2697
      

  5.   

    curl这么神奇?
    和file_get_contents相比呢?拼的过吗?