Post Pic

Von Zeit zu Zeit sammelt ja jeder Programmierer Code Schnippsel zusammen, die er von mal hier, mal da wiederverwendet. Einige meiner Code Snippets, die ich in PHP Projekten des öfteren verwende, habe ich mal zusammengestellt.  Einie Beispiele sollen nur exemplarisch zeigen wie ein Problem gelöst wird und anregen für ähnliche Problemstellungen. Highlights sind z.B. eine XOR Verschlüsselung und das Blocken von IP-Adressen.

Bestimmte IP Adressen blocken

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    // Array mit den verbotenen IP-Adressen
    $verbotene_ips = array(
        '192.168.101.1',
        '192.168.202.1',
        '192.168.244.1',
    );
 
    // Array kann auch aus einer Datei befüllt werden
    // $verbotene_ips = file('verbotene_ips.txt');
 
    // Die IP-Adresse des Benutzers auslesen
    $ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';
 
    // Die IP des Benutzers mit dem Array der verbotenen IPs vergleichen
    if (($i = array_search($ip, $verbotene_ips)) != FALSE){      
 
        // Der Benutzer wurde geblockt - Meldung ausgeben
        echo "Ihre IP-Adresse ('$ip') wurde geblockt!";
        exit;
    }
 
    // Hier kommt der Code für die IP-Adressen, die nicht verboten sind

Temp Dateien löschen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    // Festlegen des Ordners, der gesäubert werden soll
// die Slashes am Ende müssen beibehalten werden
$captchaFolder  = 'temp/';
 
// Dateitypen, die untersucht werden sollen (für Alle: *.*)
$fileTypes      = '*.txt';
 
//Nach wie vielen Minuten sollen die Dateien gelöscht werden?
$expire_time    = 20; 
 
// Alle Dateien des angegebenen Dateityps finden
foreach (glob($captchaFolder . $fileTypes) as $Filename) {
 
    // Die Zeit der Erstellung auslesen
    $FileCreationTime = filectime($Filename);
 
    // Das Alte der Datei in Sekunden berechnen
    $FileAge = time() - $FileCreationTime; 
 
    // Ist die Datei älter als die angegebene Zeit?
    if ($FileAge > ($expire_time * 60)){
 
        // Irgendetwas mit der alten Datei machen....
 
        print "Die Datei $Filename ist älter als $expire_time minuten\n";
 
        // Zum Beispiel Löschen
        //unlink($Filename);
    }
 
}

Email-Adressen aus einem String fischen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function email_fischen($str){
    //regulärer Aussdruck um E-Mail Adressen zu erkennen
    $regexp = '/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i';
    preg_match_all($regexp, $str, $m);
 
    return isset($m[0]) ? $m[0] : array();
}
$test_string = '
        test1@blub.org
 
        Verschiedene Formate testen:
        test2@blub.org;
        <a href="test3@blub.org">foobar</a>
 
        strange formats:
        test5@blub.org
        test6[at]blub.org
        test7@blub.net.org.com
        test8@blub.org
        test9@!blub!.org
 
        testest
';
 
print_r(email_fischen($test_string));
 
/*
    Es wird dieses Array zurückgegeben:
 
    Array
    (
        [0] =&gt; test1@blub.org
        [1] =&gt; test2@blub.org
        [2] =&gt; test3@blub.org
        [3] =&gt; test4@blub.org
        [4] =&gt; test5@blub.org
        [5] =&gt; test7@blub.net.org.com
    )
*/

IP V4 Adresse auf Validität überprüfen

1
2
3
4
5
6
7
function IsIPValid($ip){
    if (preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $ip)){
        return true;
    }
 
    return false;
}

Sicheres Random Passwort erzeugen

(Angabe von sicherer Länge und Buchstaben vorrausgesetzt)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function random_password($length, $characters='abcdefghijkABC1234567890'){
 
    if ($characters == ''){ return ''; }
    $chars_length = strlen($characters)-1;
 
    mt_srand((double)microtime()*1000000);
 
    $pwd = '';
    while(strlen($pwd) &lt; $length){
        $rand_char = mt_rand(0, $chars_length);
        $pwd .= $characters[$rand_char];
    }
 
    return $pwd;
}

Zeit zum erzeugen der Seite anzeigen

1
2
3
4
5
6
7
8
9
10
11
$start = time();
 
// Code der ausgeführt werden soll,
//hier einfach sleep zum erzeugen von 2 Sekunden
sleep(2);
 
$diff = time() - $start;
 
print "Diese Seite wurde in $diff Sekunden generiert";
 
// Für eine genauere Angabe kann die microtime  Funktion benutzt werden

XOR Verschlüsselung mit Ver- und Entschlüsselungsfunktion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function XOREncryption($InputString, $KeyPhrase){
 
    $KeyPhraseLength = strlen($KeyPhrase);
 
    // Durch den Eingabestring loopen
    for ($i = 0; $i &lt; strlen($InputString); $i++){
 
        // Zur Zeichenposition des Keys gehen
	//modulo, da der key() ja kürzer sein könnte
        $rPos = $i % $KeyPhraseLength;
 
        // Die eigentliche Ver- bzw. Entschlüsselung passiert hier
        $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);
 
        // Die Buchstaben ersetzen
        $InputString[$i] = chr($r);
    }
 
    return $InputString;
}
 
// Hilfsfunktionen, die base64 benutzen
// um lesbaren Text zu erzeugen
 
function XOREncrypt($InputString, $KeyPhrase){
    $InputString = XOREncryption($InputString, $KeyPhrase);
    $InputString = base64_encode($InputString);
    return $InputString;
}
 
function XORDecrypt($InputString, $KeyPhrase){
    $InputString = base64_decode($InputString);
    $InputString = XOREncryption($InputString, $KeyPhrase);
    return $InputString;
}

E-Mail versenden mit PHP

1
2
3
4
5
6
function sendMail($to, $subject, $message) {
	$headers = "From: \"From address\" " . "\r\n" .
	"Reply-To: \"Reply address\" " . "\r\n" .
	"X-Mailer: PHP/" . phpversion();
	mail($to, $subject, $message, $headers);
}

Christi Himmelfahrt for jedes Jahr berechnen.

(Basierend auf der Gaußschen Osterformel und der Annahme, dass 39 Tage nach Ostersonntag Himmelfahrt ist.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function himmelfahrt($year){
 
    $X = $year;
    $K = floor ( $X / 100 );
    $M = 15 + floor ( ( ( 3 * $K ) + 3 ) / 4 ) -
            floor ( ( ( 8 * $K ) + 13 ) / 25 );
    $S = 2 - floor ( ( ( 3 * $K ) + 3 ) / 4 );
    $A = $X % 19;
    $D = ( 19 * $A + $M ) % 30;
    $R = floor ( $D / 29 ) + ( floor ( $D / 28 ) -
            floor ( $D / 29 ) ) * floor ( $A / 11 ); 
 
    $OG = 21 + $D - $R;
    $SZ = 7 - ( ( $X + floor ( $X / 4 ) + $S ) % 7 );
    $OE = 7 - ( ( $OG - $SZ ) %7 );
    $OS = $OG + $OE; 
 
    return $OS;
 
}

Überprüfen ob eine Domain / Homepage erreichbar ist

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  function domainAvailable ( $strDomain )
  {
    $rCurlHandle = curl_init ( $strDomain );
 
    curl_setopt ( $rCurlHandle, CURLOPT_CONNECTTIMEOUT, 10 );
    curl_setopt ( $rCurlHandle, CURLOPT_HEADER, TRUE );
    curl_setopt ( $rCurlHandle, CURLOPT_NOBODY, TRUE );
    curl_setopt ( $rCurlHandle, CURLOPT_RETURNTRANSFER, TRUE );
 
    $strResponse = curl_exec ( $rCurlHandle );
 
    curl_close ( $rCurlHandle );
 
    if ( !$strResponse )
    {
      return FALSE;
    }
 
    return TRUE;
  }

Wenn ihr weitere nützliche PHP-Snippets auf Lager habt, zögert nicht, sie in den Kommentaren kund zu tun

12. Aug. von Leon



Ein Kommentar

  1. Danke! Ein echt hilfreiches Tutorial! 😀 Besonders das mit den IP-Adressen hat mir geholfen!


    Snouty



Beitrag kommentieren