ShowMyIP – Firefox AddOn

Das Firefox AddOn “ShowMyIP” zeigt die aktuelle Internet IP Adresse. Dieses Tool fügt sich in die Toolbar des Firefox ein und zeigt auf Knopfdruck die aktuelle externe IP an. Bei dynamisch vergebenen IP Adressen werden Sie damit immer auf dem Laufenden gehalten. Wenn Sie über einen Router oder eine Firewall ins Internet gehen, wird dessen WAN IP angezeigt. Bei der Verwendung eines Internet Proxy’s wird die IP dieses Gerätes angezeigt.
 
Da der Firefox keine Statusleiste mehr hat, habe ich das Addon jetzt in der Toolbar untergebracht.

ShowMyIP installieren
 
Firefox Addon Ip Adresse


Bei einigen Firefox Versionen scheint es Probleme mit der Anzeige zu geben. Für diesen Fall gibt es hier die Vorgängersion.

ShowMyIP 0.8 installieren
 

MD5 Generator

Text:

Beispiele:

String MD5 Hash
Sonntag 35cb2d80a11eadd1c880fc69cb852f76
Montag 5ba92fd9fe06536b98e6ab7b19531d8f
Dienstag af5b4a59f444f0b452421dcf5238f781
Mittwoch c7ce86340399fcbc38c020a090e5f227
Donnerstag c4c15efd19d7e642741a346807510abe
Freitag 8e968f5fc3fddc3f1c7d9510b22b4ada
Samstag f3e9b5cbb5bfb05906a402de29d7ee6f
Hans eb56002f1c0a8f9ab1b2aa2d08a1c502
Maik 891cba28db18ac67b12d9b81a38440e8
Peter 6fa95b1427af77b3d769ae9cb853382f

PHP Mehrdimensionale Arrays

Mehrdimensionale Arrays zu sortieren bereitet gerade Einsteiger immer wieder Schwierigkeiten.
Zuallererst bauen wir uns ein Array auf:

$array   = array();
$array[] = array('vorname'=> 'Hans', 
                 'name'   => 'Meier', 
                 'plz'    => '10119', 
                 'ort'    => 'Berlin');
 
$array[] = array('vorname'=> 'Egon', 
                 'name'   => 'Schmidt', 
                 'plz'    => '01067', 
                 'ort'    => 'Dresden');
 
$array[] = array('vorname'=> 'Franz', 
                 'name'   => 'Müller',
                 'plz'    => '50670', 
                 'ort'    => 'Köln');

Zur Vorbereitung auf die Sortierung, erstellen wir im nächsten Schritt ein Hilfsarray.

foreach ($array as $key => $value)
{
    $hilfsarray_vorname[$key]  =  $value['vorname'];
    $hilfsarray_name[$key]     =  $value['name'];
    $hilfsarray_plz[$key]      =  $value['plz'];
    $hilfsarray_ort[$key]      =  $value['ort'];
}

Einfache Sortierung

Die Variable $array wird direkt sortiert.

// sortieren nach Vorname
array_multisort($hilfsarray_vorname, SORT_ASC, SORT_NATURAL, $array);
 
// sortieren nach Name
array_multisort($hilfsarray_name, SORT_ASC, SORT_NATURAL, $array);
 
// sortieren nach Plz
array_multisort($hilfsarray_plz, SORT_ASC, SORT_NUMERIC, $array);
 
// sortieren nach Ort
array_multisort($hilfsarray_ort, SORT_ASC, SORT_NATURAL, $array);

Mehrfache Sortierung

// sortieren nach Vorname aufsteigend und Name absteigend
array_multisort($hilfsarray_vorname, SORT_ASC, SORT_NATURAL, $hilfsarray_name, SORT_DESC, SORT_NATURAL, $array);
 
// sortieren nach Plz absteigend und Ort aufsteigend
array_multisort($hilfsarray_plz, SORT_DESC, SORT_NUMERIC, $hilfsarray_ort, SORT_ASC, SORT_NATURAL, $array);

Hinweis

PHP unterstützt erst ab Version 5.4 das FLAG “SORT_NATURAL”. Als Workaround bietet es sich an, bei der Erzeugung wie folgt einzugreifen:

foreach ($array as $key => $value)
{
    $hilfsarray_vorname[$key]  =  strtolower($value['vorname']);
    $hilfsarray_name[$key]     =  strtolower($value['name']);
    $hilfsarray_plz[$key]      =  strtolower($value['plz']);
    $hilfsarray_ort[$key]      =  strtolower($value['ort']);
}

Alternativ kann auch die Funktion “array_map” ein komplettes Array in Kleinbuchstaben umwandeln:

$hilfsarray_vorname = array_map('strtolower', $hilfsarray_vorname);

PHP Reguläre Ausdrücke, REGEX oder PREG

Reguläre Ausdrücke sind für viele ein rotes Tuch. In diesem Tipp habe ich daher einige Regex gesammelt. In PHP stehen mehrere Funktionen zur Verfügung, die mit regulären Ausdrücken “gefüttert” werden können. Hier eine kleine Übersicht:

Funktion Beschreibung
preg_filter Sucht und ersetzt mit regulären Ausdrücken
preg_grep Liefert Array-Elemente, die auf ein Suchmuster passen
preg_replace_callback Sucht und ersetzt einen regulären Ausdruck unter Verwendung eines Callbacks
preg_match_all Führt eine umfassende Suche nach Übereinstimmungen mit regulärem Ausdruck durch
preg_match Führt eine Suche mit einem regulären Ausdruck durch
preg_replace Sucht und ersetzt mit regulären Ausdrücken
preg_split Zerlegt eine Zeichenkette anhand eines regulären Ausdrucks
preg_quote Maskiert Zeichen regulärer Ausdrücke

Als nächsten sehen wir einige einfache reguläre Ausdrücke und deren Bedeutung. Die Muster werden immer von einem Begrenzungszeichen (Delimiter) eingeschlossen. Bei der Auswahl des Delimiters ist darauf zu achten, dass dieses Zeichen nicht innerhalb des Musters vorkommt.
Eine kleine Übersicht über Suchmuster:

Regulärer Ausdruck (Pattern) Sucht nach ..
[a-z] einzelner Kleinbuchstabe
[A-Z] einzelner Großbuchstabe
hallo der String “hallo” wird gesucht
[a-z]+ ein oder mehrere Kleinbuchstaben
[g-z] ein einzelner Kleinbuchstabe zwischen “g” und “z”
[abc] die Kleinbuchstaben “a”, “b” und “c”
[a-zA-Z] ein einzelner Buchstabe
[^a-z] Sucht nach einem beliebigen Zeichen, welches kein Kleinbuchstabe ist.
[0-9] eine einzelne Zahl
[0-4a-d]+ jede Zahl zwischen “0” und “4” und jeden Kleinbuchstaben zwischen “a” und “d”
(hallo|welt) die Wörter “hallo” und “welt”
[a-z]{3,5} mindestens drei und maximal fünf Kleinbuchstaben zwischen “a” und “z”

Und jetzt einige Praxisbeispiel:

Den Inhalt der H1 Überschrift einer Webseite ermitteln

$html = "<html><head></head><body><h1>PHP REGEX</h1><h2>Beispiel</h2></body></html>";
preg_match('~<h1>(.+?)</h1>~is', $html, $matches);
 
echo $matches[1];

Den Inhalt aller Überschrift einer Webseite ermitteln

Der Inhalt der Überschriften befindet sich in $matches[2].

$html = "<html><head></head><body><h1>PHP REGEX</h1><h2>Beispiel</h2></body></html>";
preg_match_all('~<h([1-6])>(.+?)</h\1>~is', $html, $matches);
 
var_dump($matches)

Telefonnummer prüfen

Hier wird nur geprüft ob es sich um eine Zahlenfolge handelt. Ein Plus vor der Telefonnummer ist optional.

$nummer = "+4937512345678";
if(preg_match('/^[+]?[0-9]+$/', $nummer)){
	echo "korrekt!";
} else {
	echo "nicht korrekt!";
}

Wiederholende Leerzeichen ersetzen

$text = "PHP REGEX         Test Text.";
$text = preg_replace("/[ ]{2,}/", " ", $text);
 
echo $text;

IP Adresse prüfen

Eine IP Adresse besteht aus vier Blöcken, welche jeweils mit einem Punkt voneinander getrennt sind. Jeder einzelne Block kann im Bereich von 0 – 255 liegen. Mal abgesehen von einigen speziellen Adressen, welche ich nicht berücksichtigt habe, prüft folgendes Regex eine IP Adresse auf Gültigkeit. Spezielle Adresse sind z.B. Broadcast, Zeroconf, Anycast oder Multicast.

$ip = "192.168.12.203";
if(preg_match('/^(([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/', $ip)){
	echo "korrekt!";
} else {
	echo "nicht korrekt!";
}

Datumsangaben aus ein Text filtern

$text = "Was war noch gleich am 24.12.2010 und was am 1.1.99";  
preg_match_all('/([012]?[0-9]|3[01])\.(0?[0-9]|1[0-2])\.(([12][0-9])?[0-9][0-9])/',$text, $matches);
var_dump($matches[0]);

C# Hashfunktion MD5 und SHA1

Zur Berechnung des MD5 und des SHA1 Hashes in C# bedient man sich des “System.Security.Cryptography” Namespaces.

Quellcode C# MD5:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <summary>
/// Liefert den MD5 Hash 
/// </summary>
/// <param name="input">Eingabestring</param>
/// <returns>MD5 Hash der Eingabestrings</returns>
private string getMD5(string input)
{
    //Umwandlung des Eingastring in den MD5 Hash
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    byte[] textToHash = Encoding.Default.GetBytes(input);
    byte[] result = md5.ComputeHash(textToHash);
 
    //MD5 Hash in String konvertieren
    System.Text.StringBuilder s = new System.Text.StringBuilder();
    foreach (byte b in result)
    {
        s.Append(b.ToString("x2").ToLower());
    }
 
    return s.ToString();
}

Quellcode C# SHA1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <summary>
/// Liefert den SHA1 Hash 
/// </summary>
/// <param name="input">Eingabestring</param>
/// <returns>SHA1 Hash der Eingabestrings</returns>
private string getSHA1(string input)
{
    //Umwandlung des Eingastring in den SHA1 Hash
    System.Security.Cryptography.SHA1 sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
    byte[] textToHash = Encoding.Default.GetBytes(input);
    byte[] result = sha1.ComputeHash(textToHash);
 
    //SHA1 Hash in String konvertieren
    System.Text.StringBuilder s = new System.Text.StringBuilder();
    foreach (byte b in result)
    {
        s.Append(b.ToString("x2").ToLower());
    }
 
    return s.ToString();
}

Grundlegend sind die beiden Methoden gleich.

PHP Switch

Zur Fallunterscheidung in PHP bietet sich die “switch case” Anweisung geradezu an. Zu beachten ist bei PHP, dass die einzelnen Cases, also die Fälle mit einem break abgeschlossen werden müssen. Ist das break nicht vorhanden werden alle weiteren Cases bis zum nächsten break auch mit ausgeführt. Dieses Verhalten kann von Vorteil sein, man muss es nur kennen.
Sollte kein Fall zutreffen wird wenn vorhanden der default-case abgearbeitet.
 

1
2
3
4
5
6
7
8
9
10
11
12
	$i = "A";
	switch ($i){
		case "A":
			echo "Fall A";
			break;
		case "B":
			echo "Fall B";
			break;
		default:
			echo "Standard Fall";
			break;
	}

Wenn der selbe Code für mehrere Fälle gültig ist, muss das break Schlüsselwort fehlen.
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
	$i = "B";
	switch ($i){
		case "A":
		case "B":
		case "C":
			echo "Fall A-C";
			break;
		case "D":
			echo "Fall D";
			break;
		default:
			echo "Standard Fall";
			break;
	}