PHP Mit RegEx das Betriebssystem aus dem UserAgent entnehmen

HigH_HawK

Cadet 4th Year
Registriert
Jan. 2008
Beiträge
105
Hallo Community,

ich stehe gerade vor einem etwas kleinerem Problem, welches mir keine Ruhe lässt. Ich habe mir eine kleine Funktion zusammen gebastelt, welche RegEx Patterns enthält und diese dann gegen den ermittelten Useragent prüft. Die normale Prüfung funktioniert einwandfrei, allerdings möchte ich auch gerne die Architektur (32bit oder 64bit) einbeziehen und genau da stehe ich etwas im Wald und finde meinen Fehler nicht.

Funktion:
PHP:
function site_statistic_get_os($useragent){
$osArray = array(
	'<img src="images/os_icons/windows_icon.png">Windows 10 (x86)' => '/Windows\sNT\s10.0/',
	'<img src="images/os_icons/windows_icon.png">Windows 10 (x64)' => '/Windows\sNT\s10.0;\s(Win64|WOW64)/'
		);

foreach ($osArray as $os => $regex){
 $matches = array();
  if (preg_match($regex, $useragent, $matches)) {
   return $os;
  } else {
   return '<img src="images/browser_icons/nobrowser_icon.png"> No O/S Information ';
  }
}
}

Useragent:
Code:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36

Der Useragent beinhaltet das Win64, als Resultat wird mir aber dennoch nur der 32bit String angezeigt. Ich gehe davon aus, dass ich einen Fehler in meinem RegEx Pattern habe, stelle mich aber wahrscheinlich zu doof an, den zu finden.

Ich habe das Pattern auch schon auf https://regex101.com/r/SqcZrP/1 getestet und dort funktioniert der Full Match.

Habt ihr eventuell noch eine Idee?

Vielen Dank im Voraus
 
Ich denke nicht, dass ich hier das Rad neu erfinde, sondern einfach eine für mich minimale Lösung erarbeiten wollte. Der Umfang von dem UA-Parser ist für meinen Gebrauch etwas zu viel. Klar könnte ich mir die Datei nun zur Brust nehmen und Sachen rausschmeißen, welche ich nicht benötige, aber dann erfinde ich das Rad ja wieder neu ;)

Ich danke dennoch für den Link, orientiere mich eventuell an dem dortigen Inhalt.
 
PHP:
<?php

 include "uaparser.php";

 $inf = parseua($_SERVER["HTTP_USER_AGENT"], $_SERVER["REMOTE_ADDR"]);
 echo "<table>";
 foreach($inf as $k => $v) echo "<tr><td>$k</td><td>$v</td></tr>\n";
 echo "</table>";
?>
liefert hier
browser_nameFirefox
browser_vers59.0
platfrm_nameWindows
platfrm_vers10.0
rndreng_nameGecko
rndreng_vers20100101
archtcr_name64 Bit
miscArray
ip_adress127.0.0.1


mithilfe des bereits publizierten skripts.
 
HigH_HawK schrieb:
Habt ihr eventuell noch eine Idee?Vielen Dank im Voraus
Eigentlich kommst Du sogar ohne Reguläre Ausdrücke aus. Du guckst halt nur, welche Strings im User-Agent enthalten ist.
Ich sag mal beispielhaft, findest Du da ein Windows NT 6.1 ist es halt ein Windows 7.
Findest du ein z.B. WOW64 oder AMD64 usw. ist es offenbar ein 64-Bit-System. Wenn nicht, halt offenbar 32-Bit.

Sowas wie strpos reicht dann völlig aus und dürfte auch von der Performance her besser sein.
 
andy_m4 schrieb:
Eigentlich kommst Du sogar ohne Reguläre Ausdrücke aus. Du guckst halt nur, welche Strings im User-Agent enthalten ist....Sowas wie strpos reicht dann völlig aus und dürfte auch von der Performance her besser sein.

Das hatte ich mir auch gedacht, allerdings wollte ich es mit RegEx machen, da es mich fasziniert. Werde wohl doch auf das strpos umsteigen und es mir eben einfacher machen.

Danke
 
HigH_HawK schrieb:
Werde wohl doch auf das strpos umsteigen und es mir eben einfacher machen.
Falls es dann doch nicht klappt, die bereits gepostete Variante aus dem Web braucht bei mir eine Zeit im 1-stelligen Millisekundenbereich pro Aufruf auf einem AMD A6-3670.

Im Anhang die angepaßte Funktionsvariante des obigen Links: Anhang anzeigen uaparser.zip
 
blöderidiot schrieb:
Falls es dann doch nicht klappt, die bereits gepostete Variante aus dem Web braucht bei mir eine Zeit im 1-stelligen Millisekundenbereich pro Aufruf auf einem AMD A6-3670.

Im Anhang die angepaßte Funktionsvariante des obigen Links: Anhang anzeigen 677880

Danke dafür
 
Ich habe den UA-Parser nun etwas ausgiebiger getestet und ein paar Sachen dran verändert. Sieht soweit auch gut aus und läuft erstaunlich schnell, schneller als ich mir bei dem Umfang gedacht habe.

Danke für den Tipp.
 
Zurück
Oben