![]() |
Mit PHP und MySQL Easy klappt der Einstieg in PHP (und SQL) bestimmt. | ||
![]() |
Mit dem Titel "PHP und MySQL für Kids." und J. C. Hanke als Autor - Wer es dann nicht versteht ... Dazu gibt es dann noch das Praxisbuch |
![]() |
|
![]() |
![]() |
In der Reihe "... für Dummies" darf natürlich auch das Thema PHP nicht fehlen. Es gibt also "PHP 5 für Dummies.", "MySQL 5 für Dummies." und "Applikationen mit PHP Und MySQL für Dummies." |
![]() |
![]() |
Carsten Möhrke: Besser PHP programmieren: Handbuch professioneller PHP-Techniken. Dieses Buch hilft auch bereits erfolgreichen PHP-Programmierern besseres PHP zu schreiben: angefangen beim sauberen Entwurf über die funktionstüchtige Implementation bis hin zur Dokumentation und Wartung. Denn gutes PHP ist mehr als nur Code schreiben. |
<!-- Die Navigationsleiste ist z. B. in der Datei i_navigation.php als HTML-Text definiert. Sie wird folgendermaßen aufgerufen: --> <?php include 'i_navigation.php '; ?> <!-- Es geht auch in einer Zeile: --> <?php include 'i_navigation.php '; ?>
Mehr ist nicht nötig. Das i_ am Anfang des Dateinamens signalisiert mir im Windows-Explorer, dass es sich hier nicht um eine gnze Seite, sondern nur um eine zu includierende Datei handelt. Außerdem stehen bei alphabetischer Sortierung alle diese Dateien beieinander.<!--#include file="seitenkopf.shtml" -->
oder<!--#include file="drumrum/fusszeile.shtml" -->
SSI funktioniert zunächst allerdings nur in Dateien mit Endung .shtml.Addhandler server-parsed .html
bzw.Addhandler server-parsed .htm
enthalten ist. Diese Einstellung erspart, alle Dateien mit Endung .shtml zu versehen. Sie bedeutet aber für HTML-Dateien, die kein SSI enthalten, unnötig hohe Ladezeit.<?php function alert($ausg){ /* Diese Funktion simuliert JavaScript alert() Funktion veröffentlicht von www.KlickTipps.de */ $a1 = "\n <script type=\"text/javascript\"> "; $a2 = "\n alert(\""; $a3 = "\"); "; $a4 = "\n </script> \n"; $ausgabe = $a1 . $a2 . $ausg . $a3 . $a4; echo $ausgabe ; } ?>
Ein Zeilenumbruch innerhalb der Alert-Box wird durch ein \n im Text erzeugt.<?php function testbox($ausg){ /* Mit dieser Funktion kann man Testwerte anzeigen. Sie funktioniert ohne JavaScript. Funktion veröffentlicht von www.KlickTipps.de */ $a1 = "\n <div class=\"testbox\" title=\"PHP-Testbox\" style=\"border: 1px dotted green; position: absolute; margin:0px; padding:10px; z-index:5; background-color:#ffffcc; color:#000000;\"> \n"; $a2 = " \n </div> \n"; $ausgabe = $a1 . $ausg . $a2; echo $ausgabe; } ?>
Natürlich kann man ein Zwischenergebnis zum Testen immer auch rasch mal mit<?php function zufall($a, $b) { /* eine ganze Zufallszahl im Bereich von $a bis $b erzeugen Funktion veröffentlicht von www.KlickTipps.de */ srand(microtime()*1000000); return ( rand($a, $b) ); } // Anwendung: Z. B. Zufallszahlen von 5 bis 31 zz$ = zufall(5 , 31); // Zufallszahlen von 0,1 bis 1,5 zz$ = zufall(1 , 15)/10; ?>
<?php $vorgestern = mktime(0, 0, 0, date("m"), date("d")-2, date("Y")); //heute - 2 $diesesjahr = date("Y"); //dieses Jahr (4-stellig) $ostern = easter_date( date("Y") ); //Ostern dieses Jahr (als Timestamp) $ostermonat = date("n" , $ostern ); //der Monat, in dem dieses Ostern liegt $ostertag = date("j" , $ostern ); //der Tag, an dem Ostern liegt $rosenmontag = date("j.n.y" , $ostern - 48 * 86400 ); //Rosenmontag $gruendonnerstag = date("j.n." , $ostern - 3 * 86400 ); //Gründonnerstag $ostermontag = date("j.n." , $ostern + 1 * 86400 ); //Ostermontag $himmelfahrt = date("j.n." , $ostern + 40 * 86400 ); //Himmelfahrt $pfingsten = date("j.n." , $ostern + 49 * 86400 ); //Pfingstsonntag $pfingstmontag = date("j.n." , $ostern + 50 * 86400 ); //Pfingstmontag $frohnleichnam = date("j.n." , $ostern + 60 * 86400 ); //Fronleichnam //letzter Februartag in diesem Jahr $letzter_feb = date("j.n.y",mktime(0,0,0, 3,0,$diesesjahr) ); //Muttertag (= zweiter Sonntag im Mai), dieses Jahr: 09.05.2021 //Die Formel geht vom spätestmöglichen Termin (14.5.) aus //w Wochentag: "0" (Sonntag) bis "6" (Samstag) $aprilende = mktime(0,0,0,5,0,$diesesjahr); //letzter Apriltag $muttertag = mktime(0,0,0,5,(14-date('w',$aprilende)),$diesesjahr); $muttertag = date('d.m.Y',$muttertag ); //Adventssonntage berechnen $heiligabend = mktime(0,0,0,12,24,$diesesjahr); //4. Advent, dieses Jahr: 19.12.2021 //Die Formel geht vom spätestmöglichen Termin (24.12.) aus $Advent4 = mktime(0,0,0,12,(24-date('w',$heiligabend)),$diesesjahr); //1. Advent (= 3 Wochen vor dem 4. Advent), dieses Jahr: 28.11.2021 $Advent1 = mktime(0,0,0,12,(24-21-date('w',$heiligabend)),$diesesjahr); ?>
So etwas kann man auch in einen HTML-Text einbauen.Kindergeld kann rückwirkend für das laufende Kalenderjahr und vier abgeschlossene Kalenderjahre beantragt werden: Bis Ende <?php echo $diesesjahr; ?> kann noch Kindergeld für das Jahr <?php echo $diesesjahr-4; ?> beantragt werden.
Spezielle nützliche Tipps finden Sie in meiner Seite PHP-Tipps für bewegliche Feiertage und Funktionen in Kirchenhomepages.<?php function im_zeitraum($tag1, $monat1, $jahr1, $tag2, $monat2, $jahr2) { // Prüfen, ob der heutige Tag in einem bestimmten Zeitraum liegt. // Funktion veröffentlicht von www.KlickTipps.de return(time()>=date(mktime ( 0, 0, 0, $monat1, $tag1, $jahr1)) and time()<=date(mktime (24,59,59, $monat2, $tag2, $jahr2)) ); } // Anwendung: // Z. B. prüfen, ob das heutige Datum im Bereich // vom 1.2.2009 bis zum 14.2.2009 liegt: if ( im_zeitraum( 1, 2, 2009, 14, 2, 2009 ) ){ } // Alternative, bei der das Datum nur einmal eingegeben werden muss // (weniger Chancen für Fehler): function termin_anzeigen($tag, $monat, $jahr, $vorher, $nachher) { // Prüfen, ob die jetzige Zeit im Bereich // von (Datum - $vorher) bis (Datum + $nachher) liegt. // Funktion veröffentlicht von www.KlickTipps.de return(time()>=date(mktime( 0, 0, 0,$monat,$tag-$vorher,$jahr)) and time()<=date(mktime(24,59,59,$monat,$tag+$nachher,$jahr)) ); } // Anwendung: // Z. B. prüfen, ob das heutige Datum im Bereich // von 31 Tage vor dem 14.12.2009 bis 1 Tage danach liegt: if ( termin_anzeigen( 14, 2, 2009, 31, 1 ) ){ } // oder $diesesjahr = date("Y"); if ( termin_anzeigen( 14, 2, $diesesjahr, 31, 1 ) ){ } ?>
Man kann mit diesen Funktionen auch ganze HTML-Textbereiche auf Termin einblenden. Beispiel:<?php $diesesjahr = date("Y"); if ( termin_anzeigen( 14, 2, $diesesjahr, 31, 1 ) ){ ?> Keine Lust auf Blumen? <br>Wie wäre es mit einem Amazon-Gutschein zum Valentinstag?! <br> .... <br> .... <br> .... <?php } ?>
Die HTML-Zeilen zwischen den beiden PHP-Schnipseln werden im Zeitraum vom<?php function date_de2php($datum) { // Deutsches Datum des Formats d.m.yy bis dd.mm.yyyy // in einen PHP-Timestamp umwandeln // Funktion veröffentlicht von www.KlickTipps.de $datum = str_replace( ' ', '', $datum ); //alle Blanks löschen $datum = str_replace( ',', '.', $datum ); //alle Kommas in Punkte if( count(explode('.', $datum)) != 3){ return (FALSE); }else { list($tag, $monat, $jahr) = explode(".", $datum); } if( $jahr >= 2100 ){ return (FALSE); } //zweistellige Jahreszahl abfangen //Jahre vor 2000 müssen 4-stellig angegeben werden if( $jahr < 100 ){ $jahr = $jahr + 2000; } return ( mktime(0,0,0, $monat, $tag, $jahr) ); } ?>
<?php function date_php2wochentag($zeitstempel) { // PHP-Timestamp in deutschen Wochentag umwandeln // Funktion veröffentlicht von www.KlickTipps.de $wochentage = array("Sonntag","Montag","Dienstag","Mittwoch", "Donnerstag","Freitag","Samstag"); return $wochentage[date("w", $zeitstempel )]; } ?>
<?php function trimall( $eingabe ){ /* alle Blanks aus einem String entfernen Funktion veröffentlicht von www.KlickTipps.de */ return( str_replace( ' ', '', $eingabe ) ); } ?>
<?php function dateigroesse_km( $datei ){ /* Dateigröße ermitteln und in kB bzw. MB (als String) angeben Funktion veröffentlicht von www.KlickTipps.de */ //echo filesize( $datei ) ; $groesse = (int)(filesize( $datei )/1000); if ( $groesse <= 500 ){ return($groesse ." kB"); }else{ return(number_format($groesse/1000 , 1 , "," , ".")." MB"); } } ?>
<?php function htmllink($link, $text="", $target = "", $title = "" ){ // Einen html-Link erzeugen und E-Mail-Adressen (zum Spamschutz) // codieren. // Parameter mit = sind optionale Parameter // Funktion veröffentlicht von www.KlickTipps.de // Eingaben aufbereiten $text = trim($text); $link = trim($link); $target = trim($target); $title = trim($title); //keine sinnvolle Ausgabe möglich: if ( $link=="" and $text=="" ) { return(""); } if ( $link!="" and $text=="" ) { $text=$link; } //kein Link vorhanden - nur normalen Text ausgeben if ( $link=="" and $text!="" ) { return($text); } if ( $target!="" ) { $target = " target=\"" . trim($target) . "\""; } // ist der Link eine E-Mail-Adresse? $emaillink = false; if ( strpos( "$link" ,"@" ) AND strrpos( $link ,"." ) AND strpos( "$link" ,"@" ) < strrpos( $link ,"." ) ){ $emaillink = true; } // bei bestimmten Dateiarten die Größe ermitteln // zur hier benutzten Funktion dateigroesse_km( $link ): //siehe voriger Abschnitt if ( $title == "" ){ $dateityp = strrchr ( $link , "." ); if (strpos(".pdf.docx.xls.zip.ppt" , $dateityp) !== false){ $title = $dateityp."-Datei, ".dateigroesse_km($link); } } //title erzeugen if ( $title != "" ){ $title = " title=\"" . $title . "\""; } //Link ausgeben if( $emaillink ){ //es ist ein E-Mail-Link, also: //'mailto:' einfügen und codieren gegen Spam $ausgabe = "<a href=\"" . str_to_ascii("mailto:".$link) . "\""; $ausgabe = $ausgabe .$title.">"; $text = str_to_ascii( $text ); }else{ //HTML-Link $ausgabe = "<a href=\"" . $link . "\"" . $target . $title . ">"; } return ( $ausgabe . $text . "</a>" ); } function str_to_ascii($input){ // Sting in ASCII umwandeln, // z. B. zum Verschlüsseln von E-Mail-Adressen $ascii = NULL; for ($i = 0; $i < strlen($input); $i++) { $ascii .= '&#' . ord($input[$i]) . ';'; } return($ascii); } // So wird die Funktion z. B. aufgerufen: echo htmllink( "http://www.klicktipps.de" , "Viele Tipps in Klicktipps" , "_blank" , "klick mich!") . "\n" ; // oder so für einen Link zu einer E-Mail-Adresse: $adresse = "wie_heisst_sie_wohl@web.de"; echo htmllink($adresse , "meine beste Feundin" , "" , "")."\n"; // und so für eine pdf-Datei: echo htmllink( "irgendeine.pdf" , "xyz-Formular" , "_blank" , "")."\n"; ?> <!-- Die Funktion str_to_ascii() kann auch einzeln benutzt werden. Zwei Beispiele: Telefon: <?php echo str_to_ascii("06251 123usw."); ?> E-Mail: <a HREF="<?php echo str_to_ascii( 'mailto:' . 'nnn@web.de'); ?>"><img src="mail.gif" border="0"><?php echo str_to_ascii('nnn@web.de'); ?></a> -->
Bei pdf-, Word- oder Excel-Dateien wird mit title="....." ein Hinweis auf die zu erwartende Dateigröße ausgegeben.<?php function bild_anzeigen( $bild , $text , $css = "" , $prozent = 100 ){ // Bild anzeigen (vorher Größe ermitteln) // für GIF-, JPG-, PNG- oder SWF-Dateien // Funktion veröffentlicht von www.KlickTipps.de $bild_array = getimagesize($bild); $bild = trim( $bild ); $text = trim( $text ); // optionaler Parameter für weitere CSS-Formatierung $css = trim( $css ); // optionaler Parameter für Änderung Bildgröße if ($prozent <= 0) { $prozent = 100;} $ausgabe = "<img src=\"" . $bild . "\""; if ( $bild_array[0] > 0 and $bild_array[1] > 0 ){ $neuebreite = round($bild_array[0]*$prozent/100); $neuehoehe = round($bild_array[1]*$prozent/100); $ausgabe = $ausgabe . " width=\"" . $neuebreite . "\""; $ausgabe = $ausgabe . " height=\"" . $neuehoehe . "\""; } if ( $css != "" ){ $ausgabe = $ausgabe . " style=\"" . $css . "\""; } //alt immer ausgeben (W3C-KOnformität) $ausgabe = $ausgabe . " alt=\"" . $text . "\""; if ( $text != "" ){ $ausgabe = $ausgabe . " title=\"" . $text . "\""; } $ausgabe = $ausgabe . ">"; return( $ausgabe ); } // So wird die Funktion z. B. über diesem Abschnitt genutzt: // kleinerer Leuchtturm: echo " " . bild_anzeigen( "bildchen/leuchtturm1.gif" , "Leuchtturm" , "float:left; margin: 0px 8px 3px 0px; border:1px solid #ccc;" , 50 )."\n"; // größerer Leuchtturm: echo " " . bild_anzeigen( "bildchen/leuchtturm1.gif" , "Leuchtturm" , "float:left; margin: 0px 8px 3px 0px; border:1px solid #ccc;" )."\n"; // und so ohne CSS und ohne Größenänderung: echo " " . bild_anzeigen( "bildchen/leuchtturm1.gif" , "" ) . "\n "; ?>
<?php function this_file( $input = "" ) { // Die Funktion gibt ohne Parameter den momentanen // Filenamen aus // oder vergleicht ihn mit $input und gibt // true oder false aus. // Funktion veröffentlicht von www.KlickTipps.de $filename = basename($_SERVER['PHP_SELF']); if ( $input == "" ){ return ( $filename ); }else{ return ( $input == $filename ); } } ?>
Gelegentlich möchte man in einer Homepage nicht nur GPS-Positionen angeben,
sondern auch gleich einen Link zu einem passenden Kartenausschnitt anbieten.
Die Funktion link_maps_google() erzeugt aus Koordinaten den entsprechenden Link.
Mit der Funktion grad2grad_min() werden Dezimalgrad in Grad und Minuten umgerechnet,
die dann im title-tag des Links angezeigt werden können.
<?php function link_maps_google($nn, $ee, $zoom=15, $parameters="", $css=""){ /* Link zu einer Position in maps.google (Static Maps) erzeugen Eingabe in Dezimalgrad mit 6 Nachkommastellen Dokumentation für Static Maps: http://code.google.com/intl/de/apis/maps/documentation/staticmaps */ // Eingaben aufbereiten $parameters = trim( $parameters ); $css = trim( $css ); // Link zusammenbauen $link = ""; $link = "http://maps.google.de/?ie=UTF8&t=h&ll=" ; $link = $link . $nn . "," . $ee; $link = $link . "&spn=0.005885,0.01281&z=" . $zoom ; $link = $link . $parameters ; $target = " target=\"" . "_blank" . "\""; //Anzuzeigenden Text und title-tag erzeugen $grad = $nn . "°N " . $ee . "°E"; $gradmin= grad2grad_min($nn)."N ".grad2grad_min($ee)."E"; $title = $grad." ; ".$gradmin; $title = " title=\"" . $title . "\""; $ausgabe = "<a class=\"koordinaten\" href=\"" . $link . "\"" . $target ; if ( $css != "" ){ $ausgabe = $ausgabe . " style=\"" . $css . "\""; } $ausgabe = $ausgabe . $title . ">"; return ( $ausgabe . $gradmin . "" ); } function grad2grad_min( $grad ){ // Wandelt Dezimalgrad in Grad und Minuten um. // Funktion veröffentlicht von www.KlickTipps.de if ( $grad >= 0 ){ $gr = floor( $grad ); }else{ $gr = ceil( $grad ); } $min = abs($grad - $gr); // auf 3 Nachkommastellen runden return ( $gr . "°" . round($min*60*1000)/1000 . "'" ); } ?> <!-- Die Funktion wird im Text z. B. so aufgerufen: --> ... Ein Weltkulturerbe ist z. B. die karolingische Torhalle (<?php echo link_maps_google(49.653919, 8.568714, 17, "", "text-decoration:none;"); ?>) des ansonsten kaum noch vorhandenen Klosters Lorsch. ...
Ausgabe:
... Ein Weltkulturerbe ist z. B. die karolingische Torhalle
(N 49° 39.235' E 8° 34.123')
des ansonsten kaum noch vorhandenen Klosters Lorsch. ...
Die bisher vorgestellten Funktionen kann man nach Lust und Laune kombinieren. In diesem Fall werden sie benutzt, um in den Ostertagen ein paar zufällig ausgewählte Ostereier anzuzeigen.
<?php function ostereier( $anz_min=1 , $anz_max=5 , $groesse=100 ){ // Es erscheinen $anz_min bis $anz_max zufällig ausgewählte Ostereier. // Die Bildgröße kann in Prozent verändert werden. // Ohne Parametereingabe erscheinen 1 bis 5 Eier in normaler Größe. // Funktion veröffentlicht von www.KlickTipps.de if ( $anz_min <=0 ){ $anz_min = 1; } if ( $anz_max <=0 or $anz_max < $anz_min or $groesse<5){ return; } // Pfad, in dem die Bilder liegen $pfad = "bildchen/eggs/"; // die Dateinamen der Bilder $arr = array("egg1.gif", "egg2.gif", "egg3.gif"); // alt-Text $text = ";-)"; for ($i=0; $i < zufall($anz_min,$anz_max); $i++) { $bild = $pfad.$arr[zufall(0,count($arr)-1)]; echo bild_anzeigen($bild,$text,"padding-right:2px",$groesse); } } ?> <!-- So wird die Funktion z. B. über diesem Abschnitt in HTML-Umgebung genutzt (2 bis 5 Eier in 70% Größe): --> <?php ostereier( 2 , 5 , 70 ); echo " \n" ?> <!-- und so ist sie von Ostersamstag bis Mittwoch nach Ostern aktiv: --> <?php $ostern = easter_date( date("Y") ); $ostermonat = date("n" , $ostern ); $ostertag = date("j" , $ostern ); if ( termin_anzeigen($ostertag, $ostermonat, date("Y"), 1, 3) ){ ostereier( 2 , 5 , 70 ); echo " \n"; } ?>
Diese Funktion kann man natürlich auch für vieles Andere als 'nur' für Ostereier benutzen.
Dass der Cursor hier zum Osterei wird, geschieht übrigens nicht durch PHP,
sondern durch CSS mit
Eine .gif-Datei lässt sich z. B. mit den Programmen "IconArt" oder "Microangelo" in eine
.cur-Datei oder .ani-Datei umwandeln.
Cursors zum Download z. B. bei:
duering-online.de
oder
joescursors.tripod.com
Auch ein Adventskranz mit passender Kerzenzahl je Adventswoche lässt sich realisieren:
<?php function adventskranz( $Default=0 , $CSS="" ) { // passenden Adventskranz anzeigen // bei $Default != 0 ganzjährige Anzeige // Funktion veröffentlicht von www.KlickTipps.de // optionaler Parameter: CSS für Bild, z. B. width:140px;height:140px; $CSS = trim( $CSS ); //Adventssonntage berechnen $diesesjahr = date("Y"); $heiligabend = mktime(0,0,0,12,24,$diesesjahr); $Advent4 = mktime(0,0,0,12,(24-date('w',$heiligabend)),$diesesjahr); $Advent3 = mktime(0,0,0,12,(24-7-date('w',$heiligabend)),$diesesjahr); $Advent2 = mktime(0,0,0,12,(24-14-date('w',$heiligabend)),$diesesjahr); $Advent1 = mktime(0,0,0,12,(24-21-date('w',$heiligabend)),$diesesjahr); //Montag vor dem 1. Advent $Advent0 = mktime(0,0,0,12,(24-27-date('w',$heiligabend)),$diesesjahr); $Path ="bildchen/advent/"; $Bild = ""; if( $Default != 0 ){$Bild = $Path . "Adventskranz0.gif";} if ( time() >= $Advent1 AND time() < $Advent2 ){ $Bild = $Path . "Adventskranz1.gif"; }elseif ( time() >= $Advent2 AND time() < $Advent3 ){ $Bild = $Path . "Adventskranz2.gif"; }elseif ( time() >= $Advent3 AND time() < $Advent4 ){ $Bild = $Path . "Adventskranz3.gif"; }elseif ( time() >= $Advent4 AND time() < mktime(0,0,0,12,27,$diesesjahr) ){ $Bild = $Path . "Adventskranz4.gif"; } $ausgabe = ""; if( $Bild != "" ){ $ausgabe = "<img src=\"" . $Bild . "\""; if ( $CSS!= "" ){ $ausgabe = $ausgabe . " style=\"" . $CSS . "\""; } $ausgabe = $ausgabe . "> \n"; } return ( $ausgabe ); } ?> <!-- So wird die Funktion z. B. über diesem Abschnitt im HTML genutzt (ganzjährige Anzeige, rechtsbündig): --> <?php echo adventskranz(1,"float:right;margin: 0px 0px 10px 10px;"); ?>
Der Kerzen-Cursor wurde mit einer entsprechenden .cur-Datei und CSS erzeugt:
Die Bilder der Adventskränze und den Kerzen-Cursor können Sie hier mit der Datei
adventskraenze.zip
herunterladen.
<?php function tob_version_des_users() { // Version des t-online-Browsers beim User anzeigen $browser = $_SERVER['HTTP_USER_AGENT']; $pos = strpos( strtoupper($browser) ,"TOB"); if ( $pos !== false ){ // Es ist ein t-online-Browser. // TOB und Versionsnummer extrahieren $browser = substr ($browser,$pos , 12); $browser = explode(';', $browser ); // TOB und Versionsnummer trennen $browser = explode(' ', $browser[0] ); $version = $browser[1]; return $version; }else{ return false; } } ?>
Wie man den Stand des Internet Explorers mit JavaScript abfragen kann, ist in meiner Seite javascript-tipps.php beschrieben.<?php function momentane_ip_des_users() { // IP-Nummer des Users anzeigen if (! isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $client_ip = $_SERVER['REMOTE_ADDR']; } else { $client_ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } return $client_ip; } // Aufruf z. B. mit: echo "Momentane IP: " . momentane_ip_des_users(); ?>
Sie haben zur Zeit die IP-Nummer 3.232.129.123 (nur Anzeige, keine Speicherung).
Vielleicht möchte man die IP-Adresse bzw. IP-Nummer ermitteln, um sie z. B. vorübergehend als Wiederholungssperre für einen Zähler oder längerfristig für andere Zwecke zu verwenden. Wer vermeiden will, die IP-Nummer seiner Besucher direkt zu speichern, muss sie so in eine andere Zahl umwandeln, dass sie zwar nicht mehr zurückgewandelt werden kann, aber sich von den Zahlen anderer Besucher noch genügend unterscheidet.<?php function ip_anonym(){ // IP-Nummer irreversibel anonymisieren // Funktion veröffentlicht von www.KlickTipps.de // // Algorithmus: Die vier Zahlengruppen um je eine Stelle versetzt // addieren. Dabei entstehen genügend Möglichkeiten, // um auch viele gleichzeitige User zu unterscheiden. // Die Entstehung gleicher Nummern ist wenig wahrscheinlich. $ausgabe = 0; //IP ermitteln, ggf. vorhandene Blanks löschen, IP zerlegen $ip = trim( $_SERVER['REMOTE_ADDR'] ); if( strlen( $ip ) == 0 ){ return $ausgabe; }else{ $arr = explode( "." , $ip ); } // Zahlengruppen addieren for( $i = 0; $i < count( $arr ); $i++ ){ $ausgabe += $arr[$i] * pow(10,$i); // Nur $ausgabe += $arr[$i] wäre einfacher. Dann kann es aber // bei vielen gleichzeitigen Besuchern eher mal zu doppelten // Zahlen kommen. } return $ausgabe ; } // Aufruf z. B. mit: $ip = ip_anonym(); // Die Variablen $ip und $arr werden mit Verlassen // der Funktion wieder undefiniert. // Sie müssen nicht extra mit unset($ip,$arr); gelöscht werden. ?>
Die so verschlüsselte Zahl könnte man danach ggf. wieder mit Punkten und führenden oder folgenden Nullen garnieren, dass sie wieder einer IP-Adresse gleicht, also im Bereich von 0.0.0.0 bis 256.256.256.256 liegt.<?php function zaehle_das( $filename , $element ){ //Einfacher Zähler mit .txt-Datei //Die in $filename angegebene Datei wird gelesen, //der Inhalt von $element wird in der Datei gesucht, //hochgezählt und die Datei gespeichert. //Wenn die Datei nicht voranden ist, wird sie angelegt. $vorhanden=0; if($element=="" ){ return; } //leere Angaben nicht zählen if (!file_exists($filename)) { //die Datei ist nicht vorhanden; sie wird neu angelegt $fp = fopen($filename , "w+"); flock($fp,2); fwrite ($fp, $element."#1", 500); fclose($fp); return; //Ende des Programms } //Datei einlesen und währenddessen sperren $fp = fopen( $filename ,"r"); if( !is_resource ($fp) ){ //die Datei kann nicht geöffnet werden return; //Ende des Programms } flock($fp,2); while( !feof($fp) ){ $zeile = trim(fgets($fp, 500)); if($zeile!=""){ $zz = explode( "#" , $zeile); // vorhandenen Eintrag hochzählen if( $zz[0] == $element ){ $vorhanden = 1; $zz[1]++; } $array[]= $zz; } } fclose($fp); // neue Zeile anfügen if( $vorhanden==0 ){ $array[] = array( $element , 1 ); } // gelegentlich sortieren if( rand(1, 100) > 90 ){ sort($array); } $ausgabe = ""; foreach( $array as $zz ){ $ausgabe .= $zz[0] ."#" . $zz[1] ."\r\n"; } $fp = fopen($filename , "w"); flock($fp,2); fwrite ($fp, $ausgabe , 10*1024); // 10 kByte fclose($fp); } function zeige_alle( $filename , $sort=0 ){ //Zählerdaten anzeigen //Die in $filename angegebene Datei wird gelesen, //der Inhalt wird ggf. sortiert und als Array ausgegeben //$sort==1 Sortierung nach Name //$sort==2 Sortierung nach Menge (absteigend) if (!file_exists($filename)) { return "Die Datei " . $filename . " ist nicht vorhanden."; } //Datei einlesen $fp = fopen( $filename ,"r"); if( !is_resource ($fp) ){ return"Die Datei " . $filename . " kann nicht geöffnet werden."; } flock($fp,2); $ii=-1; while( !feof($fp) ){ $zeile = trim(fgets($fp, 500)); if($zeile!=""){ $zz = explode( "#" , $zeile); $ii++; $array[$ii][0]=$zz[0]; $array[$ii][1]=$zz[1]; } } fclose($fp); //ggf. sortieren nach 1. bzw. 2. Spalte if($sort==1){ sort($array); }elseif($sort==2){ usort( $array , 'compare'); } return $array; } function compare($a, $b){ //Hilfsfunktion zum Sortieren (2. Spalte absteigend, 1. Spalte aufst.) if( $a===$b ){ return 0; } if( $a[1]==$b[1] ){ return ($a[0]<$b[0]?-1:1); } return ($a[1]>$b[1]?-1:1); } function zeige_einen( $filename , $element ){ //Zählerdaten anzeigen //Die in $filename angegebene Datei wird gelesen, //Die Menge zu einem $element wird ermittelt. //Wenn $element nicht vorhanden ist wird false ausgegeben. if( !file_exists($filename) ) { return false; } //Datei einlesen $fp = fopen( $filename ,"r"); if( !is_resource ($fp) ){ return false; } flock($fp,2); while( !feof($fp) ){ $zeile = trim( fgets($fp, 500) ); if($zeile!=""){ $zz = explode( "#" , $zeile); if ( $zz[0]==$element ){ fclose($fp); return ($zz[1]); } } } fclose($fp); return false; } // Aufruf des Zählers z. B. zum Zählen besuchter Homepageseiten: zaehle_das( "zaehler_seiten.txt" , basename($_SERVER['PHP_SELF']) ); // Ausgabe der Zählerdaten z. B. als Tabelle echo ' <br><br>' . "\n"; echo ' <b>Hier besuchte Seiten</b> (ab xx.xx.2011)' . "\n"; echo ' <br><br>' . "\n"; $array = zeige_alle( "zaehler_seiten.txt" , 2 ); // sortiert nach Menge if(is_array($array)){ echo ' <table>' . "\n"; foreach( $array as $zz ){ echo ' <tr><td>'; echo '<a href="' . $zz[0] . '" >' . $zz[0] . '</a></td>'; echo '<td align="right">'.number_format($zz[1], 0, ",", "."); echo '</td></tr>'."\n"; } echo ' </table>' . "\n"; }else{ echo $array; } //Einzelnes Ergbnis anzeigen: $anz=zeige_einen( "zaehler_seiten.txt" , "index.php" ) if($anz!==false){ echo "Die Startseite (index.php) wurde ".$anz." mal besucht.\n"; } //Man könnte auch die Herkunft der Seitenbesucher zählen. Das funktio- //niert nur, falls der aufrufende Browser den Referrer übermittelt. if( $url_array[host] != ""){ zaehle_das( "count_ref.txt" , $url_array[host] ); }else{ zaehle_das( "count_ref.txt" , "0hne Angabe" ); } ?>
<?php include_once ( "funktionen.inc.php" ); ?>
eingefügt.<?php if( irgendeine Bedingung ) { ?> <!-- ab hier können jetzt beliebig viele HTML-Zeilen stehen --> <?php }else{ ?> <!-- und hier der alternative Text --> <?php } ?>
<?php function eingabe_numerisch_filtern( $wert , $min , $max , $default=0 ) { // Eingaben filtern und prüfen: Fremden Code entfernen, nur gewünschte Werte zulassen // Bei unterschreiten von $min oder überschreiten von $max nur diese Werte ausgeben // $default : Optionaler Parameter: Wert der bei nicht passierter Prüfung ausgegeben wird if( strlen($wert) > 25 ){ return $default; } // längere Zahlen gibt es in PHP nicht $wert = strip_tags( $wert ); // Code in spitzen Klammern löschen $wert = stripslashes( $wert ); // Schrägstgriche löschen $wert = htmlspecialchars( $wert ); // übersehenen HTML-Code entschärfen $wert = str_replace( ' ', '', $wert ); // alle Blanks löschen if ( empty( $wert ) ){ return $default; } // prüfen, ob noch etwas übrig ist. if ( !is_numeric( $wert ) ){ return $default; } // prüfen auf numerisch $wert = $wert * 1; $wert = max( $wert , $min ); $wert = min( $wert , $max ); return $wert ; } function eingabe_alfanumerisch_filtern( $wert , $stellenzahl=50 , $default="" ) { // Eingaben filtern und prüfen: Fremden Code entfernen // $default : Optionaler Parameter: Wert der bei nicht passierter Prüfung ausgegeben wird if( strlen($wert) > $stellenzahl ){ return $default; } $wert = strip_tags( $wert ); // Code in spitzen Klammern löschen $wert = stripslashes( $wert ); // Schrägstgriche löschen $wert = htmlspecialchars( $wert ); // übersehenen HTML-Code entschärfen $wert = trim( $wert ); // führende und nachfolgende Blanks löschen if ( empty( $wert ) ){ return $default; } // prüfen, ob noch etwas übrig ist. return $wert ; } ?>
Ein interessantes Beispiel zum Checken einer E-Mail-Adresse gibt es bei www.gordonzube.com.# # Alles, was hinter dem Gatterzeichen (#) steht, ist nur ein Kommentar. # # Festlegen, dass PHP-Code auch in .htm- und .html-Dateien # ausgeführt wird: AddHandler x-httpd-php5 .php .php5 .htm .html # # So funktioniert es bei www.goneo.de, aber nicht bei jedem # anderen Provider. # Genaueres muss mit dem jeweiligen Provider geklärt werden. # # Diese Einstellung erspart, alle Dateien mit Endung .php zu # versehen. Sie bedeutet aber für HTML-Dateien, die kein PHP # enthalten, erhöhte Ladezeit. # # Reihenfolge, in der nach einer Indexdatei gesucht wird. DirectoryIndex index.php index.htm index.html # # Gerade beim Aufbau eine Homepage könnte man damit # die User zu einer vorläufigen index.html leiten, # während an einer index.php und den dazugehörigen Seiten # gebaut und getestet wird. # # Seite festlegen, die bei fehlerhafter URL gezeigt wird: ErrorDocument 400 http://www.meine-homepage.de/error.php ErrorDocument 401 http://www.meine-homepage.de/error.php ErrorDocument 402 http://www.meine-homepage.de/error.php ErrorDocument 403 http://www.meine-homepage.de/error.php ErrorDocument 404 http://www.meine-homepage.de/error.php ErrorDocument 500 http://www.meine-homepage.de/error.php # # Umleitung für Seiten, deren Name geändert wurde, oder die auch ohne # Dateiendung erreichbar sein sollen. # Als Ziel wird eine komplette URL angegeben, bei manchen Providern # reicht auch die relative Angabe der Seite. # RedirectPermanent /impressum.html http://www.meine-homepage.de/impressum.php RedirectPermanent /impressum.htm http://www.meine-homepage.de/impressum.php RedirectPermanent /impressum http://www.meine-homepage.de/impressum.php RedirectPermanent /kontakt http://www.meine-homepage.de/impressum.php # RedirectPermanent /sailing http://www.meine-homepage.de/sailing.php RedirectPermanent /hiking http://www.meine-homepage.de/hiking.php RedirectPermanent /php http://www.meine-homepage.de/php-tipps.php #
Umfassendes Know How dazu gibt es bei selfhtml.org.