class Socket
{
protected $crlf = "\r\n";
protected $host = "";
protected $port = 80;
protected $method = "GET";
protected $path = "/";
protected $httpVersion = "HTTP/1.1";
protected $headers = array();
protected $body = "";
protected $error = array();
protected $timeout = 5;
public function url($url)
{
$info = parse_url($url);
$this->host = $info["host"];
isset($info["path"]) && $this->path = $info["path"];
isset($info["port"]) && $this->port = $info["port"];
return $this;
}
public function method($method)
{
$this->method = $method;
return $this;
}
public function path($path)
{
$this->path = $path;
return $this;
}
public function httpVersion($version)
{
$this->httpVersion = $version;
return $this;
}
public function host($host)
{
$this->host = $host;
return $this;
}
public function header($header)
{
$this->headers[] = $header;
return $this;
}
public function body($body)
{
$this->body = $body;
return $this;
}
public function send()
{
$handle = fsockopen($this->host, $this->port, $this->error["errno"], $this->error["errstr"], $this->timeout);
$req = join($this->crlf, array_merge( array("{$this->method} {$this->path} {$this->httpVersion}"), array("Host: {$this->host}"), $this->headers, array(""), array($this->body), array("") ));
fwrite($handle, $req);
$res = "";
while ( !feof($handle) ) {
$res .= fread($handle, 1024);
}
fclose($handle);
return $res;
}
}
$s = new Socket();
var_dump( $s->url("http://baidu.com")->send() );
The while in the < H1 > send () method is very slow. If you just call fread ($handle, 1024), it"s very fast. What"s going on, my friends? < / H1 >