Alle unsere Tipps (Home)
Übersicht Buch- und Hobby-Tipps


PHP-Tipps

Die Klicktipps-Seiten wurden Anfang 2007 auf PHP umgestellt. Bei der Verwendung von PHP für Klicktipps und für andere von mir betreute Homepage-Projekte habe ich viel gelernt, viele Frust- und noch mehr Aha-Erlebnisse gehabt.

Etwas Anfangsfrust beim Erlernen einer Programmiersprache ist normal. Inzwischen möchte ich keine Seite mehr ohne PHP erstellen müssen.
Allein schon die Möglichkeit, mit dem include-Befehl wiederkehrende Seitenteile (z. B. Kopf, Navigationsteil, Fußzeilen, Variablen usw.) nur einmal schreiben zu müssen und mehrfach einbinden zu können, ist Gold wert. Eine zentrale Nutzung von CSS und PHP erspart enorm viel Zeit und Aufwand.
Ebenso ist die Möglichkeit, Inhalte und Abschnitte datumsgesteuert ein- und auszublenden eine große Rationalisierung beim aktuell halten von Homepages.

Ich habe PHP übrigens gar nicht auf meinem PC installiert, sondern baue es in Homepages ein, lade sie hoch und schaue mir dann das Ergebnis an. Das nicht-Installieren mag anfänglich Faulheit gewesen sein, ist aber eigentlich sinnvoll, weil ich so immer gleich nachsehe, was denn in der für die weite Welt sichtbaren Seite passiert.
Wenn dann das gewünschte Ergebnis angezeigt wird, ist es überall in der Welt genauso zu sehen. Grund: PHP läuft nicht auf meinem PC und ist auch nicht (wie z. B. JavaScript) von einem Browser des jeweiligen Benutzers abhängig, sondern läuft auf dem Server, in dem auch die Homepage liegt.

Ein paar wenige Dinge lassen sich aber trotzdem nur mit JavaScript realisieren, siehe javascript-tipps.php.

Empfehlungen, Links und Tipps zu PHP werden in dieser Seite weitergegeben:


Sonderseite:




Bücher

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.


Buchtipps für den Bau von Homepageseiten gebe ich auf der Seite "Tipps für Webmaster und Homepagebauer".



Links

zum Seitenanfang


Programmiertipps und -ideen

Manchmal finde ich für Probleme Lösungen, die dann öfter benutzt werden. Daraus entstehen meist kleine praktische Funktionen. Einige dieser Funktionen und auch ein paar einzelne kleine Ideen (Nützliches bis Witziges) stelle ich Ihnen hier vor. Die Beispiele entalten zur besseren Übersichtlichkeit oft mehr Blanks als nötig.
Viel Spaß beim Benutzen! - und lassen Sie sich dadurch zu eigenen Experimenten und Ideen anregen:


include und include_once

Wie bereits oben beschreiben, ist der include-Befehl für mich die allerbeste Erfindung im PHP. So muss z. B. eine Navigationsleiste nur einmal definiert werden und kann dann überall verwendet werden:

<!-- 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.

Wenn in dieser Navigationsleite noch Untermenüs eingefügt werden sollen, kann man mit basename($_SERVER['PHP_SELF']) den Namen der aufrufenden Seite abfragen und mit IF entsprechend reagieren. Mit den unten beschriebenen Funktionen können Includes auch nach Kalenderdatum ein- und ausgeschaltet werden.

Wenn in einer Datei das Selbe zwei Mal mit include geholt wird, kann es besonders wenn dort Funktionen und Ähnliches enthalten sind, zu Fehlern kommen. Der Befehl include_once wird nur einmal pro Datei tätig und verhindert solche Probleme.




include ohne PHP

Falls Sie den hilfreichen und praktischen include-Befehl nutzen möchetn, aber bei Ihrem Provider bzw. dem dort gemieteten Webspace kein PHP läuft, gibt es vielleicht einen Ersatz:
Wenn SSI (Server Side Includes) läuft, kann man den dortigen include-Befehl verwenden. Beispiele:

<!--#include file="seitenkopf.shtml" -->

oder

<!--#include file="drumrum/fusszeile.shtml" -->

SSI funktioniert zunächst allerdings nur in Dateien mit Endung .shtml.
Wer bestehende Dateien - und alle zugehörigen internen Links - nicht von .html bzw. .htm in .shtml umbenennen will, kann eine Datei .htaccess anlegen, in der der Befehl

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.
Falls Ihr Provider SSI anbietet, aber diese Einstellungen in der .htaccess-Datei nicht funktionieren, klären Sie bitte mit Ihrem Provider, wo/wie solche Einstellunge stattdessen vorzunehmen sind.

Weitere Informationen zu SSI:
    www.Wikipedia.de und www.Selfhtml.org
Informationen zu SSI in .html-Dateien:
    www.parkansky.com/ (englisch) und www.bananajoe.de/htac (deutsch)
zum Seitenanfang



Messagebox/Alert

Wer sich vor PHP mit Visual Basic oder JavaScript befasst hat, wird nun vielleicht so etwas wie eine Messagebox oder die alert-Funktion vermissen. Es ist ziemlich das Einzige, was ich bisher vermisst habe. So etwas kann aber in einer Verbindung von PHP und JavaScript nachgebaut werden:

<?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.

Die obige Funktion setzt voraus, dass JavaScript im Browser des Betrachters aktiv ist. Das ist nicht immer der Fall.
Deswegen hier eine Version, die statt mit JavaScript 'nur' mit CSS arbeitet:

<?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 echo $ausgabe; ?> ausgeben. Aber das findet man im Gewusel großer Seiten eventuell nicht gleich, oder man vergisst, es wieder zu entfernen.
zum Seitenanfang



Zufallszahlen

Gegen die übliche Langeweile oder wenn irgendetwas nicht jedsmal geschehen bzw. angezeigt werden soll, benötige ich in fast jeder Programmiersprache, die ich bisher kenne, Zufallszahlen.
Solche Befehle gibt es auch in jeder Programmiersprache, aber immer anders (in PHP erfreulich einfach), und ich kann sie mir einfach nicht merken.
Also baue ich mir immer erst mal eine Funktion zufall(), die mir ganze Zahlen in einem Bereich "von/bis" erzeugen kann:

<?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; ?>

zum Seitenanfang



Datum und bewegliche Feiertage berechnen

Außer den PHP-Funktionen time(), date() und mktime() braucht man gelegentlich weiteres KnowHow. Hier ein paar Anregungen:

<?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: 14.05.2017 //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: 24.12.2017 //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: 03.12.2017 $Advent1 = mktime(0,0,0,12,(24-21-date('w',$heiligabend)),$diesesjahr); ?>

So etwas kann man auch in einen HTML-Text einbauen.
Beispiel:

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.
zum Seitenanfang



Zeitraum von/bis

Manche PHP-Funktionen oder von ihnen eingeschlossene HTML-Abschnitte sollen nur zu bestimmten Zeiten ausgeführt werden. In den Klicktipps-Seiten macht Werbung für Blumen z. B. nur in der Zeit vor dem 14. Februar und vor Muttertag Sinn.
Hier hilft mir eine Funktion, die ermittelt, ob der heutige Tag in einem bestimmten Zeitraum liegt:

<?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 14.2. minus 31 Tage = 14.1. bis zum 15.2. des jeweiligen Jahres angezeigt. Davor und danach sind sie ausgeblendet.
zum Seitenanfang



Deutsches Datum in PHP-Timestamp umwandeln

Wenn man rätselt, wie man ein deutsches Datumsformat des Formats d.m.yy bis dd.mm.yyyy in PHP-timestamp umwandeln könnte; so geht es:

<?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) ); } ?>

zum Seitenanfang



PHP-Timestamp in deutschen Wochentag umwandeln

Das funktioniert zum Beispiel so:

<?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 )]; } ?>

zum Seitenanfang



Alle Blanks löschen

Mit den Funktionen ltrim() und rtrim() kann man Leerzeichen am Anfang und am Ende von Zeichenketten (Strings) entfernen; mit trim() beides. Aber wie entfernt man alle Leerzeichen aus einer Zeichenkette? Ich habe dafür die Funktion trimall() - das kann ich mir einfach besser merken als str_replace(...).

<?php function trimall( $eingabe ){ /* alle Blanks aus einem String entfernen Funktion veröffentlicht von www.KlickTipps.de */ return( str_replace( ' ', '', $eingabe ) ); } ?>




Dateigröße anzeigen

Auch die Größe einer Datei kann mit PHP ermittelt und in kB bzw. MB angegAben werden. Dies ist z. B. dann sinnvoll, wenn man Downloads anbietet und man die User vorher über die Dateigröße informieren möchte.

<?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"); } } ?>

zum Seitenanfang



Links erzeugen und E-Mail-Adressen (zum Spamschutz) codieren

Manchmal will man mit PHP HTML-Links oder Links zu E-Mail-Adressen erzeugen. Wenn man es zum ersten Mal oder selten macht, ist das ein ziemliches Basteln. Eine einmal fertige Funktion hilft für die Zukunft. E-Mail-Adressen werden zum Spamschutz in ASCII codiert. Damit werden schon mal erstaunlich veiel Spams verhindert. Noch besser ist es natürlich, die eigene Adresse als .gif-Bildchen in die Seite zu stellen.

<?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.
Optionale Paremeter müssen beim Aufruf der Funktion nicht immer gesetzt werden; aber wenn man es tut, dann von links her in der richtigen Reienfolge.

In einer extra-Seite habe ich beschrieben, wie man mit PHP kurze Werbelinks zum Amazon-Partnerprogramm erzeugen kann.
zum Seitenanfang



Bilder anzeigen

Leuchtturm Leuchtturm Bilder werden immer wieder in HTML-Seiten eingebaut. Damit der Seiteninhalt nicht hin- und herspringt, muss die Bildgröße ermittelt und angegeben werden. Manuell ist das sehr lästig.
Diese PHP-Funktion ermittelt auch die Größe des Bildes und gibt den img-Befehl mit width und height aus.

<?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 "; ?>

zum Seitenanfang



Die aktuelle Seite ermitteln

Für manche Steuerungsaufgaben (Einblenden von Untermenüs, Einblenden von seitenspezifischer Werbung usw.) ist es wichtig, die aktuelle Seite zu ermitteln:

<?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 ); } } ?>

zum Seitenanfang



Link zu einer Position in Google Maps erzeugen

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. ...


zum Seitenanfang



Spaß mit Ostereiern   ;-);-);-);-);-)

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 <div style="cursor:url('eggs2.cur'), auto;">. Mehr Informationen dazu gibt es z. B. bei greenfish-icon-editor-pro.softonic.de oder anicursor.com.
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
zum Seitenanfang




Adventskranz mit unterschiedlich vielen Kerzen

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: <div style="cursor:url('Kerze.cur'), auto;">.
Die Bilder der Adventskränze und den Kerzen-Cursor können Sie hier mit der Datei adventskraenze.zip herunterladen.
zum Seitenanfang




Browserweiche für den t-online-Browser

In vielen Internetseiten heißt es, dass der t-online-Browser (TOB) die Funktionen des Internet Explorers (IE) nutzt. Es sollte also für eine "Browserweiche" eigentlich ausreichen, den Stand des IE abzufragen. Tatsächlich scheint aber der TOB dem IE etwas nachzulaufen. Daher kann das Ermitteln der eine Abfrage der TOB-Version beim User nützlich sein, um z. B. für diesen Browser eine spezielle CSS-Datei einzufügen.

<?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.

Wenn es allerdings 'nur' darum geht, für den Internetexplorer das CSS zu ändern, kann man eine Browserweiche wie z. B. [if lt IE 7] im CSS einbauen.



Momentane IP-Nummer des Users ermitteln

Eventuell möchte man sich selbst die eigene oder dem User seine momentane IP-Nummer anzeigen. Auch das lässt sich mit PHP (falls die Nummer übermittelt wird) realisieren:

<?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 23.23.49.196 (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.
Dies kann mit folgender Funktion geschehen:

<?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.
zum Seitenanfang


Einfacher, universell einsetzbarer Zähler (ohne SQL)

Häufig möchte man schnell etwas zählen und sucht lange nach einem passenden Zählprogramm. Hier eine paar kleine universell einsetzbare PHP-Funktionen, zum Zählen und zum Ausgeben aller Ergebnisse oder eines einzelnen Ergebnisses. Der Zähler kommt ohne den Einsatz von SQL aus.

<?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" ); } ?>

zum Seitenanfang


Funktionen in .php-Dateien bzw. HTML-Seiten einfügen

Wie fügt man Funktionen in alle oder mehrere .php-Dateien bzw. HTML-Seiten ein?
Man schreibt die Funktionen in eine Datei, die man z. B. funktionen.inc.php nennt. Diese Datei beginnt mit <?php und endet mit ?>.
In Dateien, in denen die Funktionen benötigt werden, werden sie mit

<?php include_once ( "funktionen.inc.php" ); ?>

eingefügt.
Man benutzt include_once statt include, damit es nicht zu Problemen kommt, falls man funktionen.inc.php versehentlich mehrmals includiert.

Anmerkung: Mit include kann man natürlich auch HTML-Code in eine Homepage-Seite einbauen. Code-Teile, die in vielen Seiten benutzt werden, müssen dann nur einmalig programmiert und gepflegt werden. Allein dieser Aspekt von include ist für mich schon ein Grund, Homepages möglichst nur noch auf einem PHP-fähigen Server zu bauen.
Ich bevorzuge inzwischen www.goneo.de, weil dort bereits im kleinsten Paket zu günstigem Preis viel geboten wird.



Variablen in .php-Dateien einfügen

Manchmal verwendet man Werte in Texten, die an vielen Stellen vorkommen, die man aber gelegentlich finden und ändern muss.
In Klicktipps sind das z. B. der Grundfreibetrag der Einkommensteuer (2015: 8.472 €, 2016: 8.652 €, 2017: 8.820 €), die Werbungskostenpauschale (1.000 € (ab 2011; vorher 920 €)) oder die Zinssätze in der Seite Tagesgeld und Festgeld.
Wenn man solche Werte an einer einzigen Stelle ändern kann, spart das viel Arbeit.

Vorgehensweise:



Den echo-Befehl ersetzen

Manchmal möchte man ganze HTML-Bereiche, also mehrere Zeielen auf einmal, ein- oder ausblenden. Mit dem Befehl echo() ist das zwar möglich, aber doch recht lästig.
Die Heredoc-Syntax erspart schon einige echo()-Befehle. Aber es geht noch wesentlich einfacher, indem man den HTML-Teil in eine PHP-Bedingung einschließt:

<?php if( irgendeine Bedingung ) { ?> <!-- ab hier können jetzt beliebig viele HTML-Zeilen stehen --> <?php }else{ ?> <!-- und hier der alternative Text --> <?php } ?>

zum Seitenanfang


Bildschirmbreite oder Fensterbreite von JavaScript an PHP übertragen

Da PHP nicht im Browser des Users, sondern beim Provider läuft, kann man mit PHP die momentane Bildschirmgröße oder gar Fenstergröße beim User nicht ermitteln. Falls man diesen Wert dennoch dringend im PHP benötigt, muss man ihn über eine Variable in der URL (Homepage-Adresse) an PHP übergeben.
Wie das realisiert werden kann, habe ich in javascript-tipps.php#Fensterbreite-JavaScript-PHP beschrieben.
In der Adresszeile (URL) übergebene Werte sollte man immer intensiv filtern und prüfen!
zum Seitenanfang



Formulare erstellen und verarbeiten

Um das "Rad" nicht noch mal zu erfinden, verweise ich auf folgende gut erklärte Seiten: Vom User eingegebene Werte sollte man immer filtern und prüfen; siehe nächster Abschnitt. zum Seitenanfang




In Formularen eingegebene oder in der Adresszeile (URL) übergebene Werte prüfen

Vom User eingegebene Werte sollte man immer möglichst intensiv filtern und prüfen; einerseits, um Programfehler durch fehlerhaft eingegebene Daten zu verhindern, andererseits, um Angriffe durch eingegebenen HTML- oder gar SQL-Code zu verhindern!
Dazu hier zwei nützliche Funktionen:

<?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.
Auch hier sollte man vorher so etwas wie eingabe_alfanumerisch_filtern() anwenden.
zum Seitenanfang


PHP und die .htaccess-Datei

Wenn man mit PHP arbeitet, oder ein Homepagegebäude auf PHP umstellt, werden Einträge in einer Datei .htaccess nötig oder zumindest sinnvoll. Diese Datei kann mit einem einfachen Texteditor erstellt und gepflegt werden.
Für das PHP wichtige Zeilen könnten folgendermaßen aussehen:

# # 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.
Es gibt auch online-Programme, die eine .htaccess-Datei (und eine .htpasswd-Datei) generieren können, z. B.: fueralles.de/htaccess-Generator.html, Generatoren für Teile einer .htaccess-Datei (mit .htpasswd-Datei) arne-home.de.

Weitere Möglichkeiten zum Umleiten einer Internetadresse (URL Redirect) sind bei www.schmager.de/redirect.shtml und www.bananajoe.de/htac aufgelistet.
Auch Kombinationen mit regulären Ausdrücken Kombinationen mit regulären Ausdrücken sind möglich.
zum Seitenanfang


PHP-Fehlermeldungen

Wenn in PHP falsch programmiert wird, gibt es eigentlich Fehlermeldungen. Aber nur, wenn sie aktiviert sind. - Wenn nicht, erscheint statt der Homepage nur eine weiße Seite. Das Aktivieren kann je Provider unterschiedlich sein:
  1. Man fügt in jede Seite folgende PHP-Befehle ein:
      ini_set('display_errors', true);
      error_reporting( E_ALL ^ E_NOTICE) ;
  2. Man legt eine Datei php.ini an und fügt dort den Befehl   display_errors = On   ein.
  3. Man legt eine Datei .htaccess an und fügt dort den Befehl   php_value display_errors on   ein.
Was in Ihrem Fall nötig ist erfahren Sie in den Hilfe-Texten Ihres Providers. Bei www.goneo.de funktionieren bis PHP 5.2 die ersten beiden Methoden, ab PHP 5.3 nur die dritte Methode.

PHP-Fehlermeldungen sind manchmal nicht so wirklich verständlich. Die am häufigsten oder am schwierigsten zu findendenden PHP-Fehler und ihre Ursachen sind hier aufgelistet. Die beschriebene Ursache muss nicht die einzig mögliche sein, ist aber die jeweils wahrscheinlichste.

Fehlermeldung: Parse error: unexpected $end in xxxxxxxxx on line nnn
Ursache: Das PHP-Programm ist an seinem Ende angekommen, aber es fehlt z. B. noch eine schließende geschweifte Klammer "}".

Fehlermeldung: Parse error: unexpected '<' in xxxxxxxxx on line nnn
U: Das <?php wurde nochmals innerhalb von PHP-Code benutzt.

Fehler beim Ablauf: eine IF-Bedingung funktioniert absolut nicht
U: Es wurde nur ein = statt einem == verwendet.

Fehler beim Ablauf: PHP funktioniert nicht richtig oder rechnet falsch
U1: Nochmal grübeln, ob man wirklich logisch programmiert hat, oder ob vielleicht mal wieder < mit > verwechselt wurde.
U2: die Operatoren == oder != können Fehler verursachen. Manchmal, z. B. bei strpos(), ist es besser, === false oder !== false zu benutzen. (mehr zu strpos() bei www.php.net)

Fehlermeldung: Parse error: unexpected T_ZZZZZ in xxxxxxxxx on line nnn
U: Häufigste Ursache: In der Zeile vor dem ZZZZZ mal wieder ein Semikolon vergessen. *seufz*

Fehlermeldung: Parse error: syntax error, unexpected T_VARIABLE in xxxxxxxxx on line nnn
U: Mögliche Ursachen: In der Zeile vor einer Variable $..... wurde ein Semikolon vergessen, oder es fehlt ein Rechenzeichen bzw. Vergleichsoperator vor der Variablen.

Fehlermeldung: Parse error: unexpected T_IF in xxxxxxxxx on line nnn
U: Vor dem IF wurde ein Semikolon vergessen, oder vor die Kurzschreibweise ( (nnn==mmm) ? aaaaa : bbbbb ) wurde ein unnötiges IF gesetzt.

Fehlermeldung: Parse error: unexpected '}', expecting ',' or ';' in xxxxxxxxx on line nnn
U: Der Befehl vor der geschweiften Klammer (Ende von IF, FOR oder WHILE) wurde nicht mit Semikolon beendet, oder es gibt eine schleißende Klammer zu viel.

Fehlermeldung: Parse error: unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in xxxxxxxxx on line nnn
U1: Vor einer String-Konstenten z. B. "yyyy" oder 'yyyy' fehlt ein Komma, ein Semikolon oder ein Punkt.
U2: Es gibt eine ungerade Anzahl von Gänsefüßchen oder Hochkommas.

Fehlermeldung: Parse error: unexpected '.' in xxxxxxxxx on line nnn
U: Zur Abwechslung mal ein Semikolon zu viel (vor einem Punkt)?

Bei www.user-archiv.de/php-fehlermeldungen.html, www.drweb.de/magazin/... und www.phpforum.de/forum/... finden Sie weitere PHP-Fehlermeldungen mit Hinweisen auf deren Ursache.


zum Seitenanfang




© Klicktipps® (www.Klicktipps.de):
Dieser Ausdruck ist nur für den eigenen Gebrauch freigegeben.
Eine Vervielfältigung ist nicht gestattet und auch wenig sinnvoll,
da sich der Inhalt durch Aktualisierungen häufig ändert.