header
home news rumors macs iphone ipod ipad
monatsarchiv Podcast [iTunes-Abo] Videocast [iTunes-Abo] Apple-Feeds the lost 1984 videos
Die Medien über uns Wir über uns Mit uns werben Redaktions-E-Mail


frischer mac-senf iPhone Reparatur zu I hope you don't mind...
kalli zu I hope you don't mind...
thomas b. zu So Long Mac Essentials
Jens Krahe zu So Long Mac Essentials
Hendrik Beskow zu So Long Mac Essentials


 

::: 15. Januar 2006

 Homepagebau für Faule und Clevere [6]   Ein PHP-Workshop für Einsteiger von Paul Harth

Hier folgt nun - nach einer längeren Pause - der sechste Teil des »PHP-Workshops für Einsteiger« von Paul Harth. Dieses Tutorial bezieht natürlich nicht alle Möglichkeiten der HTML-Programmierung ein - wir konzentrieren uns stattdessen auf PHP-Tricks, die man ohne grosse Vorkenntnisse und Erklärungen sofort anwenden kann, um sich Zeit und Arbeit zu ersparen. Das Ganze funktioniert allerdings nur auf einem Webserver - also per FTP auf einen solchen hochladen oder sich mit dem kostenlosen und einfachst zu installierenden MAMP (Macintosh, Apache, Mysql und PHP) von Webedition eine eigene Serverumgebung einrichten.

Alle Teile des PHP-Workshops findet man nun in einer eigenen Rubrik über den Kategorienwähler in der linken Menüleiste.  Die Dokumente für diesen Workshop gibt es hier als Archiv.

imageTeil 6: Kompatible Integration

Die im Teil 5 vorgestellte Funktion zur dynamischen Integration von Webseiteninhalten ist - wie wir gesehen haben - sehr praktisch. Sie funktioniert aber nur, wenn die PHP-Version, die sich auf dem Server befindet, dieses auch unterstützt. Dazu muss register_globals on erlaubt sein, d.h., Variablen sind im ganzen Programm sichtbar. Oft ist register_globals aber aus Sicherheitsgründen ausgeschaltet - für diesen Fall zeigen wir ein anderes Verfahren mit automatisch globalen Variablen.

Die PHP-Version kann man übrigens sehr einfach feststellen: man legt auf dem Server eine neue Datei an - z.B. info.php - und trägt den folgenden Befehl ein:

<?PHP
phpinfo();

Beim Aufruf mit dem Browser (z.B. http://deine.domain/info.php) bekommt man nun detailierte Informationen über die Konfiguration der verwendeten PHP-Version.

In unserem folgenden Beispiel gehen wir einen Schritt weiter: wir fragen den Server, welche Konfiguration er hat, und reagieren je nach Antwort darauf. Ist register_globals eingeschaltet, dann wählen wir Plan A, falls nicht, dann nehmen wir Plan B.

Werbung

Plan A: register_globals ON
Also los: um herauszufinden, ob PHP mitregister_globals läuft oder nicht, benutzen wir folgende Abfrage:

if (!ini_get("register_globals")) {
}

Übersetzt bedeutet das ungefähr: »Guck mal in die Initalisierungsdatei von PHP, ob register_globals nicht erlaubt ist« - das Ausrufezeichen ! bedeutet »nicht«. Zwischen den Klammern { } können wir dann PHP-Code einsetzen, der nur im Falle von register_globals off ausgeführt werden soll, wenn also register_globals in der vorhandenen PHP-Version nicht erlaubt ist. 

Nun benötigen wir natürlich noch etwas für den Fall von register_globals on - die PHP-Version erlaubt register_globals. Das lösen wir ganz einfach so: mit der else-Abfage (»oder« bzw. »wenn nicht«) in folgender Form:

else {
}

Also im Klartext: Wenn register_globals nicht läuft, dann tue das, was in den Klammern der if-Schleife steht, andernfalls tue das, was in der else-Schleife steht.

In Teil 5 des Workshops hatten wir schon besprochen, wie wir dynamische Inhalte einsetzen. Wie wir am Anfang dieses Workshopteils gesehen haben, funktioniert das nur, wenn register_globals erlaubt ist, also auf ON gesetzt ist. Genau das haben wir eben abgefragt - also setzen wir den Code aus Teil 5 des Workshops hier ein:

if (!ini_get("register_globals")) {
}

else {
if (!isset($seite) OR !file_exists("inhalte/inhalt_”.$seite.".php")) { $seite = “index”; }
$inhalt = “inhalte/inhalt_”.$seite.".php";
}
include ($inhalt);

OK - das war unser Plan A, der aber wie gesagt nur funktioniert, wenn register_globals ON ist.  Jetzt fehlt noch die Anweisung für den Fall, daß register_globals ausgeschaltet, also OFF ist - was aus Sicherheitsgründen anzuraten ist. In diesem Fall würde die automatische Übernahme von Werten in globale Variabeln verhindert, und unsere schöne Konstruktion funktioniert nicht.

Die Lösung für dieses Problem heißt $_REQUEST[’name_der_wertvariable’].$_REQUEST ist eine »superglobale« oder »automatisch globale« Variable. Das bedeutet, daß die Variable in allen sichtbaren Bereichen eines Skripts verfügbar und nutzbar ist - die Wirkung ist also dieselbe wie im vorherigen Fall, auch wenn register_globals auf OFF steht. Und das ist unser Plan B.

Plan B: register_globals OFF
In diesem Fall sieht die Anforderung zum Integrieren des dynamischen Inhalts per $_REQUEST folgendermaßen aus:

if (!isset($_REQUEST[’seite’]) OR !file_exists("inhalte/inhalt_”.$_REQUEST[’seite’].".php")) { $inhalt = “inhalte/inhalt_index.php”; }
else { $inhalt = “inhalte/inhalt_”.$_REQUEST[’seite’].".php"; }

Wenn man genauer hinsieht, merkt man, daß die Struktur der Anweisung dieselbe ist wie in Plan A - nur steht mehrmals die Anweisung $_REQUEST darin. Wir wissen nun auch warum: wir benutzen automatisch globale Variablen. 

Jetzt müßen wir diese Anweisung nur noch am richtigen Platz einfügen:

if (!ini_get("register_globals")) {
    if (!isset($_REQUEST[’seite’]) OR !file_exists("inhalte/inhalt_”.$_REQUEST[’seite’].".php")) { $inhalt = “inhalte/inhalt_index.php”; }
    else { $inhalt = “inhalte/inhalt_”.$_REQUEST[’seite’].".php"; }
    }

else {
    if (!isset($seite) OR !file_exists("inhalte/inhalt_”.$seite.".php")) { $seite = “index”; }
    $inhalt = “inhalte/inhalt_”.$seite.".php";
    }

include ($inhalt);

Die Version mit $_REQUEST hat den Vorteil, daß sie immer funktioniert: wenn PHP register_globals nicht unterstützt, aber auch, wenn das Gegenteil der Fall ist - wenn register_globals ON ist. Die if - else Schleife auf register_globals ist also zur korrekten Funktion nicht unbedingt notwendig - sie hat in diesem Fall aber das Abfragen von Servereinstellungen mit PHP verdeutlicht.

Für unsere Zwecke reicht es aber vollkommen aus, wenn wir nur die Anweisung für register_globals off verwenden, da diese wie gesagt auchin beiden Fällen funktioniert.  Unsere Seite index.php müßte nun folgenden Inhalt haben:

<?php
// Globale Eigenschaften werden geladen
include("data/settings.php");

// Seitenkopf wird geladen
include("layout/header.php");

// Tabelle fuer den Body und Spalte fuer Navigation wird geoeffnet
include("layout/body_1.php");

// Vertikale linke Navigation wird geladen
include("layout/navigation.php");

// Spalte fuer Navigation wird geschlossen und Spalte fuer Inhalt geoeffnet
include("layout/body_2.php");

// Funktion fuer den Aufruf der Seiteninhalte
if (!isset($_REQUEST[’seite’]) OR !file_exists("inhalte/inhalt_”.$_REQUEST[’seite’].".php"))
    {
    $inhalt = “inhalte/inhalt_index.php”;
    }

else
    {
    $inhalt = “inhalte/inhalt_”.$_REQUEST[’seite’].".php";
    }
include ($inhalt);

// Spalte fuer Inhalt und Bodytabelle werden geschlossen
include("layout/body_3.php");

// Seitenfuss wird geladen
include("layout/footer.php");

Im nächsten Teil werden wir die Integration der dynamischen Seiten mittels mod_Rewrite noch etwas verfeinern.

15.01.06 - 13:00 Uhr von Redaktion | Permalink | Rubrik Reviews und Tests  - PHP-Workshop  | 0 Kommentar(e), 807x besichtigt | IRC-Chat | E-Mail an die Redaktion |
RSS 2.0 Atom Podcast Add to Google
Werbung
Apple Store iPhone Store iPod Store iTunes Store Amazon Store

Werbung

Der Macintosh ist katholisch: das Wesen der Offenbarung wird in einfachen Formeln und prachtvollen Ikonen abgehandelt. Jeder hat das Recht auf Erlösung.
(Umberto Eco)

I don't do .INI, .BAT, or .SYS files. I don't assign apps to files. I don't configure peripherals or networks before using them. I have a computer to do all that. I have a Macintosh, not a hobby.
(Fritz Anderson)


Mir doch Blunzn, was für ein Prozessor drin ist, solange ein Apple drumrum ist!
(Jacqueline Godany)


Ich bin ein Bewohner des digitalen kleinen gallischen Dorfs. Ein Mac-User. Ich habe ein Betriebssystem, das nach einem Raubtier benannt ist, nicht nach einem Rind.
(Peter Glaser)

To this technical-ninny it’s clear
In my compromised 100th year,
That to read and to write
Are again within sight
Of this Apple iPad pioneer
(Virginia Campbell, 100 Jahre)


Never ask a man what kind of computer he drives. If its a Mac, he'll tell you. If not, why embarrass him?
(Tom Clancy)

It is true that I have a great admiration for the elegances and brilliances that have emerged from my favourite address in the world: 1 Infinite Loop, Cupertino, California, the home of Apple Computers.
(Stephen Fry)

The Macintosh may only have 10 5 3 2,5 3 5 % of the market, but it is clearly the top 10 5 3 2,53 5 %!
(Douglas Adams)


Mac Essentials - a place for news and conversation.