Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 6 HTTP
  gp 6.1 HTTP
  gp 6.2 HTTP_Header
    gp 6.2.1 Cache-Steuerung
  gp 6.3 HTTP_Request
  gp 6.4 HTTP_Download
  gp 6.5 HTTP_Upload
  gp 6.6 HTTP_Session


Rheinwerk Computing

6.2 HTTP_Header  downtop


Besprochene Version: 1.1.1 Lizenz: PHP-Lizenz
Klassendatei(en): HTTP/Header.php; HTTP/Header/Cache.php

Mit HTTP_Header haben Sie die Möglichkeit, einen http-Header relativ elegant und umfassend zu beeinflussen. Leider verhindert auch dieses Paket nicht, dass Sie sich für etwas individuellere Bedürfnisse mit dem Aufbau des http-Protokolls auseinander setzen müssen. Des Weiteren sind einige Methoden zum Analysieren von Header-Inhalten vorgesehen, die in Kombination mit Klassen sehr hilfreich sind.

Das Paket ist in den Dateien HTTP/Header.php und HTTP/Header/Cache.php definiert und erbt die Methoden und Eigenschaften der Klasse PEAR::HTTP.

Wie auch schon im Paket HTTP ist hier eine statisch nutzbare Methode namens redirect() implementiert, die den Client weiterleitet. Um eine einfache Weiterleitung zu initiieren, ist die Methode des Pakets HTTP völlig ausreichend und sollte auch genutzt werden. Die Variante aus HTTP_Header ist allerdings noch ein wenig flexibler. Sie akzeptiert neben dem Weiterleitungsziel noch zwei weitere Parameter. Als ersten können Sie ein assoziatives Array angeben, das dann als Query-String an die Ziel-Adresse angehängt wird. Danach können Sie – wenn Sie mit einer Session arbeiten – mit einem true dafür sorgen, dass die Session-ID auch noch Teil des Query-Strings wird.

require_once('HTTP/Header.php'); 
session_start(); 
 
$dat = array( 
             "name" => "Paulsen", 
             "id" => "12" 
             ); 
HTTP_Header::redirect("loeschen.php",$dat,true); 
 
//Generierte URL koennte z. B. so lauten (Session-ID gekuerzt): 
//loeschen.php?PHPSESSID=ece6f0e4056527da01&name=Paulsen&id=12

Um einen komplexeren Header zu senden, benötigen Sie ein HTTP_Header-Objekt, das Sie dann mit den gewünschten Werten »bestücken« und senden können.

Die http-Version kann mithilfe der Methode setHttpVersion() festgelegt werden. Sie akzeptiert entweder die Werte 1, 1.0 oder 1.1 als Parameter. Um andere Elemente des Headers beeinflussen zu können, steht die Methode setHeader() zur Verfügung. Sie bekommt typischerweise zwei Parameter übergeben. Neben dem http-Feld-Namen wird als zweiter Parameter der dazugehörige Wert übergeben. Das Caching-Verhalten mithilfe der Pragma-Direktive zu beeinflussen könnte so aussehen:

$myHeader->setHeader("pragma","no-cache"); 
$myHeader->sendHeaders();

Eine besondere Stellung nimmt der Last-Modified-Header ein, mit dem einem Client mitgeteilt wird, wann das Dokument zuletzt geändert wurde. Übergeben Sie diesen Header an die Methode, können Sie den Zeitpunkt der letzten Änderung als Timestamp übergeben. Übergeben Sie keinen Wert, übernimmt die Methode den aktuellen Timestamp und gibt ihn als Datum der letzten Änderung aus. Die Methode sendHeaders() schickt den bzw. die Header zum Client. Sollte das nicht möglich sein, weil schon Header versandt wurden, gibt sie false zurück.

Zu diesen beiden set-Funktionen existieren auch Umkehrfunktionen, mit denen Sie die Versionsnummer und andere Header aus einem bestehenden Objekt auslesen können. Sie heißen getHtttpVersion()und getHeader(). Die erste bekommt keinen Wert übergeben und die zweite nur den Namen des Headers, der ausgelesen werden soll.

Um einen Status-Code an den Client zu schicken, können Sie auf die Methode sendStatusCode() zurückgreifen. Sie bekommt die Nummer des gewünschten Codes als String übergeben und schickt ihn direkt zum Client. Auch sie liefert false zurück, wenn die Header bereits verschickt wurden. Die Zeile

$myHeader->sendStatusCode("404");

teilt dem Browser mit, dass die angeforderte Datei nicht gefunden werden konnte.

Um den Umgang mit Status-Codes zu vereinfachen, sieht das Paket einige Methoden vor, die zur Analyse eines solchen Codes dienen.


Tabelle 6.4 Methoden zum Testen des Status-Codes
Methode Erläuterung
isClientError() Prüft, ob ein Client-Error vorliegt (4XX-Fehler).
isServerError() Liefert true, wenn ein Server-Error vorliegt (5XX-Fehler).
isError() Testet auf einen Fehler (Server oder Client) (4XX- und 5XX Fehler).
isInformational() Stellt fest, ob es sich nur um eine Information handelt (1XX-Codes).
isRedirect() Bestätigt, dass ein Redirect vorliegt (3XX-Codes).
isSuccessful() Prüft, ob der Code Erfolg bestätigt (2XX-Codes).

In diesem Zusammenhang sind auch getStatusType() und getStatusText() hilfreich. Sie liefern den Typ eines übergebenen Codes, also z. B. 3 oder 4 bzw. den Text, der den Fehler erläutert, zurück.

require_once('HTTP/Header.php'); 
 
$code="404"; 
 
$myHeader = new HTTP_Header(); 
 
if (true===$myHeader->isError($code)) 
{ 
   echo "Fehlerbeschreibung: "; 
   // Gibt "File Not Found" aus 
   echo $myHeader->getStatusText($code); 
   echo "<br />Typ des Fehlers: "; 
   // Gibt 4 aus 
   echo $myHeader->getStatusType($code); 
}

Rheinwerk Computing

6.2.1 Cache-Steuerung  toptop

Es ist recht einfach, eine Anleitung zu finden, wie Sie einen Client davon abhalten, eine Datei im Cache zu halten. Allerdings ist es ein wenig aufwändiger, den Client davon abzuhalten, eine Seite erneut anzufordern, wenn er sie bereits im Cache hält. Ein erneutes Abrufen der Seite kann häufig vermieden werden, und dadurch können Rechenzeit und Traffic eingespart werden. Ein ganz einfacher Anwendungsfall könnte so aussehen:

require_once 'HTTP/Header/Cache.php'; 
$header = new HTTP_Header_Cache(1,'days'); 
$header->sendHeaders(); 
//Code der eigentlichen Seite

In diesem Fall wird festgelegt, dass die Datei einen Tag gültig sein soll. Der Konstruktor bekommt die Information übergeben, wie lange die Datei gecacht werden darf. Der erste Parameter definiert die Länge und der zweite die dazugehörige Zeiteinheit. Geben Sie den zweiten Wert nicht an, geht das System automatisch von Sekunden aus. Neben days (für Tage) können Sie auch weeks (Wochen), hours (Stunden) oder minutes für Minuten angeben. Der Konstruktor leistet dann auch gleich die eigentliche Arbeit. Er wertet den IF_MODIFIED_SINCE-Header aus, den er vom Client übergeben bekommt. Hiermit teilt der Client mit, ob er bereits eine Kopie dieser Datei im Cache hat bzw. wie alt diese ist. Ist die Kopie älter als die Vorgabe, die Sie definiert haben, passiert nichts weiter, und das Script wird normal ausgeführt. Ist die Kopie allerdings so neu, dass sie innerhalb des vorgegebenen Akzeptanzbereichs liegt, beendet der Konstruktor das gesamte Script und schickt den http-Code »304 – Not Modified« an den Client. Somit kann es passieren, dass der Rest Ihres Scripts nicht weiter ausgeführt wird, was Sie bei der Arbeit mit diesem Paket im Hinterkopf behalten sollten.

Ist die Kopie des Clients schon »überlagert« oder handelt es sich um eine Seite, die auf Daten basiert, die via POST übergeben wurden, so wird ein HTTP_Header_Cache-Objekt mit den übergebenen Informationen bestückt und zurückgegeben. Um die dort enthaltenen Informationen dann an den Client zu senden, ist die Methode sendHeaders() vorhanden. Danach kann dann der eigentliche Code der Seite folgen. Zwar kennt die Klasse noch mehr Methoden; da es sich hierbei aber primär um Hilfsmethoden handelt, die dazu dienen, dem Konstruktor die Arbeit zu ermöglichen, verzichte ich darauf, sie zu erläutern.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de