XML Loganalyser mit SimpleXML

Das folgende Beispiel zeigt eine Implementierung mit SimpleXML.

Hierbei wird zunächst in der Methode "getParsedXML" die XML Datei eingelesen und
in in SimpleXMLElement Objekt geladen.

Die Methode "getPageviewsForIp" geht nun die Knoten durch und erhöht einen Zähler, wenn ein "visit" Konten gefunden wurde, der die gesucht IP Adresse besitzt:

class SimpleXMLLogAnalyser implements LogAnalyserInterface {

	/**
	* @param string $filename
	*/
	protected $filename;

	/**
	* @param SimpleXMLElement
	**/
	protected $parsedXML = null;

	/**
	* @param string $filename	
	**/
	public function setFilename($filename) {
		if(!file_exists($filename) ){
			$message = "Input xml file does not exist";
			throw new InvalidArgumentException($message);
		}

		$this->filename = $filename;
	}

	/**
	* @return SimpleXMLElement
	**/
	protected function getParsedXML() {
		if($this->parsedXML == null) {
			$this->parsedXML = simplexml_load_file($this->filename);
		}

		return $this->parsedXML;
	}

	/**
	* @param string 
	* @return integer 
	**/
	public function getPageviewsForIp($ipToCheck) {
		$visitCount	= 0;
		$xmlData 	= $this->getParsedXML();

		foreach($xmlData as $visit) {
			if(!isset($visit->attributes()->ip)) {
				continue;			
			}

			if($visit->attributes()->ip == $ipToCheck) {
				$visitCount++;
			}
		}

		return $visitCount;
	}
}

Ausführung des Beispielcodes

Das folgende Snipped zeigt ein PHP-CLI Skript, dass die SimpleXML Loganalyser Klasse nutzt:

<?php

$logAnalyser = new SimpleXMLLogAnalyser();
$logAnalyser->setFilename("test.xml");
$visits = $logAnalyser->getPageviewsForIp("72.123.21.23");

echo "SimpleXMLLogAnanalyser determined ".$visits." visits. ".PHP_EOL;

?>

Vor- und Nachteile der SimpleXML Implementierung

Was sind die Vor- und Nachteile dieser Implementierung:

Vorteile:

  • Simple Umsetzung, einfacher Zugriff auf XML Attribute und Knotenwerte


Nachteile:

  • Laufzeit. Es werden alle Knoten im PHP Konext angeschaut und die IPAdresse verglichen.
  • Speicherverbrauch. Das komplette XML wird eingelesen. Dies ist hier vetretbar, weil es sich um eine kleine Logdatei handelt, bei größeren Dateien kann man Probleme bekommen.

Navigation