Using PHP to read a web page with fsockopen(), but fgets is not working
        Posted  
        
            by asdasd
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by asdasd
        
        
        
        Published on 2010-06-14T04:53:44Z
        Indexed on 
            2010/06/14
            5:02 UTC
        
        
        Read the original article
        Hit count: 356
        
Im using this code here: http://www.digiways.com/articles/php/httpredirects/
public function ReadHttpFile($strUrl, $iHttpRedirectMaxRecursiveCalls = 5)
{
    // parsing the url getting web server name/IP, path and port.
    $url = parse_url($strUrl);
    // setting path to '/' if not present in $strUrl
    if (isset($url['path']) === false)
  $url['path'] = '/';
    // setting port to default HTTP server port 80
    if (isset($url['port']) === false)
 $url['port'] = 80;
    // connecting to the server]
    // reseting class data        
    $this->success = false;
    unset($this->strFile);
    unset($this->aHeaderLines);
    $this->strLocation = $strUrl;
$fp = fsockopen ($url['host'], $url['port'], $errno, $errstr, 30);
        // Return if the socket was not open $this->success is set to false. 
        if (!$fp)
            return;
  $header = 'GET / HTTP/1.1\r\n';
  $header .= 'Host: '.$url['host'].$url['path'];
  if (isset($url['query']))
   $header .= '?'.$url['query'];
  $header .= '\r\n';
  $header .= 'Connection: Close\r\n\r\n';
  // sending the request to the server
  echo "Header is: 
".str_replace('\n', '\n
', $header)."
";
  $length = strlen($header);
  if($length != fwrite($fp, $header, $length))
  {
   echo 'error writing to header, exiting
';
   return;
  }
  // $bHeader is set to true while we receive the HTTP header
  // and after the empty line (end of HTTP header) it's set to false.
  $bHeader = true;
  // continuing untill there's no more text to read from the socket
  while (!feof($fp))
  {
   echo "in loop";
   // reading a line of text from the socket
   //  not more than 8192 symbols. 
   $good = $strLine = fgets($fp, 128);
   if(!$good)
   {
    echo 'bad';
    return;
   }
   // removing trailing \n and \r characters.
   $strLine = ereg_replace('[\r\n]', '', $strLine);
   if ($bHeader == false) 
    $this->strFile .= $strLine.'\n';
   else
    $this->aHeaderLines[] = trim($strLine);
   if (strlen($strLine) == 0)
    $bHeader = false;
   echo "read: $strLine
";
   return;
  }
  echo "
after loop
";
  fclose ($fp);
}
This is all I get:
Header is:
GET / HTTP/1.1\r\n
Host: www.google.com/\r\n
Connection: Close\r\n\r\n
in loopbad
So it fails the fgets($fp, 128);
© Stack Overflow or respective owner