PHP 4.3

9.9 Zwei komplexe Cookie-Routinen

Auf der letzten Seite kündigten wir bereits an, zum Zwecke größerer Flexibilität zwei Routinen zu entwickeln, die es uns ermöglichen, gezielt Inhalte mehrdimensionaler Arrays in Cookies abzulegen und auszulesen.
Vielleicht wird Ihnen insbesondere die Auslese-Funktion vor dem Hintergrund der Existenz von explode() unnötig kompliziert und unverständlich erscheinen. Im Hinblick auf unser Ziel, die programmiertechnischen Hintergründe eines größeren Programmierprojektes zu beleuchten, macht es jedoch Sinn, die Arbeitsweise der beiden PHP-internen Funktionen genauer zu betrachten und selbst nachzubilden. Sie vertiefen damit zudem Ihre Fähigkeiten im Umgang mit Funktionen, die Zeichenketten verarbeiten.

Vergegenwärtigen wir uns zunächst die Arbeitsweise der PHP-Funktion implode(). Sie durchläuft die Elemente einer Array-Dimension, kopiert die Werte der Array-Elemente heraus und setzt sie getrennt durch eine vom Programmierer festgelegte Trenn-Zeichenkette zu einer Zeichenkette zusammen.

In unserer Funktion gehen wir von einem Array $warenkorb aus, welches zunächst aus zwei Dimensionen besteht und jeweils eine Produktnummer und eine Bestellmenge enthält, wie das z.B. in einem Shopsystem vorkommen könnte.
Beide zusammen repräsentieren die Bestellungen eines Kunden.

<?php

  $warenkorb[0][0] = "0001";
  $warenkorb[0][1] = "5";
  $warenkorb[1][0] = "0002";
  $warenkorb[1][1] = "1";
  $warenkorb[2][0] = "0003";
  $warenkorb[2][1] = "4";

?>

Wir wollen nun die Bestellung in einer Zeichenkette speichern, die Produktnummern und dazugehörige Bestellmengen aneinanderhängend enthält. Damit bildet sich eine Zeichenkette mit einer Folge von:

Schlüssel + Wert + Schlüssel + Wert + Schlüssel + Wert ... und so weiter.

Wir schlagen an dieser Stelle als Delimiter die bereits häufiger eingesetzte Kombination @/@ vor. Diese Kombination kann in den Variablen nicht auftauchen, wenn sichergestellt ist, dass sowohl Schlüssel als auch Werte numerischer Natur sind.
Wie Sie wissen, sind Cookies auf 4096 Zeichen Länge begrenzt. Da neben der eigentlichen Zeichenkette aber noch andere Daten, wie z.B. die Domain, das Verfallsdatum und so weiter enthalten sind, stehen uns effektiv noch 3800 bis 4000 Bytes zur Verfügung. Die Routine sollte also auch eine Abbruchbedingung besitzen, welche einen Wahrheitswert zurückliefert, der bei einer Zeichenkette mit einer Größe von mehr als 3800 Byte den Wert true aufweist und dadurch einen Fehler signalisiert.

Kommentare (0)

Ihr Kommentar

Name