关于PHP 执行这段代码,卡到爆

大王叫我来巡山 发布于 2016/05/30 21:44
阅读 599
收藏 1
/* 网络操作函数 */
function _g_triggerRequest($url,$io=false,$post_data = array(), $cookie = array()){
		$method = empty($post_data) ? 'GET' : 'POST';

        $url_array = parse_url($url);
        $port = isset($url_array['port'])? $url_array['port'] : 80;

		if(function_exists('fsockopen')){
			$fp = @fsockopen($url_array['host'], $port, $errno, $errstr, 30);
		}elseif(function_exists('pfsockopen')){
			$fp = @pfsockopen($url_array['host'], $port, $errno, $errstr, 30);
		}elseif(function_exists('stream_socket_client')){
			$fp = @stream_socket_client($url_array['host'].':'.$port,$errno,$errstr,30);
		} else {
			$fp = false;
		}

        if(!$fp){
             return false;
        }

		$url_array['query'] =  isset($url_array['query']) ? $url_array['query'] : '';
        $getPath = $url_array['path'] ."?". $url_array['query'];

        $header  = $method . " " . $getPath." ";
        $header .= "HTTP/1.1\r\n";
        $header .= "Host: ".$url_array['host']."\r\n"; //HTTP 1.1 Host域不能省略
		$header .= "Pragma: no-cache\r\n";

        /*
			//以下头信息域可以省略
			$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/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";
        */


        if(!empty($cookie)){
                $_cookie_s = strval(NULL);
                foreach($cookie as $k => $v){
                        $_cookie_s .= $k."=".$v."; ";
                }
				$_cookie_s = rtrim($_cookie_s,"; ");
                $cookie_str =  "Cookie: " . base64_encode($_cookie_s) ." \r\n";	   //传递Cookie
                $header .= $cookie_str;
        }
		$post_str = '';
         if(!empty($post_data)){
                $_post = strval(NULL);
                foreach($post_data as $k => $v){
                        $_post .= $k."=".urlencode($v)."&";
                }
				$_post = rtrim($_post,"&");
                $header .= "Content-Type: application/x-www-form-urlencoded\r\n";//POST数据
                $header .= "Content-Length: ". strlen($_post) ." \r\n";//POST数据的长度

                $post_str = $_post."\r\n"; //传递POST数据
        }
		$header .= "Connection: Close\r\n\r\n";
		$header .= $post_str;

        fwrite($fp,$header);
		if($io){
			 while (!feof($fp)){
                   echo fgets($fp,1024);
			 }
		}
        fclose($fp);
		//echo $header;
        return true;
}



执行上面这段代码,浏览器会卡住大概3秒左右。

如何能够优化呢?

还有上面这段代码,我也不知道是干嘛用处的。

加载中
1
乌龟壳
乌龟壳
把url的内容发出来看看才知道
0
Tuesday
Tuesday

fsockopen 一直都很慢, 但好处在于稳定

可以换成curl试试. 

0
大王叫我来巡山
大王叫我来巡山

就是fsockopen的问题,会阻塞。改如何换掉呢?url的内容其实很简单,就是测试数据abcd


0
David257
David257
也可能和$url_array['host']有关
0
乌龟壳
乌龟壳
用浏览器访问这个url要多久
0
geminiblue
geminiblue
。。。就好比你在那喊:网管,网站打开好慢,网管过来一看,说,换个网址试试
0
此用户已关机
此用户已关机
代码里有读写文件,3秒还好吧
0
tinshen
tinshen

再看看服务器的dns配置。

dns配置的不好的话也会造成访问速度缓慢。

0
气质舞王尼古拉斯赵四
气质舞王尼古拉斯赵四
为嘛要这么高大上的模拟http,直接用curl不就完了
返回顶部
顶部