Klasseninstanz in Session ablegen und fgets-Timeout.

Kai008

Erfahrenes Mitglied
Ich habe eine Singleton-Klasse zum Abfragen diverser Serverinfos geschrieben. Diese Instanz sollte in eine Session abgelegt werden, damit nicht bei jeden Seitenaufruf die Daten erneut abgefragt werden müssen. Aber das funktioniert nicht richtig, die Klasse wird bei jeden Aufruf neu erzeugt. Außerdem funktioniert das fgets-Timeout nicht.
Könnt ihr mir bitte sagen, was ich falsch gemacht habe?

PHP:
public static function request()
{
	if(!isset($_SESSION['serverinfos']))
	{
		$infos = new ServerInfos();
		self::$instance = $infos;
		
		$ip = self::$REQUEST_IP;
		$port = self::$REQUEST_PORT;
		$msg = self::$REQUEST_MSG;

		$fp = @fsockopen($ip, $port, $error, $errno, 5);
		if($fp === false)
			$infos->offline();
		else
		{
			fwrite($fp, $msg);
			stream_set_timeout($fp, 5);
			
			$answer = "";	
			while(!feof($fp))
			{
				$buffer = fgets($fp, 32);
				$answer = $answer.$buffer;
			}
			$meta = stream_get_meta_data($fp);
			fclose($fp);
			
			if($meta['timed_out'])
				$infos->offline();
			else
			{
				$split = split(";", $buffer);
				
				$infos->setServerState($split[0]);
				$infos->setUser($split[1]);
				$infos->setRooms($split[2]);	
			}
		}
		$_SESSION['serverinfos'] = $infos;
	}
	else
		self::$instance = $_SESSION['serverinfos'];
}
 
Zurück