copyright (c)  2003   useGroup
PHP

Jochen Stärk
PHP-Tutorial
Ausgabefunktionen und Authentifizierung

nach untenEcho
nach untenKurzform von Echo
nach untenHeader
nach untenWWW-Authenticate
nach untenDie Mail-Funktion

Echo

nach obenEcho  echo STRING; oder echo (STRING);

"echo" ist die Standardausgabefunktion von PHP. Echo gibt es in zwei Geschmacksrichtungen: einmal als "language construct" wie

echo "hallo welt";
und einmal funktionsähnlich wie
echo ("hallo welt");
. Beide Funktionen bewirken dasselbe, eine Ausgabe in den Browser des benutzers. Wie in Was ist PHP erwähnt, können auch HTML Tags ausgegeben werden.

Zur Ausgabe von Sonderzeichen (wie: neue zeile (im HTML-Quelltext, die Ausgabe an "strategisch wichtigen Stellen", z.B. einer neuen Tabellenzeile ist zu empfehlen, da dann der ausgegebene Quelltext einfacher lesbar ist.), Backslashes, Dollarzeichen und Gänsefüßchen) lesen Sie bitte Arbeiten mit Strings

Ausgabe von Variablen

Variablen werden mit dem Dollarzeichen gekennzeichnet (siehe Variablen) und die Ausgabe erfordert keine speziellen Befehle. echo $i; gibt z.b. die Variable i aus, echo "$i"; tut -Gott sei dank- dasselbe, so bleiben Ausgaben wie "Sie sind der $i te Besucher" übersichtlich. (Ausgabe z.B. "Sie sind der 5 te Besucher")

Anfügen von Strings

Wie in Arbeiten mit Strings beschrieben werden Strings in PHP mit "." aneinandergereiht. Soll der i-te Besucher etwa kein Abstand nach seiner Nummer sehen ist man zu einem Trick gezwungen: da echo "Sie sind der $ite Besucher" nach einer -nicht vorhandenen - Variable namens ite suchen würde verwendet man entweder
echo "Sie sind der ";
echo $i;
echo "te Besucher";
oder das kürzere
echo "Sie sind der ".$i."te Besucher";
Wird an das Ende des Strings "Sie sind der " der String (die Variable $i wird hier als String aufgefasst) $i (Wert z.B. 5) angehängt, an die direkt der String "te Besucher". angehängt wird.


Kurzform von Echo

nach obenKurzform von Echo 

Eine Kurzform von Echo binden Sie mit

<?=$VARIABLENNAMEN?>
in Ihre PHP-Dateien ein. Das funktioniert allerdings nichtb bei jedem Presence Provider.


Header

nach obenHeader  Header (NEUER HEADER);

funktioniert zwar nur am Ausgabenanfang (es darf kein HTML-Quelltext vor der Header-Anwesinung stehen und es darf kein echo erfolgt sein: nicht einmal das Einbinden von Dateien mit Include oder eine Leerzeile darf vor dem PHP-Tag stehen), ist aber ziemlich nützlich. Zum Einen kann man dadurch den Benutzer automatisch zu einer anderen Datei umleiten, zum Anderen erfüllt es Aufgaben, ohne die eine (genormte) Authentifizierung des Benutzers gar nicht möglich wäre.

Header-Ausgaben erfolgen i.d.R. für den Anwender unsichtbar und erscheinen auch nicht in der HTML-Datei.

Umgeleitet wird mit:

<?php
header("Location: http://www.php.net");  
exit;  /* Um keinen weiteren Code dieser Seite auszuführen */
?>
die PHP-Tags habe ich als Erinnerung angeben, sie auf jeden Fall an den Anfang der Datei zu setzen.
<?php

header("http/1.0 404 Not Found");
?>
Gehört eher zum bereich Spielerei solange man vorher nicht authentifiziert und
<?php
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");             // Zeitpunkt in der Vergangenheit
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // immer geändert
  header("Cache-Control: no-cache, must-revalidate");           // HTTP/1.1
  header("Pragma: no-cache");                                   // HTTP/1.0
?>
(Quelle: PHP-Manual) ist gut um eine Aufnahme in den Browsercache oder Proxycache zu verhindern.


WWW-Authenticate

nach obenWWW-Authenticate 

Der WWW-Authenticate-Header ist im Grunde nur ein Spezialfall eines Headers (funktioniert nur im Linux-Apache ohne Probleme), ruft aber im Browser folgende wahrscheinlich bekannte Dialogbox auf:

Screenshot einer Standartauthorisierung

<?php
  if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic realm=\"Mein Bereich\"");
    Header("HTTP/1.0 401 Unauthorized"); //auf diese Seite wird der User geschickt wenn er sich falsch authorisiert.
    Header("Location: canceled.php");  //auf diese Seite wird der User geschickt wenn er den Cancel-Button klickt.
    exit;
  } else {
    echo "Hallo User $PHP_AUTH_USER mit Passwort $PHP_AUTH_PW.";
  }
?>
Sowohl der Benutzer als auch der Programmierer hat von dieser Standartmethode einige Vorteile: Die Variablen $PHP_AUTH_USER und $PHP_AUTH_PW werden nämlich von Browser auf jeder Folgeseite zur Verfügung gestellt; der Programmierer kann dieselbe Abfrage vor jede zu schützende Datei stellen und muss sich nicht darum kümmern, die Variable ständig weiter zu geben (das erledigt der Browser des Anwenders); der User braucht sich nur einmal einzuloggen (und es ist egal, bei welcher Datei) und kann eventuell vorhandene Passwortmanagementfunktionen des Browsers nutzen.

Dass diese Authorisierung erst richtig Spaß macht, wenn man die Benutzerdaten mit einer Datenbank abgleicht, sollte klar sein (erst dann kann man Möglichkeiten von PHP gegenüber einer einfachen .htaccess Zugriffsbeschränkung ausspielen), auch der Weg ist unglaublich einfach (einfache eine mysql_query auf Select password where user='$PHP_AUTH_USER' ausführen, in etwa so:

  if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic realm=\"Mein Bereich\"");
    Header("HTTP/1.0 401 Unauthorized"); //auf diese Seite wird der User geschickt wenn er sich falsch authorisiert.
    Header("Location: canceled.php");  //auf diese Seite wird der User geschickt wenn er den Cancel-Button klickt.
    exit;
  } else { // Benutzername und Passwort liegen vor
    $res=mysql_db_query ("testdb","select password from users where user='$PHP_AUTH_USER'");
    $num=mysql_num_rows($res);
    if ($num==0)/* kein treffender Datensatz*/    
    {
      Header("HTTP/1.0 401 Unauthorized");
      exit;
    } 
    echo "Hallo User $PHP_AUTH_USER mit Passwort $PHP_AUTH_PW.";
  }

Das ist eine ziemlich professionelle Methode, seinen Administartionsbereich zu schützen, weil alle Browser (bspw. IE, Netscape, Mozilla, Opera) solche Authorisierungen unterstützen.

Zwei Dinge noch: Da es Header-Kommandos sind, müssen Sie immer am Anfang der Ausgabe gesendet werden (es darf nicht einmal ein Leerzeichen vor dem <?php stehen) und das macht auch die Einbindung per Include etwas tricky.

Zum Anderen: Vergessen Sie die Zeilen in keiner Datei: Wenn Sie eine Passwortgeschützte Datei verwalte_artikel.php haben aber verwalte_user.php diese Abfrage NICHT hat kann sich jeder bequem zuerst die Rechte geben und dann die Artikel verändern. Ausserdem sehen Sie im Browser ja nicht in welcher Datei Sie die Zeilen vergessen haben könnten, weil Sie ja nur einmal die Aufforderung zum Login erhalten.


Die Mail-Funktion

nach obenDie Mail-Funktion 

Mailen geht in PHP einfach mit

mail("Empfänger","Betreff","Nachricht");


Aber: Ein vierter Parameter ist möglich und gibt die "Extras" an, wie Absenderadresse, Reply-To-adresse oder Kopienempfänger. Reply-To auf den Absender zu setzen ist eine gute Idee, weil man dann im Mailprogramm nur auf Antworten zu klicken braucht um dem Absender auch tatsächlich eine Mail zu schreiben -- ansonsten schickt man die Antwort einem Standardempfänger.
    mail("vetterheinz@provinz.de", "$betreff", $message, "From: $email\nReply-To: $email\nX-Mailer: PHP/" . phpversion(). "\nCC: sie@provider.de");


copyright (c)  2003   useGroup