Php feof is very slow.

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 >
Php
Apr.21,2022

this! feof ($handle) condition is set all the time, so it's slow. If you call fread ($handle, 1024) only once, of course it's fast

.
Menu