webForumDet fria alternativet

Undefined offset??

2 svar · 359 visningar · startad av Viktor

ViktorMedlem sedan aug. 20021 710 inlägg
#1

Håller på att fixa med en RSS läsare i PHP men den fungerar bra för vissa sidor (http://www.atlasf1.com/rss/news.xml och http://www.grandprix.com/rss.xml t.ex.), men på vissa andra sidor får jag först ett

Undefined offset: 1 in c:\inetpub\wwwroot\rss\test.php on line 73

error men sedan så laddas sidan bra. Detta händer på http://rss.news.yahoo.com/rss/topstories. Här är koden (rad 73 i fet stil)

<?php
	header("Content-type:text/plain");
?>

<?php
	$file=new GetWebObject("http://rss.news.yahoo.com/rss/topstories",80);
	echo $file->get_content();
	
	class GetWebObject
	{
		var $host="";
		var $path="";
		var $port=0;
		var $header = array();
		var $content = "";

		function getRequest($url)
		{
			$url=eregi_replace("http://", "", $url);
			return(stristr($url, "/"));
		}

		function getHost($url)
		{
			$url=eregi_replace("http://", "", $url);
			return(substr($url,0,strpos($url,"/")));
		}

		function GetWebObject($url, $port)
		{
			$this->host=$this->getHost($url);
			$this->path=$url;
			$this->port=$port;
			$this->fetch();
		}

		function fetch()
		{
			$fp = fsockopen ($this->host, $this->port,$errno,$errstr);

			if(!$fp)
			{
				die("Could not connect to host.");
			}

			$header_done=false;

			$request = "GET ".$this->path." HTTP/1.1\r\n";
			$request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
			$request .= "Host: ". $this->host ."\r\n";
			$request .= "Connection: Close\r\n\r\n";
			$return = '';

			fputs ($fp, $request);
			$line = fgets ($fp, 128);
			$this->header["status"] = $line;
			while (!feof($fp))
			{
				$line = fgets ( $fp, 128 );
				if($header_done)
				{
					$this->content .= $line;
				}
				else
				{
					if($line == "\r\n")
					{
						$header_done=true;
					}
					else
					{
						$data = explode(": ",$line);
					[B]	$this->header[$data[0]] = $data[1];[/B]
					}
				}
			}
			fclose ($fp);
		}

		function get_header()
		{
			return($this->header);
		}

		function get_content()
		{
			return($this->content);
		}
	}
?>

Någon som vet vad det är som går fel och hur man kan fixa det? Om någon tror att den har en bättre funktion för att läsa in en sida i minnet så får ni gärna lägga in den här :)

/Viktor

SPiNMedlem sedan mars 20005 832 inlägg
#2

Felet beror väl antagligen på att $data[1] är null ( Raden är tom eller innehåller inget kolon ). Skulle jag gissa på.

Ska du inte använda de headers som mottagarsidan skickar så kan du enkelt göra så här:

$content = readfile( "http://server.nu/file.php" );
ViktorMedlem sedan aug. 20021 710 inlägg
#3

:bire Fungerar perfekt och mycket mindre kod blev det också :)

/Viktor

Genererad på 365 ms · cache AV · v20260730165559-full.f96bc7eb