Teil 4: Datenbankpraxis und Dateihandling in PHP

PHP Tutorial: Datenbankpraxis
Keine Kommentare

Nachdem wir im vorherigen Teil die Grundlagen der Arbeit mit Datenbanken erklärt haben, wollen wir jetzt das Gelernte an einem Praxisbeispiel üben. Auch im Theorieteil geht es um Daten. Wir betrachten die Möglichkeit, in PHP mit Dateien zu arbeiten. Dazu gehört deren Lesen und Schreiben, aber auch das Kopieren ganzer Dateien. Damit erlangen Sie ein solides Wissen für die Entwicklung umfassender PHP-Anwendungen.

Der vierte und letzte Teil unseres PHP-Kurses deckt zwei große Themenbereiche ab.

Das erste Thema knüpft direkt an die Aussagen des letzten Teils unserer Artikelserie an und vertieft das Thema datenbankbasierter Anwendungen. Die Grundlagen der Arbeit mit Datenbanken haben wir bereits gezeigt, u. a. haben wir erläutert, wie man mittels der generischen PDO-Schnittstelle auf eine Vielzahl von Datenbanken wie MySQL, Oracle oder Microsoft SQL Server zugreifen kann. Dabei haben wir uns auf einfachste Beispiele beschränkt. Die Praxis ist jedoch stets komplexer, sodass es sich lohnt, das Thema nochmals aufzugreifen. Wir diskutieren dabei eine etwas umfangreichere, datenbasierte Applikation.

Auch unser zweites Thema dreht sich um Daten. Nicht überall, wo man Informationen speichern und verwalten muss, ist eine Datenbank notwendig. In einfachen Fällen genügt auch das Ablegen direkt im Dateisystem, zum Beispiel auf dem Server.

Auch mit diesem Thema sind wir nah an der Praxis. Untersuchen Sie einmal die Content-Management-Systeme (CMS), die auf PHP basieren. Es werden Ihnen einige durchaus leistungsfähige Vertreter begegnen, die auf den Einsatz von Datenbanken verzichten und stattdessen alle Daten in einem strukturierten Dateisystem ablegen. Der Vorteil: Die Verfügbarkeit von Datenbanken ist oft ein Engpass beim Mieten von Webressourcen.

Je nach Angebot kann es vorkommen, dass man als Kunde nur ein oder zwei Datenbanken auf dem Server einrichten darf. Will man ein CMS installieren, hat man die Anzahl der möglichen Datenbankinstallationen vielleicht schon für eine andere Anwendung „verbraucht“. Auch kann der Verzicht auf eine Datenbank zu Gunsten einer Speicherung auf Dateiebene noch andere Vorteile bringen. Zu nennen sind zum Beispiel die Verarbeitungsgeschwindigkeit (Performance) oder eine Reduzierung der Komplexität. Ebenso gestaltet sich die Installation der Anwendung einfacher, wenn keine Datenbank eingerichtet und administriert werden muss. Gründe gibt es also genügend.

Beginnen wir unsere weiteren Ausführungen jedoch mit einem etwas ausführlicheren Beispiel zur Datenbankprogrammierung.

Grundkonzept

Das Konzept der Datenbank ist zu erstellen, bevor die erste Zeile Programmcode geschrieben wird. Bei einer relationalen Datenbank sind das u. a. die Tabellenstruktur, die Datentypen und die Beziehungen zwischen den Tabellen. Unser Datenbankbeispiel arbeitet mit einer Tabelle und den folgenden Feldern: ID, Anrede, Vorname, Nachname, Alter und Hobby. Die Beziehungen zwischen Tabellen entfallen also, was eine willkommene Vereinfachung darstellt.

Trotzdem können wir wichtige Aspekte des Datenmanagements erklären. Zu den Grundlagen der Arbeit einer SQL-Datenbank lesen Sie bitte nochmals im dritten Teil dieser Serie nach. Anhand dieses Beispiels wollen wir das Eintragen, das Löschen, die Ausgabe und das Filtern von Datensätzen über PHP zeigen.

International PHP Conference 2018

Getting Started with PHPUnit

by Sebastian Bergmann (thePHP.cc)

Squash bugs with static analysis

by Dave Liddament (Lamp Bristol)

API Conference 2018

API Management – was braucht man um erfolgreich zu sein?

mit Andre Karalus und Carsten Sensler (ArtOfArc)

Web APIs mit Node.js entwickeln

mit Sebastian Springer (MaibornWolff GmbH)

Erstellen der Datenbank

Nachdem man die Struktur der Datenbank konzipiert hat, ist sie auf dem Server anzulegen. Mit Blick auf eine spätere Installation sollte das nach Möglichkeit nicht manuell über ein Administrationswerkzeug erfolgen, sondern über ein Skript – in diesem Fall über PHP –, das in der Regel während der Installation der Anwendung auf dem Server ausgeführt wird. Sie kennen diesen Vorgang, wenn Sie ein CMS Ihrer Wahl mit Datenbankanbindung auf Ihrem Server installieren.

Zu Beginn wird in der Regel eine Datei setup.php oder install.php ausgeführt, die nach Eingabe der Verbindungsdaten (Nutzername, Passwort, Pfad) die grundlegende Struktur der Datenbank automatisiert anlegt. Diese besteht mindestens aus einer, im Regelfall aus mehreren Tabellen, die untereinander in Beziehungen stehen. In unserem Beispiel haben wir eine Tabelle. Listing 1 zeigt das Erstellen der Datenbank mit der vorgegebenen minimalen Struktur.

<?PHP
  $user = 'root';
  $pass = '';
  $db = new PDO( 'mysql:host=localhost;dbname=meineDatenbank', $user, $pass );

  //Fehlermeldungen aktivieren
  $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

  //Datenbank löschen
  $sql = "DROP TABLE tabelle";
  $db ->exec($sql);

  try {
    //Datenbank erstellen
    $sql = "CREATE TABLE tabelle(id INTEGER PRIMARY KEY NOT NULL auto_increment, vorname VARCHAR(100), nachname VARCHAR(100), age int, geschlecht VARCHAR(10), hobby VARCHAR(100), prof BOOLEAN, dr BOOLEAN);";
    $db ->exec($sql);
    echo 'Die Tabelle "tabelle" wurde erfolgreich erstellt. </br></br>';

    //Weiterführende Links
    ?>
    <a href="Ausgabe.php"> <b>Gefilterte Daten anschauen</b></a></br></br>
    <a href="Filter.php"> <b>Filter bearbeiten</b></a></br> </br> 
    <a href="Eintragen.php"> <b>Alle Daten unwiderruflich löschen</b></a></br> 

    <?php

  } 
  catch (Exception $ex) {
    echo 'Die Tabelle "tabelle" wurde leider aufgrund eines Fehlers nicht erstellt.';
  }
?>

Für eine eigene Applikation sind natürlich Anpassungen und Erweiterungen notwendig. Dargestellt ist ausschließlich der PHP-Teil, d. h., dieser Quellcodeausschnitt muss dann beispielsweise in eine HTML-Seite eingebettet werden oder wird von einer anderen Seite aufgerufen. Man kann es nicht oft genug sagen: Bevor man die Struktur der Datenbank endgültig anlegt und auch nur einen Datensatz aus der Produktion aufnimmt, ist die gesamte Datenlandschaft umfassend zu konzipieren.

Testdaten und Datenübernahme

Mittels Testdaten kann zum einem sofort die Funktionalität der Anwendung überprüft werden, zum anderen entsteht beim Nutzer unmittelbar ein besseres Verständnis in der Handhabung der Anwendung, wenn bereits ein paar Datensätze beispielhaft die Funktionalität andeuten. Auch dieses Vorgehen ist üblich.

Dazu ein praxisnahes Beispiel: Bei den meisten CMS werden bei der Installation einige Testseiten angelegt. Derjenige, der später auf Basis des CMS einen Webauftritt erstellen will, hat damit sofort eine erste Orientierung. In der Praxis hat man es darüber hinaus sehr oft mit der Übernahme von bestehenden Daten zu tun. Bleibt die Datenbankstruktur gleich (Tabellen, Datenfelder) und sind die Datentypen untereinander kompatibel, ist die Übernahme der Daten recht problemlos.

Oft sind jedoch Anpassungen notwendig. In diesen Fällen muss man einen individuellen Importfilter erstellen. Kommen beispielsweise neue Datenfelder hinzu, ist zu entscheiden, auf welche Weise die bisherigen Datensätze anzupassen sind. Das kann zum Beispiel darin bestehen, dass das Datenfeld leer bleibt oder, im Falle eines Pflichtfeldes, ein Standardwert vergeben wird. Komplexer sind die Anpassungen, wenn die Struktur der Datenbank sich verändert hat. Sehr sorgfältig ist die bisherige Tabellenstruktur zu analysieren und ein Mapping auf die neue Datenbankstruktur vorzunehmen. Die grafische Darstellung mithilfe von ER-Diagrammen schafft eine gute Übersicht.

Für unser Beispiel begnügen wir uns mit dem automatisierten Hinzufügen einiger Testdaten. Der zugehörige Quellcode ist in Listing 2 wiedergegeben. Dargestellt sind drei Testdatensätze. Dazu wird ein SQL-Statement formuliert. Mittels des SQL-Befehls INSERT INTO erfolgt die Auswahl der Tabelle und die Angabe der Datenfelder, hinter dem Schlüsselwort VALUES werden die konkreten Attribute des Datensatzes angeben.

Die eigentliche Ausführung des SQL-Befehls geschieht dann mittels $db-> exec($sql). Eine weitere Automatisierung ist jedoch denkbar, bei der der Vorgang in einer Schleife durchlaufen werden kann. Für die Attribute können Zufallswerte generiert werden. Der Vorteil: Man kann eine größere Anzahl an Testdatensätzen generieren. Für das umfangreiche Testen ist es durchaus sinnvoll, mit einer größeren Zahl von Daten zu arbeiten.

Übersteigt die Anzahl der Daten in der Produktion die Zahl der Testdaten um ein Vielfaches, können ungeahnte Probleme auftreten. Listen und andere Darstellungen können ggf. Probleme dabei bereiten, große Mengen an Daten anzuzeigen, oder die Reaktionsgeschwindigkeit der Applikation wird unakzeptabel, etwa, weil bestimmte Suchoperationen ungünstig programmiert sind.

$sql = "INSERT INTO tabelle (vorname, nachname, age, geschlecht, hobby, prof, dr) VALUES ('Peter', 'Meyer', '65', 'Herr', 'Programmieren', TRUE, TRUE);";
  $db-> exec($sql);
  $sql = "INSERT INTO tabelle (vorname, nachname, age, geschlecht, hobby, prof, dr) VALUES ('Dieter', 'Naumann', '25', 'Herr', 'Kunst', FALSE, FALSE);";
... 
...
... 
  $db-> exec($sql);
  $sql = "INSERT INTO tabelle (vorname, nachname, age, geschlecht, hobby, prof, dr) VALUES ('Gudrun', 'Naumann', '44', 'Frau', 'Fotografie', TRUE, FALSE);";
  $db-> exec($sql);

Daten formularbasiert eintragen

Das regelbasierte Eintragen von Daten geschieht im Produktionsbetrieb einer Datenbank in der Regel mithilfe eines Formulars. Für unser Beispiel handhaben wir es nicht anders (Abb. 1). Das Formular selbst wird mit rudimentären HTML-Anweisungen erstellt. Für ein ansprechendes Design kommt in einer Produktivanwendung noch die Ausgestaltung mit CSS hinzu.

krypczyk_php_1

Abb. 1: Ein minimales Formular zur Datenerfassung

Nachdem die Daten durch den Benutzer erfasst wurden, sind diese grundlegend zu prüfen (Validierung). Zu der Datenvalidierung zählen zum Beispiel Prüfungen, ob alle notwendigen Datenfelder ausgefüllt wurden. Wurde ein Fehler festgestellt, ist der Benutzer mit einer Meldung zu informieren. Auszugsweise betrachten wir dazu den PHP-Code für die Prüfung des Datenfelds Anrede:

if( isset($_POST["Anrede"]) ){
  $Anrede = $_POST["Anrede"];
}
else{
  echo "FEHLER: Es wurde keine Anrede erfasst!";
  return;
}

Dazu wird mittels if-Abfrage geprüft, ob das Datenfeld Anrede aus der globalen Variable extrahiert werden kann. Im positiven Fall wird der Wert der Variablen $Anrede zugewiesen. Im anderen Fall (else-Zweig) wird ein kurzer Hinweistext ausgeben, der auf die fehlende Eingabe verweist. Zu beachten ist, dass im Fehlerfall die weitere Verarbeitung vorzeitig mit return abgebrochen wird. Weitere Prüfungen sind – je nach Datenfeld – notwendig.

Neben einer syntaktischen Korrektheit müssen auch inhaltliche Bedingungen überprüft werden. Bei einer Altersangabe kann das zum Beispiel ein bestimmter Wertebereich (18 <= Alter <= 99) sein. Komplizierter sind zum Beispiel Prüfungen auf eine korrekte E-Mail-Adresse. Hier finden sich jedoch genügend Beispiele in Form von kurzen Codeschnipseln im Internet. Einige Validierungen können noch größeren Aufwand erfordern, sind jedoch unverzichtbar. In Businessapplikationen betrifft das zum Beispiel die Eingabe der Kontoverbindung. Hier helfen externe Bibliotheken oder Zugriff auf Dienste externer Anbieter.

Im weiteren Verlauf der Verarbeitung wird aus den eingegeben Daten wieder ein SQL-Statement formuliert; das Eintragen der Daten in die Datenbank geschieht auf die gleiche Weise wie im o. g. Punkt „Testdaten“ beschrieben.

Filtern

Bei der Datenausgabe will man möglichst flexibel reagieren. Bestimmte Ausgabeformate kann man beispielsweise in Listenform vorab definieren und dem Anwender als konkrete Programmfunktion zur Verfügung stellen. Dynamisch und flexibel wird es dann, wenn der Anwender die anzuzeigenden Datensätze im laufenden Betrieb bestimmen kann. Das möchte er in Form eines Formulars machen. Intern wird wiederum ein SQL-Statement erzeugt, das an die Datenbank übermittelt wird.

Die Filterung von Datensätzen basiert in SQL auf der WHEREKlausel. In einem Formular kann der Anwender den Filter definieren. Im PHP-Code erfolgt die Auswertung der Eingaben; dazu wird stückweise eine Zeichenkette zusammengesetzt. Den prinzipiellen Ablauf könnte man wie folgt gestalten, zunächst wird die Zeichenkette definiert:

$_SESSION["string"] = "";

Je nach Auswahl des Geschlechts wird die Variable erweitert:

if(isset($_POST["Anrede"])){
  if ($_POST["Anrede"] == "Herr"){
    $_SESSION["string"] = $_SESSION["string"] . " WHERE geschlecht = 'Herr'";
  }
  else{
    $_SESSION["string"] = $_SESSION["string"] . " WHERE geschlecht = 'Frau'";
  }
}

Konkret: Hat der Benutzer im Filter definiert, dass alle Datensätze mit der Anrede „Herr“ zu ermitteln sind, so wird die Zeichenkette um das zugehörige SQL-Statement WHERE geschlecht =’Herr‘ erweitert. Erweitert heißt, dass der bisherige Inhalt der Zeichenkette erhalten bleibt und der zusätzliche Filter angehängt wird, d. h., die alte und neue Zeichenkette werden additiv miteinander verknüpft. Die vom Benutzer definierten Filter sollen in Kombination angewendet werden.

Beispielsweise sollen alle Datensätze ermittelt werden, die folgende Bedingungen erfüllen: Geschlecht = weiblich und Titel = Doktor. In PHP erhält man dann zunächst ein SQL-Statement, das das Schlüsselwort WHERE mehrfach enthält (WHERE geschlecht =’Herr‘ WHERE titel =’Doktor‚). Damit ist dieser Befehl nicht zulässig. Kombinierte Filter müssen durch die Verknüpfungen AND und OR definiert werden. In unserem Fall sollen beide Filter simultan wirken, d. h., außer dem ersten WHERE sind sie durch ein AND zu ersetzen. In PHP geht auch das recht einfach, wie der folgende Quellcodeausschnitt beweist:

//Alle doppelten WHERE zu AND umwandeln
if($_SESSION["string"] != ""){
  // Alle "WHERE" durch "AND" ersetzen
  $_SESSION["string"] = str_replace("WHERE", "AND", $_SESSION["string"]);
  // Erstes Vorkommen von AND zurücktauschen
  $search = 'AND';
  $replace = 'WHERE';
  $_SESSION["string"] = preg_replace('/'.$search.'/', $replace, $_SESSION["string"], 1);
}

Datenausgabe

Die Datenausgabe besteht aus zwei Schritten:

  1. Abfrage: Die gewünschten Daten müssen aus der Datenbank ermittelt werden. Das geschieht durch die Definition eines Filters (siehe letzter Punkt), der im nächsten Schritt mittels SQL-Abfrage an die Datenbank gerichtet wird. Der Filter kann dabei statisch während der Designzeit erstellt werden und gilt damit unverändert. Das trifft beispielsweise für standardisierte Listen oder Datenausgaben zu. Alternativ kann er dynamisch während der Laufzeit durch den Anwender generiert werden. Die Datenbank liefert dann aufgrund der individuellen Abfrage die gewünschten Daten für die spätere Anzeige zurück.
  2. Anzeige: Die Daten werden angezeigt. Dazu wird beispielsweise dynamisch eine Tabelle gefüllt. Die Tabellenstruktur wird in HTML angelegt. Die einzelnen Datensätze werden mithilfe einer Schleife eingefügt. Komfortabel iteriert man über alle Datensätze mithilfe einer foreach-Schleife.

Um die beschriebenen Transaktionen am Beispiel nachvollziehen zu können, finden Sie unter den Quellcode. Dabei handelt es sich im Einzelnen um folgende Dateien:

  • Erstellen.php: Es wird die Datenbank auf dem Server angelegt, die Tabellenstruktur generiert und einige wenige Beispieldatensätze werden eingetragen.
  • Erstellen.php: Ein neuer Datensatz kann mithilfe eines einfachen Formulars in die Datenbank eingetragen werden.
  • Filter.php: Dient der Definition eines Filters, der später auf die Datenbank anwendet werden kann, um nur bestimmte Datensätze abzurufen.
  • Ausgabe.php: Der erstellte Filter wird angewendet und die Daten werden in Tabellenform ausgegeben.

Die Arbeit mit Dateien

Wir eingangs angekündigt, kommen wir nunmehr zu dem Punkt, dass man die Daten einer dynamischen Webseite nicht in einer Datenbank ablegen möchte, sondern die Informationen im Dateisystem speichert. PHP bietet die gesamte Bandbreite der Dateiverarbeitung: Dateien öffnen, lesen, schreiben und kopieren. Die Unterstützung der genannten Dateioperationen ist in PHP fest eingebaut, deswegen sind keine zusätzlichen Installationen (Bibliotheken) notwendig. Allerdings sollte auf jeden Fall sichergestellt werden, dass der PHP-Prozess Lese- oder sogar Schreibrechte auf die gewünschten Dateien hat. Es gibt zwei verschiedene Ansätze, um mit Dateien zu arbeiten:

  • Inhaltsorientiert: Dateien können geöffnet und wieder geschlossen werden. Dabei kann man auf die Daten aus den geöffneten Dateien lesend zugreifen und Informationen neu hineinschreiben.
  • Dateisystem: Umfasst die Arbeit mit dem Dateisystem. Dabei können die Dateien kopiert, umbenannt oder gelöscht werden.

Betrachten wir zunächst die inhaltorientierte Arbeit mit Dateien. Zum Öffnen einer Datei in PHP dient der Befehl fopen(). Dabei steht das f für file. Als Parameter werden der Dateiname (absolute oder relative Pfadangabe) und der Dateimodus übergeben. Grundsätzlich sind folgende Dateimodi zu unterscheiden:

  • a: Schreibzugriff und das Anhängen neuer Daten am Ende der Datei
  • r: Lesezugriff
  • w: Schreibzugriff und das Überschreiben bestehender Daten
  • c: Schreibzugriff und Überschreiben bestehender Daten (jedoch gegenüber dem Modus w kein sofortiges Überschreiben beim Öffnen)
  • x: Erstellen und Schreiben in eine neue Datei

Bei allen Modi kann zusätzlich ein Plussymbol (+) angehängt werden, um Lese- und Schreibzugriff gleichzeitig anzuzeigen. Tabelle 1 gibt eine Übersicht über alle Modi.

Tabelle 1: Dateimodi für „fopen()“ [2]

Tabelle 1: Dateimodi für „fopen()“ [1]

Die genannten Dateimodi kann man um zwei weitere Optionen ergänzen:

  • b: Die Datei wird im Binärmodus geöffnet. Die Daten werden also nicht in den lokalen Zeichensatz umgewandelt. Zu empfehlen ist grundsätzlich diese Option.
  • t: Die Dateien werden umgewandelt, d. h., Unix/Linux-Zeilenendungen (\n) werden in Windows-Zeilenendungen (\r\n) geändert.

Die Funktion fopen() gibt ein so genanntes Datei-Handle zurück. Mithilfe dieser eindeutigen Kennung kann die Datei später bei anderen Dateioperationen identifiziert werden. Listing 3 (oben) zeigt das Erstellen einer Datei mit fopen. Nachdem eine Datei erstellt wurde, kann man auf diese schreibend zugreifen. Dazu dient die Funktion fwrite. Als Parameter werden das Datei-Handle und der Text übergeben. Die Datei muss zuvor natürlich in einem Modus geöffnet werden, der ein Schreiben erlaubt. Der Rückgabewert der Funktion ist ein Wert, der über die Anzahl der geschriebenen Bytes informiert bzw. den Wert false hat, wenn der Schreibvorgang nicht erfolgreich war. Listing 3 (Mitte) zeigt ein Beispiel zum Schreiben in eine Datei.

Kommen wir zum Auslesen von Dateien. Mithilfe von file_get_contents() wird der komplette Dateiinhalt gelesen. In Klammern wird der Dateiname übergeben. Die Funktion fgets() liest dagegen eine Zeile. Neben dem Dateinamen ist zusätzlich die Anzahl der zu lesenden Zeichen anzugeben. Da man diese nicht genau kennt, nimmt man hier in der Regel den Maximalwert von 4 096. Auch wenn weniger Zeichen in der betreffenden Zeile vorhanden sind, bekommt man nur den Inhalt der betreffenden Zeile, darüber hinaus wird nicht gelesen. Wenn man zeilenweise eine Datei ausliest, benötigt man eine Information über das Ende der Datei. Diese bekommt man über die Funktion feof(), wobei eof für end of file steht. Listing 3 (unten) zeigt beide Möglichkeiten zum Lesen der Datei (siehe auch hier).

//Datei erstellen
<?php
  if ($datei = fopen ("test.txt", "wb")){
    echo "Datei wurde erzeugt! ";
    fclose($datei);
    } else {
    Echo "Datei konnte nicht erzeugt werden!";
     }
  ?>
//Datei schreiben
  <?php
    if ($datei = fopen ("test.txt", "wb")){
    if (fwrite($datei, "Das ganze Leben ist ein Test\r\n")&&
      fwrite($datei, "und wir sind nur die Kandidaten")){
      echo "Datei wurde gefüllt!"
    } else {
    echo "Fehler beim Schreiben!"
    }
    fclose($datei);
  } else {
   echo "Datei konnte nicht geöffnet werden!";
  }
  ?>
//Datei auslesen (alles auf einmal)
  <?php
    $alles = file_get_contents ("test.txt");
    echo "<pre>". htmlspecialchars($alles). "</pre<";
  ?>
//Datei auslesen zeilenweise
  <pre>
  <?php
    $datei = fopen ("test.txt", "rb ");
    while (!feof($datei)){
      $zeile = fgets($dateil, 4096);
      echo htmlspecialchars($zeile);
    }
    Fclose($datei);
  ?>
  </pre>

 

Das zweite große Thema bei der Arbeit mit Dateien ist deren Verankerung im Dateisystem. Dazu gehört beispielsweise das Ermitteln der Eigenschaften (Attribute) einer Datei. Ebenso muss man gelegentlich eine komplette Datei kopieren, ohne deren Inhalt im Vorfeld zu lesen. Tabelle 2 listet wichtige Funktionen aus diesem Segment auf.

Tabelle 2: Informationen über Dateien [2]

Tabelle 2: Informationen über Dateien [1]

Kommen wir zu den konkreten Operationen mit Dateien. Identische Operationen gibt es auch auf Ebene des Betriebssystems. Den Vergleich zwischen Linux/Unix/Mac OS, Windows und PHP finden Sie in Tabelle 3.

Tabelle 3: Einige PHP-Funktionen für Dateioperationen [2]

Tabelle 3: Einige PHP-Funktionen für Dateioperationen [1]

Fazit und Ausblick

Wir sind am Ende des vierteiligen PHP-Kurses angekommen. Ein Schwerpunkt der letzten beiden Teile lag bei der Entwicklung von datenbankbasierten Webanwendungen. Hier liegt der Fokus auf der Anwendung der Programmiersprache PHP, d. h. der einfachen und flexiblen Arbeit mit unterschiedlichen Datenbanken. Insbesondere das Gespann PHP und MySQL haben zu einem hohen Verbreitungsgrad und einer großen Akzeptanz von PHP geführt.

Darüber hinaus bietet PHP in nahezu allen Belangen der Webprogrammierung Lösungen. Fehlende Funktionalität kann über (freie) Bibliotheken nachgerüstet werden. Viele Betreiber von Servern stellen diese bereits standardmäßig zur Verfügung. PHP ist Open Source. Neben einer kostenfreien Verwendung auch in kommerziellen Projekten kann man zur Weiterentwicklung selbst beitragen (Kasten: „Zu PHP beitragen“).

Zu PHP beitragen

PHP wird nicht von einer einzelnen Firma entwickelt, sondern ist Open Source; der Quelltext steht demnach frei zur Verfügung. Die Entwicklung und Pflege von PHP geschieht in aller Öffentlichkeit. Die Hemmschwelle, zu PHP-Projekten beizutragen, ist gar nicht so hoch. Kompakt kann man es wie folgt zusammenfassen: Der Code wird mittels Git als Versionsverwaltungssystem organisiert. Die gesamte Codebasis wird dabei auf GitHub gespiegelt. Es gibt zwei Möglichkeiten der Mitarbeit:

  • Ein neues Feature hinzufügen.
  • Den existierenden Funktionsumfang verbessern.

Wir beginnen mit dem Einfachsten: Einen Bug zu beheben, egal, ob dieser von einem selbst oder von einer anderen Person gemeldet wurde. Die Ausgangsbasis ist stets ein angelegter Task im PHP-Bug-Tracking-System. Hat man einen Fehler gefunden, kann man selbst einen entsprechenden Task anlegen. Hinweise, wie man das erledigt, gibt es hier.

Das Hinzufügen von neuen Features ist ein verbindlicher und strukturierter Prozess. Es wird als Request for Comments (RFC) bezeichnet und läuft wie folgt ab:

  1. Idee: Die Idee zu einem neuen, für die Allgemeinheit nützlichen Feature muss vorhanden sein.
  2. Übermittlung: Die Idee kurz skizzieren und an die Adresse internals@lists.php.net senden.
  3. Diskussion: Die Idee wird zur Diskussion freigestellt.
  4. Abstimmung: Entscheidung durch Abstimmung im Rahmen des RFC.
  5. Hinzufügen: Im Erfolgsfall wird der Code dem PHP-Projekt hinzugefügt.

Links & Literatur

[1] Wenz, Christian; Hauser, Tobias: „PHP 7 und MySQL. Das umfassende Handbuch“, Rheinwerk Verlag, 2016

Entwickler Magazin

Entwickler Magazin abonnierenDieser Artikel ist im Entwickler Magazin erschienen.

Natürlich können Sie das Entwickler Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

X
- Gib Deinen Standort ein -
- or -