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

6 HTTP

Da das http-Protokoll naturgemäß sehr oft für die Kommunikation zwischen Client und Server benötigt wird, sind in diesem Bereich auch viele Pakete angesiedelt. Einige vereinfachen den direkten Zugriff auf Funktionalitäten des Protokolls, so dass Sie nicht auf die header()-Funktion von PHP zurückgreifen müssen. Andere stellen nur ein objektorientiertes Interface für PHP-interne Funktionen zur Verfügung.

Das http-Protokoll ist ein »Klartext-Protokoll«. Die Informationen und Befehle werden also nicht verschlüsselt übertragen. Das hat den Vorteil, dass Sie als Entwickler mit einem Packet-Sniffer wie z. B. Ethereal [Ethereal ist unter http://www.ethereal.com erhältlich. ] oder mit einem Telnet-Programm, das Sie mit Port 80 des Servers verbinden, recht einfach mitlesen können, welche Daten ausgetauscht werden. Für eine Erläuterung der Befehle ist es am sinnvollsten, RFC 2616 zu lesen. [RFC 2616 finden Sie z. B. unter http://www.faqs.org/rfcs/rfc2616.html. ]

Zum Austausch von Status-Informationen werden innerhalb des Protokolls verschiedene Status-Codes genutzt. Die wichtigsten Codes finden Sie in Tabelle 6.1. Eine Liste der wichtigsten Codes mit einer ausführlichen Erläuterung der Bedeutung finden Sie im RFC.


Tabelle 6.1 Einige der wichtigsten http-Codes
Code Bedeutung
200 OK: Die Anfrage war erfolgreich, und der Server verschickt die gewünschte Datei.
204 No Content: Die Anfrage war erfolgreich, aber der Server verschickt kein neues Dokument. Der Client sollte die Ansicht nicht ändern.
205 Reset Content: Die Anfrage war erfolgreich, und der Client soll das dargestellte Dokument »resetten«, also z. B. den Inhalt eines Formulars löschen.
301 Moved Permanently: Die Datei wurde dauerhaft verschoben. Danach soll eine Weiterleitung des Clients erfolgen. Der Client soll, wenn er die Möglichkeit unterstützt, zukünftig die neue URL nutzen.
304 Not Modified: Der Inhalt des Dokuments hat sich nicht geändert. Der Server darf in diesem Fall kein Dokument verschicken.
400 Bad Request: Die Anfrage an den Server war syntaktisch nicht korrekt oder war aus anderen Gründen unverständlich.
401 Unauthorized: Die gewünschte Datei ist durch ein Passwort geschützt.
403 Forbidden: Der Server hat die Anfrage akzeptiert, kann sie aber nicht erfüllen, weil der Zugriff verboten ist.
404 Not Found: Die gewünschte Ressource konnte nicht gefunden werden.
405 Method Not Allowed: Die genutzte Methode (GET, POST, HEAD etc.) wird vom Server nicht akzeptiert.
500 Internal Server Error: Bei der Verarbeitung der Anfrage ist ein unerwarteter, interner Fehler aufgetreten.
503 Service Unavailable: Der Server ist gerade überlastet, wird gewartet oder kann aus anderen Gründen vorübergehend nicht auf Anfragen antworten.

Wie Ihnen in Tabelle 6.1 vielleicht aufgefallen ist, beginnen unterschiedliche »Code-Klassen« jeweils mit einer anderen Zahl. Codes, die mit einer 1 beginnen, werden als »Informational« bezeichnet. Sie dienen einfach nur der Information des Clients, ziehen aber keine weitergehende Aktion nach sich. Die 2XX-Codes bestätigen einen erfolgreichen Zugriff des Clients. Ein Code, der mit einer 3 anfängt, teilt dem Client mit, dass er weitergeleitet wird. Die 4XX- und 5XX-Codes sagen aus, dass ein Fehler aufgetreten ist. Die 4er-Klasse sind Fehler, die vom Client ausgehen, und bei den 5XX-Codes handelt es sich um serverseitige Fehler.

Bevor Daten zu einem Client übertragen werden, bekommt der Client die Information, um welche Art von Datei es sich handelt und wie diese Datei zu handhaben ist. Dies wird dem Empfänger mithilfe des MIME-Types mitgeteilt. Da MIME-Types nicht in Form von Konstanten oder Variablen definiert sind, müssen Sie sie von Hand eingeben. Ein MIME-Type setzt sich immer aus einem Content-Type und einem Subtype zusammen. Der Content-Type einer HTML-Datei ist text, da es sich um eine reine Text-Datei handelt. Ein MS-Word-Dokument gehört hingegen zum Content-Type application, da es nicht vom Browser, sondern mit einem externen Programm geöffnet wird. Innerhalb des Content-Types wird dann noch eine große Anzahl von Untertypen unterschieden. Im Fall einer HTML-Datei ist der Untertyp html, der direkt nach text, abgetrennt durch einen Slash, anzugeben ist. Somit ergibt sich text/html und für ein Word-Dokument application/msword. Ein paar häufig benötigte MIME-Types habe ich in Tabelle 6.2 zusammengestellt. Eine komplette Liste aller Typen finden Sie bei der IANA. [http://www.iana.org/assignments/media-types/ ]


Tabelle 6.2 Die wichtigsten MIME-Types
MIME-Type Datei-Art
application/msword Microsoft Word-Dokument
application/pdf PDF-Datei
application/rdf+xml RDF-Daten
application/soap+xml SOAP 1.2-Nachricht
application/vnd.ms-powerpoint Microsoft Powerpoint
application/vnd.ms-excel Microsoft Excel
image/jpeg JPG-Datei
image/gif GIF-Datei
image/png PNG-Datei
text/css Stylesheet-Datei
text/html HTML-Datei
text/plain Text-Datei (wird meist im Browser dargestellt)
text/rtf Datei im Rich-Text-Format
text/xml XML-Datei (beachten Sie RFC 3023)


Rheinwerk Computing

6.1 HTTP  toptop


Besprochene Version: 1.3.5 Lizenz: PHP-Lizenz
Klassendatei(en): HTTP.php

Das Paket HTTP enthält einige grundlegende Funktionalitäten für die Arbeit mit dem http-Protokoll. Alle Methoden können statisch aufgerufen werden und liefern im Falle eines Fehlers ein PEAR_Error-Objekt zurück. Die Klasse ist in der Datei HTTP.php definiert.

Eine recht hilfreiche Methode ist date(). Sie dient dazu, einen übergebenen Timestamp in ein RFC-konformes Datum umzuformatieren. Übergeben Sie keinen Timestamp, wird die aktuelle Zeit vom System übernommen.

   require_once('HTTP.php'); 
 
   $date=HTTP::date(); 
   echo $date; 
   // Ausgabe z. B.: Wed, 16 May 2001 08:00:00 GMT

Ein so formatiertes Datum ist z. B. dann hilfreich, wenn Sie einen Header zur Cache-Steuerung senden möchten.

Die Methode redirect() stellt eine einfache Möglichkeit dar, um einen Client auf eine andere Seite weiterzuleiten. Ihr wird die URL übergeben, an die der Client weitergeleitet werden soll. Hierbei ist entweder eine absolute Angabe, die mit http:// beginnt, oder eine relative Angabe möglich, die sich auf den aktuellen Server bezieht.

HTTP::redirect("http://www.netviser.de/"); // absolute Angabe 
HTTP::redirect("seite_zwei.php"); // relative Angabe

Die übergebene URL wird nicht auf Validität überprüft. Übergeben Sie jedoch einen Query-String, z. B. etwas wie do_insert.php?name=Möhrke, so müssen Sie sich nicht um die URL-gerechte Kodierung der enthaltenen Sonderzeichen kümmern. Das übernimmt das Paket für Sie. Die Methode akzeptiert darüber hinaus noch einen booleschen Parameter. Übergeben Sie nach der Adresse ein true, so wird direkt nach der Weiterleitung das Programm beendet. Das hat den Vorteil, dass dadurch sichergestellt wird, dass kein weiterer Code ausgeführt wird. Kann keine Weiterleitung erfolgen, weil bereits Header oder Daten an den Browser geschickt wurden, so gibt die Methode false zurück. An dieser Stelle noch ein Hinweis: Ein Redirect auf eine relative URL ist nach RFC 2616 nicht zulässig. Daher wandelt die Methode eine relative URL automatisch in eine absolute URL um.

Um einen Abgleich der Spracheinstellungen zwischen Applikation und Browser durchführen zu können, ist die Methode negotiateLanguage() vorgesehen. Die Informationen, welche Sprachen serverseitig zur Verfügung stehen, werden ihr in Form eines Arrays übergeben. Dieses Array enthält die üblichen ISO-Abkürzungen für Sprache und Sprachraum (als z. B. de-DE, en-US oder en-UK) als Schlüssel. Darüber hinaus müssen Werte vorhanden sein, die nicht als false interpretiert werden können. Hierbei kann es sich also z. B. um true, 1 oder um den Namen einer Sprachdatei handeln, die Ihre Applikation benutzt.

Die Methode vergleicht die Sprachen, die der Server und der Browser unterstützen, und liefert dann den Code der Sprache zurück, die vom Browser als am wichtigsten eingestuft und vom Server unterstützt wird.

require_once ('HTTP.php'); 
 
$sprachen = array( 
           'en'   => 'langs/english.php', 
           'en-US'=> 'langs/english.php', 
           'en-UK'=> 'langs/english.php', 
           'de'   => 'langs/deutsch.php', 
           'de-DE'=> 'langs/deutsch.php' 
       ); 
 
// Liefert z. B. de-DE zurueck 
$neg = HTTP::negotiateLanguage($sprachen); 
// versucht, die Sprachdatei langs/deutsch.php einzubinden 
require_once($sprachen[$neg]);

Sollte die Methode keine Übereinstimmung ermitteln können, gibt sie en-US zurück.

Die letzte, wirklich sehr praktische Methode ist head(). Sie sendet den HEAD-Befehl an einen Server. Der HEAD-Befehl des http-Protokolls dient dazu, Meta-Informationen von einem Server abzufragen. Er sollte hierbei dieselben Informationen liefern, als würde er eine Seite per GET oder POST versenden. Die Methode liefert einen Hash zurück, in dem die Daten enthalten sind. Die Methode bekommt die URL eines Servers bzw. die URL einer Datei übergeben. Sollte diese URL ungültig sein oder nicht aufgelöst werden können, so gibt die Methode ein PEAR_Error-Objekt zurück.

require_once ('HTTP.php'); 
require_once ('PEAR.php'); 
 
$head=HTTP::head("http://www.netviser.org"); 
if (true===PEAR::isError($head)) 
{ 
   die ($head->getMessage()); 
} 
print_r($head);

Listing 6.1 Auslesen von Server-Informationen

Das zurückgelieferte Array enthält die in Tabelle 6.3 dargestellten Schlüssel.


Tabelle 6.3 Aufbau des Rückgabewerts von HTTP::head(  )
Schlüssel Erläuterung
response_code Statuscode, den der Server geliefert hat (200 für OK, 404 für »Datei nicht gefunden« etc.)
response Komplette Response des Servers inklusive Protokoll etc., z. B. HTTP/1.1 200 OK
Date Datum, Uhrzeit und Zeitzone des Servers, z. B.: Sat, 12 Nov 2005 14:47:13 GMT
Server Webserver und Betriebssystem, z. B. Apache/2.0.48 (Linux/SuSE)
Connection Status der Verbindung; üblicherweise closed
Content-Type Typ des Inhalts und Zeichensatz der angefragten Datei, wenn sie verschickt würde, z. B. text/html; charset=iso-8859–1

Falls Sie die Methode head() nutzen, beachten Sie bitte, dass Sie das Paket PEAR manuell einbinden müssen, wenn Sie testen wollen, ob ein Fehler aufgetreten ist, da HTTP die Klasse erst dann einbindet, wenn ein Fehler auftritt.

Wie Sie sehen, ist die Klasse nicht sonderlich umfangreich, aber sie kann durchaus sehr hilfreich sein.

 <<   zurück
     
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: PHP PEAR
PHP PEAR
Jetzt Buch bestellen!
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Rheinwerk-Shop: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Rheinwerk-Shop: MySQL 5.6






 MySQL 5.6


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
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.


Nutzungsbestimmungen | Datenschutz | Impressum

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

Cookie-Einstellungen ändern