Dr. O. Hoffmann
In der Datei wurzel.php stehen einige Variablen für die lokale Konfiguration. Zum Beispiel kann die Verzeichnisstruktur auf dem lokalen Test-server anders sein als auf dem späteren öffentlichen server oder man muß mit seinem Projekt zu einem anderen Anbieter umziehen. Wenn alles gut überlegt ist, reicht es, diese Datei anzupassen. Ein paar andere Sachen stehen da auch noch drin, die auch woanders stehen könnten. Etwa die Namen der Stile in einem array. Wenn das alles per include eingebunden wird, sieht es in der index.php aufgeräumter aus. Das ist im Grunde alles.
<?php # Alle php-Fehler anzeigen, bei Bedarf deaktivieren error_reporting(E_ALL); # Abschalten, verfaelscht sonst die Quelltextausgabe (nur bei PHP Version < 5.3): #set_magic_quotes_runtime(0); # Name der Projektdatei $datnam='index.php'; #Einige URIs zum persoenlichen Gebrauch $hilfe_uri="http://hoffmann.bplaced.net"; $dasspiel_uri="http://olaf.pytalhost.com/DasSpiel/"; $galerie_uri="http://olaf.pytalhost.com/galerie/"; $dpug_uri="http://prinz-und-gloeckner.pytalhost.com"; $os_uri="http://drohoffmann.gmxhome.de"; # Datum $datum = (date('Y-m-d G:i:s')); # Basisverzeichnis fuer includes $verzeichnis='jooo'; # Basisverzeichnis fuer css $verzcss='./css'; # Der Stil wird angezeigt, wenn kein existierender # ausgewaehlt wurde Ausnahme, wenn die # browserweiche etwas anderes feststellt $startstil='a'; # Die Buchstaben aller Stile ohne den Druckstil p $stilstring='eafmnostuv'; # msie Korrektur einschalten: $msie=TRUE; # Stile angeben: # Immer vorhanden sollte sein: # n - Nichts, kein css # p - Zum Drucken # _ ist reserviert fuer bots, nicht verwenden # weitere vorhandene Stile fuers Menue: $stilname['m']='Minimal'; $stilname['o']='Olafs'; $stilname['s']='Schatten'; $stilname['t']='Test'; $stilname['e']='Elementar'; $stilname['f']='Fraktal'; $stilname['u']='Universum'; $stilname['v']='Verde'; $stilname['a']='Alternativ'; $stilname['n']='Nichts, kein css'; $stilname['p']='Zum Drucken'; # Umbruch der Stilzeile: $stilumbruch=20; ?>
In check.php werden Variablen eingelesen und überprüft. Einige davon stammen per get-Methode vom Nutzer, andere vom server, teils um die Seitenstatistik anzulegen.
<?php # remote_addr ermitteln: if(isset($_SERVER['REMOTE_ADDR'])) { $remad=$_SERVER['REMOTE_ADDR']; } else { if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $remad2=htmlentities($_SERVER['HTTP_X_FORWARDED_FOR']); $remad='noip, '.$remad2; } else { if(isset($_SERVER['HTTP_CLIENT_IP'])) { $remad2=htmlentities($_SERVER['HTTP_CLIENT_IP']); $remad='noip, noxf, '.$remad2; } else { $remad='noip, noxf, noci'; } } } # remote host ermitteln: if(isset($_SERVER['REMOTE_HOST'])) { $remho=$_SERVER['REMOTE_HOST']; } else { $remho=gethostbyaddr($_SERVER["REMOTE_ADDR"]); } # referrer ermitteln: if(isset($_SERVER['HTTP_REFERER'])) { $refer=htmlentities($_SERVER['HTTP_REFERER']); } else { $refer='noref'; } # user-agent ermitteln: if(isset($_SERVER['HTTP_USER_AGENT'])) { $agent=htmlentities($_SERVER['HTTP_USER_AGENT']); #$agent="Harvest"; } else { $agent='noagent'; } # nur aktivieren, um bot-Anzeige zu testen: #$agent="bot"; # nur aktivieren, um netscape4-Filter zu testen: #$agent="Mozilla/4.78"; # Gucken, welcher Inhalt geladen werden soll: if(isset($_GET['in'])) { # wir wollen nicht, dass in andere Verzeichnisse geguckt wird... $in=str_replace('/', '?',$_GET['in']); $statistik=FALSE; } else { $in='start'; $statistik =TRUE; } # Gucken, welches Menue geladen werden soll: if(isset($_GET['me'])) { $me=str_replace('/', '?',$_GET['me']); } else { $me='start'; } # Stil ermitteln: $unstil=0; if(isset($_GET['stil'])) { $stil=$_GET['stil']; $unstil=1; if (($stil=='') or ($stil=='_')){ unset($_GET['stil']); $unstil=0; } } if(!isset($_GET['stil'])) { $stil=$startstil; } # netscape4 rausfiltern, dabei vom msie unterscheiden... $ok1=substr_count(substr($agent, 0, 11), 'Mozilla/4.'); if ($ok1 != '0') { $typ=substr($agent, 10, 11); if (($typ > 0) and ($unstil==0)){ $stil='n'; } } # Suchmaschinen u. ae. Spezialbehandlung verpassen $loweragent=strtolower($agent); $ok3=substr_count($agent, 'Slurp'); $ok3=$ok3+substr_count($agent, 'Harvest'); $ok3=$ok3+substr_count($agent, 'Scooter'); $ok3=$ok3+substr_count($agent, 'LinkChecker'); $ok3=$ok3+substr_count($agent, 'WebStripper'); $ok3=$ok3+substr_count($agent, 'Sleuth'); $ok3=$ok3+substr_count($loweragent, 'archiver'); $ok3=$ok3+substr_count($loweragent, 'combine'); $ok3=$ok3+substr_count($loweragent, 'download'); $ok3=$ok3+substr_count($loweragent, 'bot'); $ok3=$ok3+substr_count($loweragent, 'crawl'); $ok3=$ok3+substr_count($loweragent, 'spider'); $ok3=$ok3+substr_count($loweragent, 'findlinks'); if ($ok3 != '0') { $stil='_'; # Hier sollte man sich jetzt genau ueberlegen, # was man den bots anbietet if ($statistik) { $in='alles'; } } # beim Druckstil den alten Stil rekonstruieren $stiltyp=substr($stil, 0, 1); if ($stiltyp =='p') { if (strlen($stil)=='2') { $stilnr=substr($stil, 1, 1); $stil=$stiltyp; } else { $stilnr=$startstil; $stil=$stiltyp; } if (substr_count($stilstring, $stilnr) !='1'){ $stilnr=$startstil; } # keine msie-Korrektur?... } elseif ($stiltyp =='0') { if (strlen($stil)=='2') { $stilnr=substr($stil, 1, 1); $stil=$stilnr; $msie=FALSE; } else { $stilnr=$startstil; $stil=$stiltyp; } if (substr_count($stilstring, $stilnr) !='1'){ $stilnr=$startstil; } } # Gucken, ob es den Stil wirklich gibt... if (substr_count("_p$stilstring", $stil) !='1'){ $stil=$startstil; } # Stildateien und Stilnamen festlegen... # mit $stildateim kann eine Datei angelegt # werden, in dem Korrekturen von css # Fehlern fuer den msie bis Version 6.99 # angegeben werden koennen. $stildatei="$verzcss/$stil.css"; $stildateim="$verzcss/m$stil.css"; if (!file_exists($stildatei)) { $stildatei="$verzcss/n.css"; } if (!file_exists($stildateim)) { $stildateim="$verzcss/n.css"; } if (!isset($stilname["$stil"])) { $stilnamen='?'; } else { $stilnamen=$stilname["$stil"]; } # Statistik vorbereiten # dies nur fuer diese Demonstration --> $remad='*'; $remho='?'; # Statistik anonymisieren <-- if ($statistik) { $dat=(date('Y.m')); # das log-Verzeichnis muss per chmod die # richtigen Zugriffsrechte bekommen # Schreiben, Lesen, Ausfuehren fuer alle $datei="$verzeichnis/log/$dat" ; $raus = "<tr><td><?php echo \$nri++ ?></td>"; $raus = $raus . "<td>$datum</td><td>$agent</td>"; $raus = $raus . "<td>$remad $remho</td>"; $raus = $raus . "<td>$refer $me:$in:$stil </td></tr>\n"; # Statistikdatei ggf erzeugen und # mit geeigneten Zugriffsrechten versehen... if (!file_exists($datei)) { touch($datei); chmod ($datei, 0666); } # Statistikdatei schreiben... $fp = fopen ($datei, 'a+'); fputs ($fp, $raus); fclose($fp); } ?>
Kopfdaten der XHTML-Ausgabe kopf.php können auch gleich per include eingebunden werden - ist sowieso immer das Gleiche.
<?php # header fuer xhtml senden? # Die Idee ist, wenn der browser ueberhaupt xml kennt, bekommt # er einen richtigen content-type, kennt er immerhin html, bekommt # er den, sonst wird geraten, ob es Netscape4 oder MSIE ist, die # bekommen dann auch text/html, sonst gibt es xhtml. $xhtml=TRUE; $httpheader="Content-type: application/xhtml+xml; charset=iso-8859-1"; $alterbrowser=0; if(isset($_SERVER['HTTP_ACCEPT'])) { if ( strpos($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ) { # nichts zu tun... } else if(strpos($_SERVER["HTTP_ACCEPT"],"application/xml")) { $httpheader="Content-type: application/xml; charset=iso-8859-1"; $xhtml=TRUE; } else if(strpos($_SERVER["HTTP_ACCEPT"],"text/xml")) { $httpheader="Content-type: text/xml; charset=iso-8859-1"; $xhtml=TRUE; } else if(strpos($_SERVER["HTTP_ACCEPT"],"text/html")) { $httpheader="Content-type: text/html; charset=iso-8859-1"; $xhtml=FALSE; } else { # nur wenn gar nichts angegeben ist, raten, ob es # google, netscape4 oder MSIE ist: $alterbrowser=substr_count(substr($agent, 0, 11), "Mozilla/4."); $alterbrowser=$alterbrowser+substr_count(strtolower($agent), "google"); if ($alterbrowser != "0") { $httpheader="Content-type: text/html; charset=iso-8859-1"; $xhtml=FALSE; } } header($httpheader); } echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?> \n"; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de"> <head>
Wer die XML-Zeile haben möchte, gibt die besser per echo aus, da auf einigen
servern short-tags aktiviert sind und der php-parser da dann was mißverstehen täte.
Im Anschluß können dann auch noch individuelle Seitentitel eingebunden werden. Wenn
eine gleichlautende Datei wie die spätere Inhaltsdatei fehlt, wird ein vorgegebener Titel
ausgegeben. Das Gleiche gilt für meta-Elemente. Die betreffenden Dateien zur Inhaltsdatei, die
mit der Variable $in angesprochen wird, werden in
$verzeichnis/titel/$in beziehungsweise $verzeichnis/meta/$in gesucht und soweit vorhanden
statt des Projektseitentitels eingebunden.
Spannender ist dann schon die Datei headlink.php. Neben einigen üblichen Angaben gibt es
hier die verschiedenen Stildateien an- und auszugeben. Diese werden dann auch im Stilvorlagenmenü
des browsers angegeben. Dazu können per link-Element ebenfalls für
wichtig gehaltene URLs
angegeben werden bis hin zu einem kompletten Inhaltsverzeichnis, welches
dann von geeigneten browsern in einem extra link-Menü angegeben wird.
Die Zeile, die mit "echo "<!--[if lte IE 6.99]>" beginnt, dient dazu, eine
CSS-Datei als Kommentar anzugeben, in der Korrekturen für den microsoft internet-explorer (msie)
bis Version 6.99 enthält. Dessen CSS-Unterstützung ist teilweise so mangelhaft, daß
es bei seiner immer noch häufigen Verwendung sinnvoll ist, dies bei Bedarf zu tun, um den
Inhalt zugänglich zu halten. Im Gegensatz zu netscape4 ist die CSS-Interpretation vom msie
immerhin bereits so weit gediehen, daß es sich lohnt, geeignet aufbereitetes CSS anzubieten.
<link rel="bookmark" href="<?php echo $dasspiel_uri ?>" title="DasSpiel 1.0 - Das Spiel 0.9" /> <link rel="bookmark" href="<?php echo $galerie_uri ?>" title="Dr. O. Hoffmann: Galerie privater Photographien" /> <link rel="bookmark" href="<?php echo $hilfe_uri ?>" title="Dr. O. Hoffmann: Mehr vom Autor dieser Seite" /> <link rel="bookmark" href="<?php echo $dpug_uri ?>" title="Der Prinz und der Gloeckner: Kunst und Literatur" /> <link rel="bookmark" href="<?php echo $hilfe_uri ?>/hilfe.php" title="Hilfe zur internet Projektgestaltung, CSS, XHTML, SVG, PHP" /> <link rel="bookmark" href="index.php" title="Minimales Projekt mit XHTML, CSS, PHP" /> <link rel="first" href="<?php echo "$datnam?me=start&in=start&stil=$stil"; ?>" title="Start" /> <link rel="copyright" href="<?php echo "$datnam?me=start&in=kontakt&stil=$stil"; ?>" title="Kontakt" /> <link rel="section" href="<?php echo "$datnam?me=start&in=aufbau&stil=$stil"; ?>" title="Aufbau" /> <link rel="chapter" href="<?php echo "$datnam?me=quelltexte&in=projektseite&stil=$stil"; ?>" title="Projektseite" /> <link rel="section" href="<?php echo "$datnam?me=quelltexte&in=projektkopf&stil=$stil"; ?>" title="Kopfdaten" /> <link rel="section" href="<?php echo "$datnam?me=quelltexte&in=projektinhalt&stil=$stil"; ?>" title="Inhalt" /> <link rel="section" href="<?php echo "$datnam?me=quelltexte&in=projektmenue&stil=$stil"; ?>" title="Menue" /> <link rel="chapter" href="<?php echo "$datnam?me=css&in=cssdateien&stil=$stil"; ?>" title="css-Dateien" /> <link rel="section" href="<?php echo "$datnam?me=css&in=csss&stil=$stil"; ?>" title="Stil S" /> <link rel="section" href="<?php echo "$datnam?me=css&in=cssu&stil=$stil"; ?>" title="Stil U" /> <link rel="section" href="<?php echo "$datnam?me=css&in=cssv&stil=$stil"; ?>" title="Stil V" /> <link rel="section" href="<?php echo "$datnam?me=css&in=csso&stil=$stil"; ?>" title="Stil O" /> <link rel="section" href="<?php echo "$datnam?me=css&in=csst&stil=$stil"; ?>" title="Stil T" /> <link rel="section" href="<?php echo "$datnam?me=css&in=cssd&stil=$stil"; ?>" title="Stil P" /> <link rel="section" href="<?php echo "$datnam?me=start&in=verweise&stil=$stil"; ?>" title="Verweise" /> <link rel="help" href="<?php echo "$datnam?me=start&in=hilfe&stil=$stil"; ?>" title="Hilfe" /> <?php if ($stil != "_") { ?> <link rev="made" href="mailto:dr.o.hoffmann@gmx.de" title="email an den Autor" /> <?php echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"$stildatei\" title=\"Auswahl: $stilnamen\" media=\"screen\" /> \n"; # msie Korrektur? if ($msie) { echo "<!--[if lte IE 6.99]><link rel=\"stylesheet\" type=\"text/css\" href=\"$stildateim\" media=\"screen\" /><![endif]--> \n"; } if ($stil=="p") { echo "<link rel=\"prev\" href=\"$datnam?&me=$me&in=$in&stil=$stilnr\" title=\"Vorheriger Stil\" media=\"screen\" /> \n"; } else { foreach ($stilname as $key => $value) { echo "<link rel=\"alternate stylesheet\" type=\"text/css\" href=\"$verzcss/$key.css\" title=\"$key: $value\" media=\"screen\" /> \n"; } } } echo "<link rel=\"stylesheet\" type=\"text/css\" media=\"print\" href=\"$verzcss/p.css\" title=\"p: Zum Drucken\" /> \n"; ?> <link rel="shortcut icon" href="favicon.ico" />