Serendipity - Styx Edition

Individuelle Weblogs für Einsteiger und Profis

Styx is what Serendipity should be

Copyright
   Garvin Hicking (s9y.org),
   Ian Styx (https://github.com/ophian/)

 

 

Serendipity Styx 3.9, Juli 2022

Vorwort

Styx kann als Serendipity Next gelesen werden!

 

Dies ist eine Neubearbeitung für Serendipity Styx 3.9 und beruht auf meiner damaligen S9y-Origin "Entwurfs"-Revision für den Entwicklungsstand von Serendipity 2.1 (Alpha-Builds) aus dem Frühjahr 2016, Seit dem Spätsommer 2018 lag diese hier in einer aktuelleren Neubearbeitung für Styx 2.4 vor, welche jetzt erneut für die Styx 3er Series überarbeitet wurde. Diese Bearbeitungen beruhen alle auf dem damals veröffentlichten Buchtext und der im März 2012 an den Autor und die Community vom Verlag zurückgegebenen Rechte.

Die Entwurfs-Revision legte zu ihrem damaligen Zeitpunkt keinen absoluten Anspruch auf Vollständigkeit (insbesondere der kompletten Überarbeitung und Auflistung aller Konfigurationsoptionen aller hier genannten Plugins) und besitzt selbst jetzt in den Überarbeitungen noch ein paar wenige offene Fragen, welche mit ??? markiert sind. Bis auf ein paar Kleinigkeiten wurde darauf Wert gelegt, den ursprünglichen Text so weit wie möglich zu erhalten, doch immer dann konsequent zu überarbeiten bzw. zu ergänzen, wenn der damalige Text heutzutage keinen Sinn mehr machte, oder mit Erscheinen von Serendipity 2.0/2.1 bzw. Serendipity Styx hoffnungslos überholt war.

Des Weiteren wurden außer der Einrückung verschiedene Farben verwendet, um bestimmte Einheiten klarer herauszustellen. Das helle Blau dient der Anzeige von bestimmten Listendarstellungen und Konfigurations-Optionen, insbesondere bei Plugins und überhaupt in Beziehung zum Backend. Ebenso wurde es (im light mode) als Grundlage bei der Aufzählung von Datenbanktabellenfeldern gewählt. Das helle Gelb wurde dann angewendet, wenn es um Smarty, oder klare Frontend / Template (Theme) -Eigenschaften, -Aufzählungen, CSS, Werte und Variablen ging. (Im dark mode allerdings etwas anders gelöst.) Zwischen diesem Gelb und Blau konnte aber nicht immer eine konsequente Unterscheidung vorgenommen werden; so dass mitunter die eine Farbe auch die andere sein könnte. Bestimmte Eigenschaften von gekennzeichneten Hervorhebungen, wie Smarty-Variablen, Datei-Namen, Verzeichnissen, Datenbankfeld-Namen, Importer, Serendipity-Hooks, etc. wurden farblich unterschiedlich markiert bzw. hervorgehoben, damit sie in der Fülle nicht untergehen.

Durch die Anordnung der Seitenstruktur, der Kapitel und ihrer Unterabteilungen, über eine jederzeit ausfahrbare Seitenleiste, siehe das "Hamburger" Symbol im Seitenkopf links, können Sie im Text beliebig hin- und herspringen. So können sie einen Anker des Inhaltsverzeichnisses anspringen und die Leiste durch einen beliebigen Klick auf der Inhaltsseite schließen, oder das weiße im Kopf als Linksymbol zum Schließen der ausgefahrenen Seitenleiste benutzen. Im Text selbst sehen Sie die diagonal-orangenen Kettensymbole der Überschriften, die zum gleichen Ankersprung-Ergebnis führen. Der beim Seitenscrollen auf der angezeigten Seite unten rechts eingeblendete große Button, bringt Sie im Schnelldurchlauf wieder ganz nach oben. Durch die farblich mitwachsende Anzeige des Seitenfortschritts ("progress-bar") in der Sie begleitenden Navigationsleiste im Seitenkopf, können Sie gut einschätzen lernen, an welcher Stelle des Buches Sie sich gerade befinden. Zu guter Letzt gibt es noch die Example Sprungtags im Text, die zu Ergänzungen, Vertiefungen, Fortsetzungen des Gesagten an anderer Stelle des Textes führen.

Es ist noch unentschieden, ob es zu einer weiteren physischen Aufteilung (zum Beispiel in einzelne Kapitel per Request) des recht langen Textes kommen muss, damit die Ladezeiten und Swaps für User mit wenig Spielraum mit ihrem lokalem RAM weniger intensiv sind. Ansonsten ist die momentane Version darauf eingerichtet alles "in-one" zu laden, um anschließend per Javascript bestimmte Verwandlungen wie Sprungelemente und Linkanker vornehmen zu können. Danach müssen Sie nichts mehr neu laden, sondern können sich mittels der Sprungmarken und der ausfahrbaren Seitenleistennavigation im vollständig geladenen und aufbereiteten Werk frei herum bewegen. Ein erneutes Laden geschieht dann zum größten Teil aus dem Browsercache und ist wesentlich schneller erledigt.

Ansonsten ist noch viel Raum für weitere Optimierungen gegeben!

Ein großer Dank geht an Garvin Hicking, der mit seiner umfassenden Arbeit für Serendipity seit Mitte 2003 und seinem veröffentlichten Buch vom April 2008 den gewichtigen Grundstock für diese Neubearbeitung legte, ohne jene nicht wäre was sie ist!

 

 

Ian Styx, für die Serendipity Styx Edition

Juli 2022.

 

 

Origin available under CC-BY-NC-SA license.

Kapitel 1: Einführung

Chats und Foren dominierten noch in den 90er Jahren das interaktive Internet. Diskussionen wurden darüber hinaus allenfalls über Newsgroups und Mailbox-Systeme geführt. Mit der allgemeinen Verfügbarkeit von Internetzugängen wuchs auch das Bedürfnis nach einem System, um sich selbst in diesem neuen Medium zu präsentieren: Das sogenannte Self-Publishing war geboren.

Während der Boom der Wiki-Communities aus dem vornehmlich akademischen Wunsch nach Wissensaustausch resultierte, entstand auch für das Self-Publishing eine neue Art von Software - Weblogs, kurz: Blogs. Der Name ist Programm, denn die Grundfunktion ist ein persönliches Tagebuch (ein Logbuch) im Internet. Blogsysteme zeichnet aus, dass sie Inhalte sehr einfach darstellen und fassbar machen, denn schließlich sollen die persönlichen Bemerkungen viele -- auch zufällige - Besucher schon auf den ersten Blick ansprechen.

Ganz bewusst setzen sich Blogsysteme von den Content-Management-Systemen (CMS) ab, die aus Blogger-Sicht zu teuer, vor allem aber zu komplex sind. Mit steigender Popularität entstanden zahlreiche Blogsysteme im Open-Source- wie im kommerziellen Umfeld: Serendipity, Movable Type, Blogger.com, b2 Evolution, WordPress und andere.

Mittlerweile wird Blog-Software nicht nur für persönliche oder firmenspezifische Tagebücher eingesetzt, sondern ebenso für kleine, stark angepasste und individualisierte Projekt-/Produktseiten, Firmenpräsentationen oder redaktionelle Inhalte jeder Art.

Serendipity ist eines dieser Systeme. Es entstand aus dem Wunsch nach einer freien Software mit größtmöglicher Flexibilität, worauf auch der - für die deutsche Zunge zugegebenermaßen etwas gewöhnungsbedürftige - Name hinweist, der etwa bedeutet: "eine zufällige Entdeckung, die Überraschendes und Großartiges mit sich bringt". Und da der Name nicht nur schwierig auszusprechen, sondern auch umständlich zu schreiben ist, kürzt man ihn in Fachkreisen einfach ab: s9y. Geeks ersetzen längere Wörter gerne durch deren Anfangs- und Endbuchstaben und schreiben die Zahl der ausgelassenen Buchstaben einfach dazwischen...

Serendipity hat den Anspruch, von Anfängern einfach zu bedienen, aber von fortgeschrittenen Anwendern weitestgehend modifizierbar zu sein. Um auf möglichst vielen verschiedenen Serversystemen zu laufen, sollte es mit mehreren Datenbanksystemen kompatibel sein, die verbreitete Skriptsprache PHP einsetzen und einfach auf dem eigenen Webspace installierbar sein. Die Wahl der Lizenz für das System fiel auf BSD, denn diese räumt im Gegensatz zur GNU GPL auch die Möglichkeit ein, das Blogsystem in kommerziellem Umfeld sinnvoll zu nutzen.

So hob Anfang 2002 ein Kernteam bekannter PHP-Entwickler Serendipity aus der Taufe: Jannis Hermanns, Sterling Hughes, George Schlossnagle, Wez Furlong, Joyce Park und Joseph Tate sowie Sebastian Bergmann vom phpUnit-Projekt.[*] Die PHP-Testsuite ist unter https://phpunit.de/ erhältlich. Mit den Jahren entwickelten wechselnde Programmierer das System stetig und konsequent weiter. Seit 2003 war der Autor des ursprünglichen Buchtextes, Garvin Hicking, leitender Entwickler.

Dieses Online-Buch bezieht sich auf die aktuelle Serendipity Styx Version 3.9 und möchte einen umfassenden Überblick über das System und seine Anpassbarkeit vermitteln. Neben der Bedienung der Software werden Sie darum auch lernen, eigene Plugins zu schreiben, Templates anzupassen und Konfigurationsänderungen vorzunehmen.

Wie gesagt, Serendipity Styx kann auch als Serendipity Next gelesen werden!

1.1 - Was unterscheidet ein Blog von einem CMS?

Was unterscheidet ein Blog von einem CMS?

Ein Blogsystem zielt darauf ab, einzelne Artikel möglichst einfach zu erfassen und in einem festen Rahmendesign darzustellen. Ein CMS hingegen verwaltet ganz unterschiedliche Inhalte in individuellen Designs und baut komplexe Navigationsstrukturen auf.

Für Blogsysteme sind alle Artikel grundsätzlich gleichwertig und werden nur chronologisch sortiert dargestellt. Ein CMS sollte Seiten unterschiedlich gewichten und diese verschlagworten und kategorisieren können. Darum bietet es sich für umfangreiche Webseiten an, die nicht nur eine "Seitenansammlung" darstellen, sondern eine komplexe Hierarchie abbilden, was den Umgang mit sog. "Teasern", Übersichten, Unter- und Parallelseiten erfordert.

Dies ist natürlich eine grobe Vereinfachung, da viele Blogsysteme inzwischen auch solch komplexe Anwendungen meistern. Für Serendipity gibt es beispielsweise das Plugin Statische Seiten, mit dem man Inhalte losgelöst von den chronologisch sortierten Artikeln erstellen und auch Hierarchien mit Unterseiten abbilden kann (siehe Seite staticpage). Oder das Freetag Plugin für die Indizierung durch Schlagworte.

Ein weiterer fundamentaler Unterschied ist die Ausrichtung eines CMS auf Mehrbenutzerfähigkeit und Workflows, so dass ein Artikel vor seiner Veröffentlichung verschiedene Arbeitsphasen möglicherweise verschiedener Redakteure durchläuft. Gerade für umfangreiche Webseiten ist es wichtig, dass mehrere Artikelversionen nebeneinander existieren können: Während man bereits an neuen Fassungen einer Seite arbeitet, soll die Online-Version unverändert für Besucher zur Verfügung stehen. Solch ausgefeilte Mechanismen sind im Blog-Umfeld meist nur unnötige Last.

Somit lässt sich ein Blog grundsätzlich als funktionsreduziertes CMS beschreiben. Das mag negativ klingen, hat aber tatsächlich einen großen Vorteil: Ein Blog geht zielgerichtet auf Bedürfnisse des Web-Publishings ein. Die Bearbeitungsprozesse sind einfacher, und Blog-spezifische Techniken (RSS-Feeds, XML-RPC, Widgets, Web-Services, interaktive Funktionalitäten wie Kommentare und Trackbacks [*] Eine Erklärung dieser Begriffe finden Sie im Kapitel Terminologie auf Seite Terminologie.) lassen sich meist mit wesentlich geringerem Aufwand einbinden als in umfangreichen Content-Management-Systemen.

1.2 - Warum Serendipity?

Warum Serendipity?

Serendipity versteht sich als erweiterbares Blog-Framework, dessen Kernarchitektur so offen konzipiert ist, dass man individuelle Anpassungen vornehmen kann, ohne an den Sourcecode selbst Hand anzulegen. Änderungen am Aussehen des Blogs lassen sich durch Templates vornehmen, Funktionalitäten durch Seitenleisten- und Ereignis-Plugins nachrüsten.

Diese Modularität macht es möglich, eigenen Code vor Updates der Serendipity-Version zu schützen. Seit Erscheinen der ersten Version legen die Entwickler sehr viel Wert auf Abwärtskompatibilität. Im Gegensatz zu anderen Systemen ließen sich bestehende Plugins bisher selbst bei großen Versionssprüngen weiterverwenden. Dies spricht zum einen für eine gesunde Weiterentwicklung des Systems, zum anderen auch für die Plugin-Architektur, die sich als sehr stabil erwiesen hat.

Gerade die Auslagerung von Code macht Serendipity auch im kommerziellen Umfeld interessant. Aufgrund der BSD-Lizenz kann man dieses Blogsystem verwenden, ohne hinzugeschriebenen Code veröffentlichen zu müssen.

Der Einsatz dynamischer PHP-Skripte gewährleistet, dass Serendipity im Gegensatz zu mit Perl, Ruby oder Python entwickelten Blogsystemen auf beinahe jedem Webserver lauffähig ist. Zudem macht die Unterstützung mehrerer Datenbank-Management-Systeme die Software portabel, so dass sie mit unterschiedlichen Datenbank-Servern einsatzfähig ist.

Darüber hinaus legen die Entwickler viel Wert auf guten Programmierstil (mit phpDoc-Funktionskommentaren, einheitlichen Einrückungen und einer kleinteiligen Funktions-API) und sicheren Code. Im Laufe der Serendipity-Entwicklung gab es bislang nur wenige Sicherheitslücken, die bei Bekanntwerden innerhalb weniger Stunden offiziell behoben wurden. Auch gegen weniger verbreitete Angriffsmöglichkeiten auf eine Webanwendung wie XSRF [*] XSRF steht für Cross-Site Request Forgery und beschreibt eine Angriffsmethode, bei der eine fremde Website mit Privilegien eines authentifizierten Benutzers Aktionen (zB. das Löschen aller Artikel) durchführt. stellte Serendipity frühzeitig Schutzmechanismen bereit.

Serendipity-Templates werden unter Verwendung des Templating-Frameworks Smarty, [*] https://www.smarty.net/ einem De-facto-Standard unter PHP, entwickelt. Zahlreiche Entwickler schwören auf dessen einfache Syntax, die es selbst Anfängern ermöglicht, die HTML-Ausgabe anzupassen, ohne PHP lernen zu müssen.

Das zentrale Plugin- und Template-Archiv namens Spartacus [*] Spartacus auf Styx bietet derzeit mehr als 160 Plugins und knapp 100 Templates an. Diese können Sie direkt aus der Verwaltungsoberfläche Ihrer eigenen Blog-Installation heraus installieren oder aktualisieren. Die dort aufgeführten Plugins werden großteils offiziell gewartet und entsprechen den vom Serendipity-Projekt vorgegebenen Anforderungen an Programmierstil und Sicherheit. Plugins mit identischer Funktionalität, die den Benutzer vor die Qual der Wahl stellen, findet man hier nicht, und auch auf Kompatibilität zu allen verfügbaren Serendipity-Versionen wird geachtet.

Da die Serendipity Kernentwickler derzeit aus Deutschland kommen, haben gerade deutsche Anwender den Vorteil einer stets aktuellen deutschen Übersetzung der Benutzeroberfläche. Zudem sorgen eine engagierte Community und ein großes Supportforum mit bislang über hundertausend Beiträgen dafür, dass Fragen zum System oder Rückfragen selten unbeantwortet bleiben. Serendipity wird sehr nah an den Wünschen der Community entwickelt - das Feature-Diktat von "oben herab" ist verpönt.

Natürlich kann Serendipity zum jetzigen Zeitpunkt noch nicht alles. Der größte Nachteil besteht wohl darin, dass man auf eine einzelne Blog-Instanz festgelegt ist. Unter-Blogs (thematisch oder auch pro Benutzer) lassen sich zwar hintricksen, aber an ein echtes Multi-Blogsystem wie Movable Type kommt die Software in dieser Hinsicht nicht heran.

Aufgrund der dynamischen Kompilierung jedes Seitenaufrufs verursacht Serendipity auch mehr Prozessorlast als solche Systeme, die mit exportiertem HTML arbeiten. Serendipity kann auf gut eingerichteten Servern zwar mehrere Dutzend Seitenaufrufe parallel verarbeiten, für den Einsatz einer Community mit Tausenden parallelen Seitenaufrufen pro Sekunde ist das System jedoch nicht konzipiert.

Serendipity hebt sich von der Konkurrenz anderer frei oder kommerziell erhältlicher Systeme vor allem in folgenden Punkten ab:

  • Die Browser-basierte Installationsoberfläche erlaubt sowohl eine weitgehend automatische Konfiguration, bei der nur essentielle Daten abgefragt werden, als auch die Einflussnahme auf nahezu alle Parameter bei der Fortgeschrittenen Installation (Seite webinstaller). Jede installierte Version lässt sich über die integrierte Oberfläche auf die jeweils aktuellste updaten (Seite s9yupdate).
  • Texte pflegt man auf Wunsch mit übersichtlichen, einfach verständlichen und funktionalen WYSIWYG-Editoren ein (Seite WYSIWYG).
  • Die integrierte Mediathek für Bilder, PDFs, MP3s etc. gestattet Rechtemanagement, Stichwortsuche und automatische Vorschaugrafiken (Seite Mediathek). Über einen gesonderten Dialog (Seite Mediathek-Popup) bindet man die Dateien aus der Mediathek mit wählbaren Layout-Optionen einfach in Blog-Artikel ein. Die Inhalte dieser Mediathek lassen sich dynamisch in einer Verzeichnisansicht darstellen, wie Sie es zB. vom Windows Explorer gewöhnt sind.
  • Das gruppenbasiertes Rollenkonzept von Serendipity erlaubt das Anlegen unbegrenzt vieler Autorengruppen und das Vergeben individueller Rechte (Seite Benutzerverwaltung und Gruppenverwaltung).
  • Kommentare und Kategorien lassen sich verschachteln, Einträge mehreren Kategorien zuordnen. Natürlich implementiert Serendipity alle gängigen Blog-Standards (und ist somit vollständig Buzzword-kompatibel): Trackback, Pingback, XML-RPC, XHTML 1.1, CSS, RSS, Atom ... (siehe Seite Terminologie).
  • Eine flexible Plugin-API erlaubt es Ihnen, Seitenleisten- und Ereignis-Plugins einzusetzen oder zu entwickeln, die das System ohne Eingriffe in den Serendipity-Code beliebig erweitern (Seite pluginapi).
  • Das bereits erwähnte Online-Plugin-Archiv (Spartacus) erlaubt die Ein-Klick-Installation von mehr als 160 Plugins (Seite Spartacus).
  • Dank Plugin-Verwaltung per Drag&Drop können Sie das Aussehen und die Inhalte der Seitenleisten des Blogs nach Ihren Wünschen gestalten, ohne Templatedateien manuell ändern zu müssen (Seite Plugins verwalten).
  • Das dynamische, Smarty-basierte Template-Konzept erlaubt die strukturelle Änderung sämtlicher Frontend-Elemente über aufeinander aufbauende Templatedateien. Smarty-Templates dürfen ohne Einschränkung Kontrollstrukturen wie Schleifen, Abfragen und Variablen enthalten und optional mit zusätzlichem PHP-Code versehen werden (Seite Smarty-Templates).
  • Einfache Integration in bestehende Webseiten. Das Konzept der Shared Installation ermöglicht den Betrieb beliebig vieler Blog-Instanzen mit nur einer Code-Basis (Seite sharedinstall).
  • Serendipity kämpft an Ihrer Seite mit umfangreichen, konfigurierbaren Anti-Spam-Maßnahmen gegen unerwünschte Kommentare oder Trackbacks. Als Schlagworte seien Captcha, automatische Moderation, Akismet und Blacklists genannt (Seite spamblock).
  • Beim Datenbanksystem haben Sie die Wahl zwischen MySQL(i), PostgreSQL und SQLite.
  • Serendipity ist nicht nur Open Source, sondern unterliegt sogar der BSD-Lizenz. Somit kann das System auch in kommerziellen Programmen seinen Einsatz finden.
  • Ob WordPress, MoveableType, b2Evo, blogger oder andere -- Serendipity importiert auf Wunsch den Inhalt zahlreicher anderer Blogsysteme (Seite Daten importieren).
1.3 - Voraussetzungen

Voraussetzungen

Serendipity als Software wird nicht auf Ihrem persönlichen Computer ausgeführt, sondern läuft im Internet auf einem Webserver. Einen solchen mietet man meistens bei Providern wie Uberspace [*] https://uberspace.de/de/, Manitu [*] https://www.manitu.de/, 1&1 [*] https://www.ionos.de/, Strato [*] https://www.strato.de/, tiggerswelt [*] https://www.tiggerswelt.net/ oder anderen [*] https://www.webhostlist.de/; die Dienstleistung, die diese erbringen, nennt man Webhosting.

Für einen gewissen Monatsbeitrag erhalten Sie Zugangsdaten zu einem Rechner, auf den Sie HTML-Dateien und Software wie Serendipity mittels eines FTP-Programms hochladen können. So gespeicherte Software können Sie auf dem Webserver als Anwendungen ausführen; darauf greifen Sie mittels eines Webbrowsers von Ihrem PC aus zu - ganz so, wie Sie es von Webseiten wie eBay oder Amazon kennen.

Die Dateien, die zu Serendipity gehören, enthalten Quellcode, der in der Skriptsprache PHP [*] PHP ist die Abkürzung von PHP Hypertext Preprocessor, siehe https://www.php.net/. geschrieben ist. Ein PHP-Interpreter macht diesen bei jedem Aufruf auf dem Webserver maschinenlesbar. Das Ergebnis dieser Aktion liefert der Webserver an den Browser des Zielsystems. Laienhaft gesprochen, ließe sich PHP als Betriebssystem für Serendipity ansehen.

Dies ist wichtig, um die generelle Funktionsweise von Serendipity zu verstehen. Im Gegensatz zu Webbrowsern oder einer Office-Anwendung kann Serendipity selbst keine Echtzeit-Eingaben von Ihnen annehmen. Serendipity läuft komplett auf dem Webserver und wird über Ihren Browser sozusagen ferngesteuert. Dabei sendet Ihr Browser eine Anfrage an den Server, Serendipity verarbeitet diese und schickt ein Resultat. Danach geht der Vorgang wieder von vorne los.

Dies hat den Vorteil, dass auch die Besucher Ihrer Seite stets aktuelle Daten zu sehen bekommen. Da jeder Aufruf dynamisch die aktuellsten Daten darstellt, kann Serendipity beispielsweise vorbereitete Artikel mit Erreichen eines speziellen Datums automatisch einbinden, ohne dass Sie nochmals tätig werden müssen. Das ist ein fundamentaler Unterschied zu einem statischen Blogsystem wie MovableType. Dort speichert der Server (vereinfacht gesagt) nur HTML-Dateien, in die sich dynamische Komponenten wie die neuesten Kommentare oder die aktuelle Server-Uhrzeit nicht ohne Weiteres einbinden lassen.

Diese Vorgehensweise von Serendipity hat zahlreiche Vorteile: Ein Besucher kann, abhängig von seinen Zugriffsrechten, Artikel sehen, die andere nicht zu Gesicht bekommen. Ein Besucher kann das Design der Webseite selbständig durch Wahl einer Designvorlage verändern. Die Sprache der Benutzeroberfläche richtet sich auf Wunsch nach seinen Einstellungen usw.

Diese Dynamik hat zwar auch Nachteile (so verlangt sie nach mehr Speicher und macht das System langsamer), ermöglicht Ihnen als Blogbetreiber aber auch interessante Möglichkeiten, die wir im Folgenden detailliert beschreiben werden.

Um ein aktuelles Serendipity Styx einzusetzen, benötigen Sie SSH oder FTP-Zugriff auf einen Webserver, auf dem eine aktuelle PHP-Version (mindestens PHP 7.3) installiert ist und auf dem der Webhoster Zugriff auf eine Datenbank (MySQL (bevorzugt), PostgreSQL, SQLite) gewährt. Als Webserver-Software eignen sich Apache (bevorzugt), Nginx, Lighttpd und Microsoft IIS. Das Blogsystem lässt sich somit sowohl auf Windows- als auch auf Unix-Derivaten einsetzen.

Mit der Serendipity 1.7.x Serie stieg die interne Voraussetzung auf PHP 5.2 und mit dem Erscheinen von Serendipity 2.1 auf mindestens PHP 5.3, besser min 5.4+. Die letzte aktuelle Version der Styx 2er Serie, Serendipity Styx 2.9.5 vom 2. Mai 2020, hatte bereits PHP 5.6 als minimale Voraussetzung. Heutzutage ist mindestens PHP 7.4+ Voraussetzung, um in den erweiterten Genuss der sprachlichen Modellpflege außerhalb gravierender Sicherheitsfixes zu kommen. Vor allen Dingen, weil der Support für alle alten Versionen abgelaufen ist und die Supportzeiten immer kürzer wurden. Wie früher, lange Jahre auf alten PHP Versionen zu hocken kann schwerwiegende Sicherheitslücken eröffnen. Treten Sie ihren Providern also auf die Füße!

Damit Serendipity auf dem eigenen Webserver laufen kann, muss man einige PHP-Einstellungen berücksichtigen. Üblicherweise sind sie passend konfiguriert, so dass Sie als unbedarfter Benutzer direkt zum Kapitel Installation ab Seite Installation springen können, wenn Sie Ihren Webserver nicht selbst aufsetzen und dem Techniker bei Ihrem Provider keine Hinweise geben müssen.

1.3.1 - Systemseitige Einstellungen

Systemseitige Einstellungen

Um herauszufinden, welche PHP-Module auf Ihrem Webserver installiert sind, laden Sie folgende kleine Datei namens info.php in das Webdaten-Stammverzeichnis (auch Document Root genannt) [*] Das ist meistens das Stammverzeichnis, in dem Sie bei Benutzung Ihres FTP-Zugangs standardmäßig zu Beginn landen. Je nachdem, wie Ihr Provider den Webserver konfiguriert hat, kann es aber auch sein, dass Sie zuerst in ein Verzeichnis wie htdocs oder httpdocs wechseln müssen, um in das Stammverzeichnis des Webservers zu gelangen. auf den Server (im Buch www.example.com genannt) und rufen diese in einem Browser über http://www.example.com/info.php auf:

Aus Gründen der Einfachheit nutzen wir für diese Beispiel URLs das ungesicherte http:// Protokoll-Präfix, empfehlen aber dringend im realen Leben immer https:// über ein vertrauenswürdiges Zertfikat zu verwenden!


    <?php phpinfo(); ?>

Der Browser sollte dann eine Übersicht darstellen, aus der Sie Ihre aktuellen Einstellungen herauslesen können. Folgende Module benötigt Serendipity:

  • Das PHP-Modul session muss installiert und aktiviert sein sowie Session-Cookies zulassen. Dies erreicht man mit der php.ini-Einstellung session.use_cookies = On Serendipity verlangt darüber hinaus, dass die PHP-Sessiondateien schreibbar sind. Die php.ini-Einstellung session.save_path muss demnach auf ein Verzeichnis zeigen, in dem der Webserver bzw. PHP Schreibrechte hat. Gerade bei Windows-Servern enthält diese Variable häufig ein nicht existierendes oder nicht beschreibbares Verzeichnis.
  • Damit Serendipity in anderen Zeichensätzen verfasste Texte nach UTF-8 konvertieren und seine XML-Funktionalitäten ausspielen kann, muss das (standardmäßig vorhandene) PHP-Modul xml/libxml installiert und aktiviert sein.
  • Für andere Zeichensatzkonvertierungen, die besonders bei Import- und Exportvorgängen (zB. von RSS-Feeds) nötig werden, kann Serendipity sowohl das PHP-Modul iconv als auch mbstring verwenden. Beide Module sind in aktuellen PHP5-Versionen standardmäßig aktiviert.
  • Um Zeichenketten zu finden und zu bearbeiten, setzt Serendipity häufig reguläre Ausdrücke ein. Diese Funktionalität liefert das (standardmäßig installierte) PHP-Modul pcre.
  • Um die Mediathek vernünftig nutzen zu können, benötigen Sie entweder das PHP-Modul gd oder das Paket ImageMagick. Sollten Sie Letzteres benutzen, müssen die Dateien des Pakets für Ihren Web-Benutzer ausführbar sein.
  • Damit Serendipity auf fremde Webseiten zugreifen kann, um zB. Webservices zu integrieren und den Download von Plugins zu ermöglichen, benötigt es das (standardmäßig aktivierte) PHP-Modul socket, das Netzwerkfunktionen bereitstellt. Selbst wenn das Modul vorhanden ist, kann es sein, dass Firewall-Einstellungen am Server die Verbindung zu fremden Servern auf HTTP-Port 80 (oder anderen) verbieten. Je nach Einsatzzweck müssen Sie Verbindungen zu den Servern, die Serendipity von sich aus anspricht (zB. github.com für den Download von Plugins), explizit erlauben. Sollte dies nicht möglich sein, können Sie Serendipity zwar nutzen, müssen aber auf die entsprechende Funktionalität verzichten.
  • Damit die Serendipity-Komponenten intern auf https-URLs zugreifen können (und beispielsweise Trackbacks zu solchen geschützten URLs senden können), wird das PHP-Modul openssl benötigt. Ebenso wichtig ist, dass Ihr Serversystem mindestens openSSL ab Version 1.1.1d (zB. in Debian Buster) einsetzt, damit keine Kompromisse bei der Verschlüsselungsstärke für "langlebig" gespeicherte Auto-Logins (siehe Wartung) gemacht werden müssen.
  • Soll Serendipity die HTML-Seiten per gzip-Kompression bündeln, wird das PHP-Modul zlib benötigt.
  • Um E-Mails zu versenden (zB. um auf neue Kommentare hinzuweisen), muss PHP mit der sendmail-Option kompiliert worden sein.
  • Abgesehen von einem Datenbanksystem muss auf Ihrem Server auch die Client-Schnittstelle für die jeweilige Datenbank (MySQL(i), PostgreSQL, SQLite) als PHP-Modul (mysqli, pgsql, sqlite) eingebunden sein. Standardmäßig wird PHP mit MySQL-Bibliotheken eingerichtet; seit PHP 5 ist auch das Datenbanksystem SQLite üblicherweise aktiviert.
  • Um die Geschwindigkeit zu erhöhen, empfiehlt sich der Einsatz von PHP-Bytecode-Caches wie APC (apc), ZendCache oder ionCube.

PHP bietet zahlreiche sicherheitsrelevante Parameter, deren aktueller Wert bei der Installation des Blogs angezeigt und auf optimale Einstellung überprüft wird. All diese Einstellungen werden in der php.ini-Konfigurationsdatei geändert und bedürfen je nach Serverumgebung eines Neustarts der Webserver-Software. Für Hilfe zur Konfiguration von PHP und des jeweiligen Webservers schlagen Sie bitte in der Anleitung der jeweiligen Software nach, da dies den Rahmen dieses Buchs sprengen würde.

Kommt Apache zum Einsatz, können die Einstellungen auch pro Domain konfiguriert werden. Im jeweiligen <VirtualHost>-Abschnitt der Konfigurationsdatei (je nach Apache-Version unterschiedlich, meist httpd.conf oder auch in Dateien unterhalb des Apache conf.d-Verzeichnisses) muss dazu php_admin_value option wert bzw. php_value option wert eingetragen werden. Alle per php_value einstellbaren Optionen lassen sich auch über eine .htaccess-Datei im Stammverzeichnis des Webauftritts verändern. Einstellungen in dieser Datei haben Vorrang vor den globalen Optionen, die in der Webserverkonfiguration oder in php.ini definiert wurden. Via php_admin_value gesetzte Werte lassen sich von .htaccess-Dateien nicht mehr verändern.

Serendipity selbst legt bei der Installation eine solche Datei im Serendipity-Verzeichnis an. Sollte Ihr Webserver deren Auswertung unterbinden, können Sie die von Serendipity erstellte Datei gefahrlos löschen, verlieren dadurch aber die Möglichkeit, sprechende URLs zu benutzen sowie den Download einiger interner Dateien zu verhindern. Daher sollten Sie dies nur dann tun, wenn Ihr Provider auch nach Rücksprache die Auswertung der .htaccess-Dateien nicht genehmigt.

Haben Sie die Möglichkeit, die .htaccess-Nutzung über die Option AllowOverride in der Webserver-Konfigurationsdatei zuzulassen, geschieht dies im <VirtualHost>-Abschnitt mittels


    <Directory /pfad/zum/serendipity-verzeichnis>
  AllowOverride All
  Require all granted
</Directory>

Notfalls reicht auch AllowOverride Options FileInfo. Der Wert All erlaubt es Plugins grundsätzlich, weitere Webserver-Optionen zu setzen, und gibt Ihnen damit mehr Flexibilität.

Serendipity setzt in seiner .htaccess-Datei (siehe Seite htaccess) die Optionen session.use_trans_sid (Seite session-trans-sid) und register_globals (Seite register-globals). Bei der Benutzung des Apache-Moduls mod_rewrite kommen auch die Optionen RewriteEngine, RewriteBase und RewriteRule zum Einsatz. Die .htaccess-Optionen ErrorDocument und DirectoryIndex ermöglichen freie Permalinks (siehe Seite urlformung). Damit der Webserver bestimmte Serendipity-Dateien nicht im Klartext darstellt, folgt ein Deny from All als Sicherheitsmaßnahme.

Sprechende URLs

mod_rewrite ist kein PHP-Modul, sondern eine Funktionalität des Apache-Webservers. Wenn das Modul in Apache eingebunden wurde, erlaubt es einer Web-Anwendung, URLs zu benutzen, die nichts mit der tatsächlichen Dateistruktur auf dem Server zu tun haben. Statt die Nutzer damit zu behelligen, dass sie gerade ein PHP-Skript namens serendipity_admin.php nutzen, lässt man sie besser auf eine URL wie http://www.example.com/serendipity/admin/ zugreifen, die den Browser auf die tatsächlich existierende Datei serendipity_admin.php umleitet.

Das mod_rewrite-Modul ermöglicht es Serendipity, sogenannte sprechende URLs (auch URL-Umformung genannt) einzusetzen, die zum Beispiel Artikeltitel oder Kategorienamen enthalten. Für den Benutzer hat das den Vorteil, dass er eine URL schon anhand ihres Namens eindeutig zuweisen kann. Zudem können Suchroboter wie Google Ihre Artikel aufgrund der Schlagwörter in der URL besser indizieren.

Serendipity kann auch mit sprechenden URLs arbeiten, wenn mod_rewrite nicht verfügbar ist. Dann leitet der Apache-Webserver den Browser mittels eines Tricks an die echte URL weiter: Kann er eine Seite nicht finden, hängt es vom Error-Handling (genau: der ErrorDocument-Anweisung) ab, ob er die Fehlermeldung an den Browser durchreicht oder diesen auf eine andere Seite führt. Diese Methode ist jedoch einen Tick langsamer und unflexibler als mod_rewrite und klappt leider nicht auf allen Servern, da sie die oben erwähnte AllowOverride-Einstellung All voraussetzt. Andere Webserver wie Microsoft IIS oder lighttpd bieten diese Möglichkeiten leider nicht, daher ist dort keine URL-Umformung möglich [*] Mit etwas manuellem Aufwand und Kenntnis der Webserver lassen sich die benötigten Umformungsregeln jedoch auch nachrüsten (siehe Seite htaccess).

Bei der Installation wird Serendipity versuchen, automatisch die passendste Methode für Sie herauszufinden. Abhängig davon wird die .htaccess-Datei unterschiedlich erstellt, damit sie die jeweils erforderlichen Anweisungen enthält. Die gewünschte Methode zur URL-Umformung kann später in der Konfiguration natürlich auch umgestellt werden.

Sobald für Serendipity das mod_rewrite-Modul aktiviert ist, wird Serendipity sämtliche Aufrufe in seinem Unterverzeichnis umleiten. Sollten Sie später also einmal andere Programme unterhalb des Serendipity-Verzeichnisses aufrufen wollen, wird dies womöglich dazu führen, dass Sie statt des installierten Programms Serendipity sehen. Dies liegt daran, dass durch die .htaccess-Datei von Serendipity die URL-Umformungsregeln auch für alle Unterverzeichnisse gelten. Abhilfe können Sie schaffen, indem Sie in jedem Unterverzeichnis einer fremden Anwendung eine eigene .htaccess-Datei erstellen, mit dem Inhalt:


    RewriteEngine off

Diese Anweisung sorgt dafür, dass für das jeweilige Programm die URL-Umformung deaktiviert wird.

1.3.2 - Für Serendipity relevante PHP-Konfigurationsoptionen

Für Serendipity relevante PHP-Konfigurationsoptionen

Folgende Optionen sind/waren für Serendipity maßgeblich:

php_value session.use_cookies .htaccess, php.ini oder Webserverkonfiguration;

Serendipity speichert temporäre Dateien in PHP-Sessions. Um eine Session eindeutig zu identifizieren, vergibt das System Session-IDs, die üblicherweise in einem HTTP-Cookie gespeichert werden. Damit Serendipity PHP-Session-Cookies nutzen kann, muss diese Option aktiviert sein.

php_value session.use_trans_sid wird von Serendipity selbst in der .htaccess-Datei auf 0 gesetzt, kann aber auch in der php.ini oder der Webserverkonfiguration geändert werden;

Wenn der Browser keine Cookies akzeptiert, kann die Session-ID auch an die URL angehängt werden. PHP macht dies automatisch, wenn die Option session.use_trans_sid aktiviert ist. Diese Automatik ist seitens Serendipity jedoch aus Sicherheitsgründen unerwünscht. Sollte die Option dennoch aktiviert sein, können fremde Nutzer ungültige Session-IDs in die URL einschleusen und somit möglicherweise Ihre Session-Dateien kompromittieren. Ein Serendipity-Blog sollte daher niemals die Session-ID in einer URL angeben. Gibt Ihnen jemand eine Serendipity-URL wie http://www.example.com/serendipity/index.php?PHPSESSID=23213123adasd, kann es sein, dass diese Person Ihre Daten ausspähen will. Die serverseitige Deaktivierung der PHP-Option session.use_trans_sid beugt solchem Missbrauch vor.

php_admin_value allow_url_fopen nur in der php.ini oder in der Webserverkonfiguration änderbar;

PHP liest und behandelt URLs wie normale Dateien, wenn diese Option aktiviert ist. Gerade in älteren PHP-Versionen öffnet die Aktivierung dieser Option die Tür für Angriffsszenarien, in denen Code von fremden Internetseiten bei Ihnen ausgeführt werden kann (und so das System kompromittiert).

Damit die Aktivierung dieser sicherheitsrelevanten Option nicht erforderlich ist, greifen alle wichtigen Serendipity-Funktionen stattdessen über Sockets auf Netzwerk-Ressourcen zu. Nur veraltete Plugins erfordern möglicherweise die Aktivierung dieser Option. Es empfiehlt sich, sie zu deaktivieren und nur bei Bedarf zuzuschalten.

php_value register_globals wird von Serendipity selbst in der .htaccess-Datei auf off gesetzt, kann aber auch in php.ini oder der Webserverkonfiguration festgelegt werden;

Wenn diese Variable aktiviert ist, stellt PHP URL-Variablen im globalen Namensraum zur Verfügung. Ältere PHP-Programme benötigen diese Option, Serendipity greift jedoch nicht auf dieses Feature zurück. Aus Sicherheitsgründen ist es daher sehr zu empfehlen, die Option zu deaktivieren, sofern sie nicht für andere auf dem Webserver laufende Anwendungen benötigt wird.

php_admin_value safe_mode php_admin_value safe_mode_include_dir php_admin_value safe_mode_gid lediglich via php.ini oder Webserverkonfiguration änderbar;

PHPs Safe Mode stellt sicher, dass lokale PHP-Anwendungen wie Serendipity nur auf die Daten im eigenen Stammverzeichnis zugreifen und keine fremden Dateien einbinden können. Obwohl Serendipity mit dieser Einschränkung generell funktioniert, hat die Aktivierung dieses Modus folgende Nachteile: Die Optionen safe_mode_include_dir und safe_mode_gid legen fest, auf welche Verzeichnisse ein PHP-Skript Zugriff hat. Solange die Benutzerrechte (Permissions) und die Eigentumsverhältnisse (Ownership) auf dem Webserver für das Serendipity-Installationsverzeichnis korrekt gesetzt sind, lassen sich zB. Mediathek-Dateien problemlos hochladen. Ein falsch eingerichteter Safe Mode hat zur Folge, dass man mittels FTP oder Administrationsoberfläche keine Templates und andere Dateien hochladen und keine Bilder im Nachhinein löschen oder bearbeiten kann.

php_admin_value open_basedir nur via php.ini oder in der Webserverkonfiguration änderbar;

Ähnlich wie der Safe Mode lässt sich der Datei-Zugriffsschutz von PHP auf gewisse Verzeichnisse beschränken. Üblicherweise wird diese Option in Zusammenhang mit den Safe-Mode-Parametern konfiguriert. Während der Safe Mode lediglich den globalen Dateizugriff auf Gruppen- und Benutzerebene regelt, schränkt open_basedir den Zugriff auf vordefinierte Verzeichnisse ein.

Verwendet Ihr Webserver diese Option, gehört das Serendipity-Installationsverzeichnis unbedingt in die damit konfigurierte Verzeichnisliste. Anderenfalls kann der Webserver die Installationsdateien nicht aufrufen. Als Trennzeichen zwischen zwei Verzeichnispfaden dient in dieser Option das Semikolon (;).

Bleibt diese Option leer, ist der Zugriff auf alle Verzeichnisse möglich. Befindet sich bereits der Verzeichniseintrag . in der Auflistung, steht dieser Punkt synonym für das Verzeichnis, in dem ein PHP-Programm ausgeführt wird.

Gerade auf Servern, die viel mit symbolischen Dateisystemlinks arbeiten, muss der Administrator sorgfältig auf die korrekte Konfiguration der involvierten Verzeichnispfade achten.

php_value session.cookie_domain .htaccess, php.ini oder Webserverkonfiguration;

Wenn Serendipity einen HTTP-Cookie setzt (also zB. die Session-ID oder Login-Daten), enthalten diese den Namen der Domain, auf dem sich die Serendipity-Installation befindet. Falls in der PHP-Variable session.cookie_domain ein Domainname eingetragen ist, nutzt Serendipity stattdessen diese Domainangabe. In dem Fall stellen Sie sicher, dass sich dieser Wert mit dem Domainnamen des s9y-Servers deckt. Wenn ein Webserver für mehrere Domains konfiguriert ist und an dieser Stelle einen zentralen Domainnamen setzt, ist dies oft Ursache für spätere Probleme.

php_value session.save_path .htaccess, php.ini oder Webserverkonfiguration;

Alle von Serendipity gespeicherten Sessiondaten werden im mit dieser Option angegebenen Verzeichnis gespeichert. Der ausführende PHP-Prozess muss darauf Schreibrechte besitzen. Stellen Sie bei Windows-Servern sicher, dass hier ein gültiger Verzeichnisname (zB. C:/Temp) eingetragen ist. Sollten PHP-Sessions nicht schreibbar sein, zeigt Serendipity Fehlermeldungen an.

php_admin_value file_uploads php_value post_max_size php_value upload_max_filesize php_value max_input_time .htaccess, php.ini oder Webserverkonfiguration - file_uploads nur via php.ini oder Webserverkonfiguration änderbar;

Damit man überhaupt Dateien hochladen kann, muss file_uploads aktiv sein. Die maximale Dateigröße einer hochgeladenen Datei legen post_max_size, das ein Limit für HTTP-Requests mitsamt aller Daten definiert, und upload_max_filesize fest, das seinerseits eine spezielle Obergrenze nur für die mittels HTTP-Request übermittelten Dateien setzt. Die maximale Zeit für die Verarbeitung einer Datei beim Upload legt die Variable max_input_time fest.

php_admin_value memory_limit Einstellung via php.ini oder Webserverkonfiguration;

Serendipity benötigt einiges an Arbeitsspeicher auf dem Webserver. In einer Grundkonfiguration reichen meist zwischen drei und vier MB RAM. Der Speicherbedarf kann mit der Anzahl und der Komplexität von Plugins jedoch zunehmen.

Wie viel verfügbaren Speicher PHP-Anwendungen insgesamt nutzen dürfen, legt die Variable memory_limit fest. Sollte der Arbeitsspeicher Fehlermeldungen zufolge nicht mehr ausreichen, müssen Sie entweder dieses Limit hochsetzen oder Serendipity-Plugins löschen.

php_value display_errors php_value error_log .htaccess, php.ini oder httpd.conf;

Einige Server geben PHP-Fehlermeldungen nicht an den Browser weiter, um weniger leicht angreifbar zu sein.[*] Fehlermeldungen können kritische Dateipfade eines Servers offenlegen (Information Disclosure). Solche Informationen erlauben es Angreifern, bestimmte Rückschlüsse auf die Einrichtung eines Server zu ziehen. Wenn Sie allerdings einmal auf Probleme stoßen oder eigene Anpassungen eine leere Seite zum Ergebnis haben, empfiehlt es sich ggf., diese beiden Optionen temporär zu aktivieren. Die bessere Alternative heißt: häufiger die Fehler-Logfiles des Webservers prüfen.

 

1.3.3 - Die Serendipity .htaccess-Datei

Die Serendipity .htaccess-Datei

Befehle, die Serendipity eigenständig in die .htaccess-Datei im Stammverzeichnis einträgt, fasst die Software in einen Block ein, der mit #Begin s9y beginnt und mit #End s9y endet. Wenn Sie eigene Parameter in diese Datei einfügen, tun Sie dies daher vor #Begin s9y oder nach #End s9y. Das verhindert, dass Serendipity diese Zeilen ändert. Wenn Sie eine von Serendipity gesetzte Option überschreiben müssen, fügen Sie die Option mit dem von Ihnen gewünschten Wert am besten nach dem s9y-Block nochmals ein.

Auf einem Server ohne mod_rewrite sieht der s9y-Block wie folgt aus:

# BEGIN s9y
DirectoryIndex /serendipity/index.php
php_value session.use_trans_sid 0
php_value register_globals off

<Files *.tpl.php>
    deny from all
</Files>

<Files *.tpl>
    deny from all
</Files>

<Files *.sql>
    deny from all
</Files>

<Files *.inc.php>
    deny from all
</Files>

<Files *.db>
    deny from all
</Files>

# END s9y

Der erste Parameter, DirectoryIndex, legt die zentrale Serendipity-Datei index.php als Startseite des Blogs fest. Wenn in der Serendipity-Konfiguration bei der URL-Umformung (siehe Seite urlformung) die Option Apache ErrorHandling eingestellt wurde, folgt als nächste Zeile der Eintrag ErrorDocument 404 /serendipity/index.php. Die darin genannte Datei dient als Weiterleitungsziel für alle virtuellen URLs, auch bei der Verwendung von mod_rewrite.

Die nächsten beiden Zeilen deaktivieren die PHP-Einstellungen session.use_trans_sid und register_globals.

Zuletzt folgen mehrere Abschnitte, die den Zugriff auf interne Serendipity-Dateien (*.tpl.php, *.tpl, *.sql, *.inc.php und *.db) verbieten.

Wurde mod_rewrite aktiviert, sieht die .htaccess bis auf einen Block genauso aus wie die eben gezeigte:

# BEGIN s9y

ErrorDocument 404 /serendipity/index.php
DirectoryIndex /serendipity/index.php
php_value session.use_trans_sid 0
php_value register_globals off

RewriteEngine On
RewriteBase /serendipity/
RewriteRule ^((id/([0-9]+))/?) index.php?/$1 [NC,L,QSA]
RewriteRule ^(authors/([0-9]+)\-[0-9a-z\.\_!;,\+\-\%]+) index.php?/$1 [NC,L,QSA]
...
RewriteRule (.*.html?) index.php?url=/$1 [L,QSA]

<Files *.tpl.php>
    deny from all
</Files>
...

# END s9y

Hinzugekommen ist der Befehl RewriteEngine On, der mod_rewrite aktiviert. RewriteBase legt den Stammpfad für alle Operationen fest. Die einzelnen RewriteRules legen fest, wohin der Nutzer weitergeleitet wird, wenn er spezielle URLs aufruft. Der erste Teil hinter einer RewriteRule gibt an, welches Muster in der URL gesucht wird, der zweite Teil legt fest, welche Datei aufgerufen wird, und zuletzt folgen spezielle mod_rewrite-Optionen in eckigen Klammern.

L gibt eine abschließende Regel an: Sobald eine URL auf das jeweilige Muster zutrifft, werden die übrigen Muster nicht mehr geprüft. QSA bedeutet, dass URL-Parameter (die sogenannten GET-Variablen) an die Ziel-URL angehängt werden. NC besagt, dass Groß- und Kleinschreibung bei einer URL nicht unterschiedlich behandelt wird.

Die jeweiligen Regeln werden mittels regulärer Ausdrücke formuliert, die bestimmte Muster in Zeichenketten detailliert beschreiben.

1.3.4 - PEAR

PEAR

Das PHP Extension and Application Repository (kurz PEAR) ist eine Sammlung von PHP-Skripten und -Modulen, von der zahlreiche Web-Anwendungen Gebrauch machen. Auch Serendipity setzt mehrere PEAR-Komponenten ein: Cache::Lite, HTTP::Request, Onyx, Net::Socket, Text::Wiki und XML::RPC. Damit diese nicht zentral auf dem Webserver installiert sein müssen, liefert Serendipity die Komponenten im Unterverzeichnis bundled-libs mit.

Wenn die entsprechenden PEAR-Komponenten bereits auf dem Webserver vorhanden sind, räumt Serendipity diesen standardmäßig den Vorrang ein, damit Systemadministratoren bei kritischen Updates nicht auch das bundled-libs-Verzeichnis anfassen müssen. Dabei kommt es manchmal zu (Versions-)Konflikten.

In diesem Fall kann man in der globalen Serendipity-Konfigurationsdatei serendipity_config.inc.php mit


    $serendipity['use_PEAR'] = false;

darauf beharren, dass die von Serendipity Styx mitgelieferten Komponenten zum Einsatz kommen.

1.4 - Terminologie

Terminologie

In Zeiten des Web 2.0 (siehe Seite Webservices) buhlen zahlreiche allgegenwärtige Marketing- und Technologiebegriffe um Aufmerksamkeit. Da diese auch im Zusammenhang mit Serendipity wichtig sind, gehen wir darauf im Folgenden gezielt und knapp ein. Detaillierte Definitionen liefert zB. die deutsche Wikipedia.[*] https://de.wikipedia.org/wiki/Wikipedia:Hauptseite

1.4.1 - XHTML, HTML, XML und CSS

XHTML, XML und CSS

HTML [*] https://meiert.com/de/publications/indices/html-elements/ stellte ursprünglich eine einfache Syntax zur Formatierung von Dokumenten im Web bereit. Während es anfangs nur sehr primitive Auszeichnungselemente gab (Überschriften, Fettungen, Tabellen), sorgten viele Entwickler-Gremien schnell und leider auch unübersichtlich für Erweiterungen. Parallel zu HTML wurde XML (Extensible Markup Language) als universelles Dateiformat entwickelt, um beliebige maschinen- und menschenlesbare Inhalte darzustellen. Im Gegensatz zu Binärformaten lassen sich für XML plattformübergreifend Schnittstellen bereitstellen und standardisiert eigene Unterformate für alle erdenklichen Einsatzzwecke erfinden.

Auch HTML wurde mittels XHTML-Standard mit der XML-Syntax aufgefrischt und konsolidiert. Strenge Regeln sorgen nun dafür, dass sich HTML-Dokumente von vielerlei Programmen interpretieren und "validieren" (also auf syntaktische Korrektheit prüfen) lassen. In der Theorie ermöglicht dies weitgehende Abstraktion von Layout und Inhalt. Der besseren Interpretation durch Software wegen konnte das CSS-Format (Cascading Style Sheets) seinen Siegeszug antreten. CSS-Dateien lassen sich auf Elemente in XHTML-Dokumenten anwenden und legen so die Formatierung der strukturellen Elemente eines Dokuments fest.

Auch wenn viele Webseiten heute noch nicht mit gültigem XHTML entwickelt werden und es Bemühungen gibt, die "dumme Einfachheit" von HTML mit laxeren Prüfungen wieder aufleben zu lassen, ist ein Vorteil von XHTML unumstritten: Weiterverwendbarkeit.

Inzwischen sind wir bei dem universalen HTML 5 [*] https://www.w3.org/TR/html5/ und gar HTML 5.1 [*] https://w3c.github.io/html/ gelandet.

1.4.2 - Browser

Browser

Ein Browser ist eine Software auf Ihrem Computer, mit der Sie Internetadressen aufrufen und ansehen können. Bekannte Browser sind der Mozilla Firefox, Google Chrome oder auch Apple Safari. Der Begriff "Browser" steht dabei für das "Stöbern" (neudeutsch "Surfen") im Internet, denn erst durch diese Software wird aus einem speziell formatierten HTML-Dokument etwas, das ein Besucher am Bildschirm wirklich ansehen und benutzen kann.

Die am Markt verfügbaren Browser unterscheiden sich in Merkmalen wie Sicherheit, Geschwindigkeit, Funktionsumfang und auch Darstellungsqualität. Obwohl HTML und CSS festgelegte Standards sind, weicht jeder Browser bei deren Interpretation doch geringfügig ab, daher stellen verschiedene Browser ein und dieselbe Webseite möglicherweise unterschiedlich dar.

1.4.3 - Client, Server

Client, Server

Bei der Kommunikation im Internet sind Millionen von Computern miteinander vernetzt. Beim Abrufen von Daten aus dem Internet über Ihren Browser verbindet sich Ihr Computer mit einem fremden Computer, auf dem diese Daten liegen.

Ihr Computer stellt dabei einen Client dar, also den Empfänger. Der Rechner, der Daten ausliefert, dient dabei als Server, also als Absender. Bei Nutzung fast jedes Internet-Protokolls spielen für die Kommunikation zwei Datenkategorien eine Rolle: das, was ein Client sendet und empfängt, und das, was ein Server sendet, empfängt und verarbeitet.

1.4.4 - RSS, Feeds, Syndication und Aggregation

RSS, Feeds, Syndication und Aggregation

RSS ist die Abkürzung für Rich Site Summary oder auch Really Simple Syndication und der Name eines Datenformats, das gemeinsam mit den Blogs die Web-Welt verändert hat.

Eine Datei im RSS-Format ist grundsätzlich erst einmal nur eine XML-Datei, die einen speziellen Satz von Elementen enthält. Diese legen die Eigenschaften von Blog-Artikeln, wie Titel, Inhalt oder Hyperlinks, fest.

Eine RSS-Datei stellt eine Art Newsticker dar, der meistens die chronologisch neuesten Änderungen an News-Artikeln oder Blog-Einträgen aufführt. Solche Dateien werden kontinuierlich (meist automatisch) aktualisiert und auch als Feed bezeichnet. Dafür ausgelegte Software kann eine solche maschinenlesbare RSS-Datei weiterverarbeiten und mit dem Inhalt anderer Webseiten zusammenführen (hier seien die Schlagworte Aggregation und Syndication genannt).

RSS-Reader-Programme ermöglichen es Internet-Nutzern, die RSS-Dateien von Webseiten ähnlich wie mit einem E-Mail-Programm regelmäßig zu überprüfen, und informieren so leicht und übersichtlich über Änderungen.

Manche RSS-Dateien liefern den Inhalt eines neuen Artikels mit, so dass der Nutzer ihn sich unabhängig von der Webseite ansehen kann. Diese Einbindungsweise fokussiert auf den eigentlichen Inhalt von Webseiten, da sie es erlaubt, Inhalte beinahe darstellungsneutral zu beziehen.

Unterschiedliche Gremien haben zahlreiche RSS-Versionen erarbeitet, teilweise inkompatibel zueinander und mit jeweils anderen Attributen. Das verbreitetste RSS-Format ist Version 2.0. Serendipity unterstützt auch RSS 0.9, 0.91 und 1.0. Diese gelten heutzutage aber als veraltet.

1.4.5 - Webservices, Web 2.0, Social Web

Webservices, Web 2.0, Social Web

In dem Maße, wie Webserver in Skriptsprachen wie PHP und Perl geschriebene Anwendungen zu interpretieren lernten, wurde es immer einfacher und interessanter, verschiedene Komponenten miteinander zu verbinden. Dynamische Software eröffnete ganz neue Möglichkeiten, Besuchern einer Webseite Zusatzdienste, sogenannte Webservices, zu präsentieren. Als Beispiel seien die Anzeige von neuen Terminen, die Darstellung von Wetterdaten, spezielle passwortgeschützte Bereiche oder auch die Darstellung von Bookmarks genannt.

Auf zahlreichen Webseiten kann man oft kostenlos Community-Dienste in Anspruch nehmen, die sich mittels Webservices an die eigene Webseite anbinden lassen - sei es die Liste aktueller Fotos von der eigenen Flickr-Fotoseite, die Darstellung der Lieblingslinks, des aktuellen Wetters zuhause oder auch die Einbindung fremder Werbung. Derartige Services bezeichnet man auch als Social Web, da ein Gedankenaustausch in einer gemeinsamen Community stattfindet.

Der Begriff Web 2.0 steht gesamtheitlich für die Wandlung des ehemals statischen Web 1.0 hin zu einer Web-Welt mit verflochtenen Diensten und großen Interaktionsmöglichkeiten unter Einbeziehung der Web-Nutzer.

1.4.6 - XML-RPC, SOAP, REST

XML-RPC, SOAP, REST

Damit ein Webservice angesprochen werden kann, benötigt man eine gemeinsame Schnittstelle zwischen Empfänger (Client) und Absender (Server). Eine solche lässt sich mittels verschiedener Techniken anbieten.

Die im PHP-Umfeld verbreitetste Schnittstelle nennt sich XML-RPC. RPC steht hierbei für Remote Procedure Call, also der Aufruf einer Funktion durch ein fremdes Programm. Zur Datenübergabe und -annahme wird hierbei XML verwendet. Der Server erhält eine XML-Datei mit speziellen Anforderungen. Die ausführende Server-Software interpretiert diese, wertet sie aus und schickt das Ergebnis wieder im XML-Format zurück an den Client.

Eine dazu konkurrierende Schnittstelle nennt sich SOAP (Simple Object Access Protocol). Auch SOAP arbeitet mit XML-Datensätzen, hat aber eine wesentlich komplexere Datenarchitektur und wird aufgrund dieses Overheads im Web eher selten eingesetzt.

Als dritte bekannte Schnittstelle bietet sich REST an: Representational State Transfer. Diese simpelste der Schnittstellen führt Abfragen anhand einfacher URL-Parameter durch und gibt üblicherweise auch einfach zu interpretierende XML-Daten zurück.

XML-RPC ist für die Weblog-Welt insofern interessant, als sie es erlaubt, Inhalte neutral von der verwendeten Blogsoftware zu erfassen. Die meisten Blogsysteme binden eine gemeinsame XML-RPC-Schnittstelle ein, die das Erstellen und Bearbeiten von Artikeln mittels "Fernsteuerung" ermöglicht. Dadurch kann ein Benutzer seine Artikel mit ganz normaler Desktop-Software wie zB. ecto, marsEdit, WindowsLive Writer oder sogar Microsoft Word schreiben, anstatt sie in der Web-Oberfläche seiner Blogsoftware zu verfassen. Gerade für Benutzer, die sich nicht mit neuer Schreib-Software auseinandersetzen wollen, ist diese Variante sehr interessant.

1.4.7 - Atom

Atom

Um die verschiedenen Varianten von RSS wieder zueinanderzuführen, entwickelte das W3C-Gremium einen Standard namens Atom. In einem vollständig gültigen XML-Format deckt es alle Fähigkeiten von RSS ab, wird aber aufgrund der höheren Komplexität heute immer noch als Konkurrenz zu RSS 2.0 angesehen.

Der Begriff Atom steht nicht nur für ein Dateiformat, sondern auch für eine Implementation der XML-RPC- oder SOAP-Protokollschnittstelle, die es erlaubt, entsprechend ausgerüstete Weblog-Software fernzusteuern.

1.4.8 - Trackback und Pingback

Trackback und Pingback

Da Blogs letztlich Sprachrohre von Individuen darstellen, ist es für einen Blog-Betreiber meist sehr wichtig, sein Blog mit anderen zu vernetzen. Ganz im Sinne des interaktiven Webs bestand ein wichtiger Gedanke bei der Erfindung des Blogs darin, Beiträge eines Autoren auf dessen Seite kommentieren zu können und so in Dialog zu treten.

Leser von Blogs sind häufig selber Blogbetreiber und möchten -- gerade bei abweichender Meinung - eine Diskussion gern auf der eigenen Seite weiterführen, ohne dabei die Verbindung mit dem Initiator zu verlieren. Hierfür wurde die Technik der Trackbacks erfunden, die es einem Autor erlaubt, seinen Artikel mit einem anderen zu verketten. Die Besonderheit dabei: Die fremde Webseite wird davon automatisch in Kenntnis gesetzt. Somit befindet sich nicht nur auf der eigenen Seite ein Link auf den Quellartikel, sondern es gibt auch einen, der vom Quellartikel auf die eigene Seite zeigt. Wie das bei Serendipity funktioniert, behandelt Kapitel trackback ab Seite trackback.

Ein Pingback ist eine abgeschwächte Form des Trackbacks. Der Initiator kann auf diese Weise den Ursprungsautor darauf hinweisen, dass er sich auf ihn bezogen hat. Dabei wird auf dessen Blog kein (ausführlicher) Verweis für andere Besucher erzeugt.

1.4.9 - API und Plugin

API und Plugin

Eine API (Application Programming Interface) stellt ein Software-Regelwerk (meist eine konkrete Liste an Funktionen oder Klassen) zur Verfügung, an das man sich als Programmierer halten kann, um auf gewisse Funktionen einer Software zuzugreifen. Bei Serendipity benötigt man ein solches Regelwerk vor allem für Erweiterungen mit eigenen Plugins oder den Zugriff von fremder Software.

Serendipity bietet eine funktionsorientierte Kern-API zur Verwaltung von Artikeln und Datenbankabfragen. Weiterhin gibt es eine spezielle, objektorientierte Plugin-API, die alle notwendigen Methoden abdeckt, die man als Entwickler eigener Plugins benötigt.

Ein Plugin ist Software, die sich nahtlos in ein Hauptprogramm einbindet (to plug bedeutet einstöpseln). Es hat Vorteile, gewisse Funktionalitäten in Plugins bzw. Programmmodule auszulagern. Dadurch hält man zum einen die Kernsoftware schlank, zum anderen kann man losgelöst von der Kernsoftware Aktualisierungen durchführen und Funktionalitäten erweitern. Ein Benutzer hält sein System schlank und performant, indem er nur die Plugins installiert, die er für seine Anwendungsfälle nutzt. Auch bei Webservices gibt es zahlreiche APIs, die den Verkehr zwischen Client und Server jeweils strukturieren.

1.4.10 - Mashup

Mashup

Der Begriff Mashup bezeichnet die Verkettung mehrerer Webservices. Dank der Offenheit vieler APIs lassen sich die abgefragten Daten beliebig miteinander kombinieren, zB. die Wetterdaten eines mittels Google Maps dargestellten Orts anzeigen. Oder man bindet auf der Karte die Bilder ein, die Flickr-Benutzer zu diesen Geo-Koordinaten eingestellt haben. Die Verknüpfungsmöglichkeiten sind oft nur durch Ihre Phantasie begrenzt.

1.4.11 - Usability, Barrierefreiheit, Accessibility

Usability, Barrierefreiheit, Accessibility

Usability ist ein Forschungsfeld, das sich damit beschäftigt, wie man zB. eine Webseite am besten bedienen kann. Es beschäftigt sich ua. mit der konzeptionellen Struktur einer Seite, dem Aufbau der Navigation, der Gliederung der Inhalte und auch der Einbindung von Formularen, Suchen und anderen interaktiven Elementen.

Da sich eine Webseite häufig stark von einer normalen Software auf dem Computer unterscheidet, lassen sich Software-Usability-Weisheiten nicht einfach auf Webseiten übertragen. Wie man dennoch zielgerichtet auf Benutzer eingeht und deren Erwartungen erfüllt, ist Aufgabe der Web-Usability.

Eine Teilmenge des Oberbegriffs Usability ist die Barrierefreiheit (englisch Accessibility). Diese beschreibt Techniken und Maßnahmen, die auch behinderten Personen die Benutzung einer Webseite ermöglichen. Darunter zählen Dinge wie eine geschickte Farbwahl, sinnvolle Kontraste, aber auch der gezielte Einsatz von Bildern nur an Stellen, wo sie nötig sind.

XHTML erlaubt zudem die Trennung von Layout und Inhalt, die man der Barrierefreiheit zuliebe stets beachten sollte. Gültiger, valider Quellcode ist Voraussetzung dafür, dass jeder Browser (und damit jeder Besucher) Ihre Webseite problemlos bedienen kann. Denken Sie auch an blinde Menschen, die die Inhalte Ihrer Seite vorgelesen bekommen müssen: Wenn Sie die Navigation nicht speziell hervorheben, kann es sein, dass dem Benutzer diese beim Vorlesen vorenthalten wird.

Serendipity Standard-Templates versuchen so barrierefrei wie möglich zu sein und bei der Usability auf klare Strukturen zu achten. Erfahrungsgemäß ist dies bei einem Open-Source-Projekt recht schwer, da meist nur Programmierer und erfahrene Benutzer am Werk sind, die keinen Wert auf einfache Zugänglichkeit legen. Serendipity hat hier im Laufe der letzten Jahre sehr stark zugelegt und ist daher für eine barrierefreie Zukunft bestens gerüstet. Wie Sie diese in Ihrem Blog letztlich selber umsetzen, wird ab Seite Anpassungen ausführlich besprochen.

1.4.12 - BBCode, Textile, Markup und Textformatierung

BBCode, Textile, Markup und Textformatierung

Üblicherweise werden Blog-Artikel in HTML-Syntax formatiert. Da HTML jedoch gerade für Anfänger nicht ganz trivial ist, gibt es mehrere Standards, die das Ziel einfacher Textformatierung verfolgen. Solche Standards, darunter BBCode [*] https://www.phpbb.com/community/help/bbcode Markdown [*] https://michelf.ca/home/ oder Textile [*] https://textile-lang.com/ bieten eigene Tags (also Formatierungsmarker) an, die ein System wie Serendipity später in HTML-Format konvertiert.

BBCode basiert auf in Foren üblichen Markierungen: [b]text[/b] formatiert zB. das Wort text fett. Alle Tags werden in eckigen Klammern geschrieben; Vereinfachungen wie [URL=http://www.google.com]Google[/url] erlauben es, relativ einfach Links zu setzen.

Serendipity bietet für alle bekannteren Markups Plugins an, so dass auch Kommentatoren zu einem Blog-Eintrag auf diese Syntax zugreifen können. Die direkte Eingabe von HTML ist bei Kommentaren nicht möglich, daher stellen solche Plugins die einzige Möglichkeit der Formatierung dar.

1.4.13 - WYSIWYG

WYSIWYG

Eine weitere Möglichkeit, die Redakteuren die Eingabe von Text erleichtert, ist der sogenannte WYSIWYG-Modus: What You See Is What You Get. JavaScript-Module erstellen im Webbrowser ein Texteingabefeld. Dieses enthält Formatierungsbuttons ähnlich wie bei OpenOffice bzw. Microsoft Word, die es erlauben, die Farbe oder den Schriftstil zu ändern, per Drag&Drop Texte und eingebundene Bilder zu verschieben oder Tabellen einzufügen.

Im Folgenden wird also zwischen dem PLAIN TEXT Editor, also dem einfachen Textfeld mit oder ohne BB-Code artige Formatierungshilfen, und dem Rich Text Format (WYSIWYG-Modus) unterschieden.

Artikel die mit dem PLAIN TEXT Editor erstellt und gespeichert wurden, werden zur Laufzeit des Abrufes in HTML umgewandelt. Dazu dienen verschiedenste Plugins. Benutzen Sie die fortschrittlicheren markdown oder textile Formatierungen, geschieht das gleiche. Auch diese wandeln als vereinfachte Auszeichnungssprachen bestimmte Formatierungshilfen in HTML zur Ausgabe um.

Das Rich Text Editor Format (WYSIWYG-Modus) speichert derweil gleich das komplette HTML fertig zur Ausgabe. Dies ist insbesondere wichtig zu wissen, damit man sein System konsistent halten kann.

Wenn Sie allerdings um die Tücken wissen, macht es nichts aus ein altes Blog von beispielsweise markdown auf den CKEditor umzustellen. Es ist heutzutage einfach das zu präferierende Format.

Serendipity wird standardmäßig mit dem WYSIWYG-Editor CKEditor [*] https://ckeditor.com/ ausgeliefert. Dieser Editor läuft problemlos mit allen aktuellen Browsern (Chrome, Firefox, Internet Explorer, Firefox, Safari, etc) und wird professionell und aktiv weiterentwickelt. Er hat sich mittlerweile zum quasi-Standard der HTML Editoren am Markt entwickelt. In Serendipity ist er als Core-BASIC-Editor im /templates/_assets Ordner angesiedelt. Außerdem existiert noch das CKEditor Plus-Plugin, das immer die neueste Version mit leichter Zeitverzögerung mitbringt und per Plugin Konfiguration sehr leicht verschiedenste Ausbaustufen de Editors zulässt. Im Grunde ist es damit unnötig geworden irgendein anderes WYSIWYG-Editor-Plugin wie TinyMCE einzusetzen, wenn nicht absolut wichtige persönliche Präferenzen dafür sprechen. (Siehe WYSIWYG)

1.4.14 - Widgets, Nuggets, Blogroll

Widgets, Nuggets, Blogroll

Viele Webservices erlauben es, ihre Dienste mit einem einfachen Code-Schnipsel auf der eigenen Seite einzubinden. Beliebte Beispiele dafür sind zB. Google AdSense, das aktuelle Wetter, die letzten Flickr-Bilder und vieles mehr. Solche eingebundenen Schnipsel bezeichnet man als Widgets oder Nuggets/Klötze. Diese lassen sich bei Serendipity leicht in das eigene Blog einbauen.

Ein Beispiel für ein Widget ist die sogenannte Blogroll. Dies ist letztlich nichts anderes als eine Liste von Blogs, die man persönlich liest oder als empfehlenswert betrachtet. Sie erlaubt es zB., den eigenen Freundeskreis virtuell zu präsentieren. Durch Blogrolls werden die Leser eines Blogs auch auf thematisch ähnliche oder sozial verbundene Blogs aufmerksam. Kein unwichtiges Feature, wenn man bedenkt, dass sich die Popularität häufig verlinkter Blogs in Suchmaschinen steigert.

1.5 - Templates, Themes und Styles

Templates, Themes und Styles

Alles, was der Besucher eines Blogs sieht, entspringt einem zentralen Layout. Die Begriffe Template, Theme, Style und Layout sind im Kontext von Serendipity grundsätzlich synonym und bezeichnen lediglich eine Ansammlung von Dateien, die später in HTML-Code und Design übersetzt werden. Der HTML-Code eines Templates enthält Platzhalter (sogenannte Smarty-Variablen), an deren Stelle später der Artikeltitel, -text oder andere dynamische Inhalte erscheinen.

1.6 - Spam, Bots, Captcha

Spam, Bots, Captcha

Mit zunehmendem kommerziellen Gewicht des Internets ist es attraktiv, für Webseiten auf so vielen Partnerseiten wie möglich zu werben. Sobald der "Partner" aber mit Werbung bombardiert wird oder diese unfreiwillig zB. in Form von Gästebucheinträgen und Kommentaren zu redaktionellen Inhalten erhält, spricht man gemeinhin von Spam. Dabei helfen automatisierte Systeme (Bots) den Spammern, ihre Werbung möglichst vielfältig und schnell auf fremde Webseiten zu schleusen. Wie beim Medium E-Mail, in dem mehr als zwei Drittel aller weltweit versandten E-Mails unerwünschte Werbemails sind, geht man bei Foren und Weblogs davon aus, dass eine ähnlich hohe Quote von Beiträgen aus automatisiertem (und teilweise abgewehrtem) Spam besteht.

Software kann nur sehr schwer unterscheiden, ob der Textbeitrag eines Besuchers "echt" ist oder von einem automatischen System stammt. Aufgrund der Funktionsweise des Internets ist es nicht möglich herauszufinden, ob ein Aufruf einer Webseite von einem Menschen oder von einer Maschine stammt. Daher beschäftigen sich die meisten Techniken zur Spamabwehr damit, diesen Unterschied herauszuarbeiten.

Schon in den Anfangszeiten der Informatik postulierte der Mathematiker Alan Turing, wie sich Mensch und Maschine unterscheiden lassen: Bei Turing-Tests setzt man Abfragetechniken ein, die die Interaktion eines Menschen erfordern: Er soll logische Aufgaben lösen, Farben oder Bilder analysieren etc. - alles Dinge, die eine Maschine nach heutigem Forschungsstand nicht können sollte.

Eine gebräuchliche Form dieses Tests nennt sich CAPTCHA (Completely Automated Public Turing Test to tell Computers and Humans Apart). Captchas nutzen Grafiken mit einer Zahlen- oder Buchstabenkombination, die häufig noch dazu visuell verfremdet dargestellt wird. Der vor dem Rechner sitzende Mensch soll diese identifizieren und eingeben. Nur wenn die eingetippten Zeichen mit denen auf dem Bild übereinstimmen, gilt eine Nachricht nicht als Spam.

Ein großes Problem dieser Grafiken ist der höhere Performancebedarf sowie die Tatsache, dass sehbehinderte Menschen bei der Entzifferung oft Probleme haben. Auch sind Bot-Entwickler nicht untätig und haben mittels Schrifterkennung per OCR [*] Optical Character Recognition große Fortschritte gemacht, so dass sie geläufige Captchas doch automatisiert entziffern können.

1.7 - RDF, Semantic Web, Mikroformate

RDF, Semantic Web, Mikroformate

Schon heute lässt sich die Datenflut des Internets kaum bewältigen, noch ist sie annähernd überschaubar. Volltextsuchmaschinen sind normalerweise nicht in der Lage, die im Web publizierten Texte anhand der üblichen grammatikalischen Syntax miteinander in Beziehung zu bringen. Um dieses Problem zu beseitigen, wurde die Initiative des Semantic Web (Semantisches Internet) gegründet. Diese entwarf eine Syntax namens RDF (Resource Description Framework) auf Basis der XML-Regeln. RDF-Anweisungen lassen sich in XHTML-Daten einbetten und repräsentieren Metadaten (etwa Bildunterschriften, thematische Eingrenzungen, Querverbindungen ...) zu einem gegebenen Dokument.

Anhand der Metadaten können Suchroboter und andere Webservices Seiten leichter analysieren und gewichten. Je mehr Metadaten verfügbar sind, desto engmaschiger lassen sich alle Informationen des Internets miteinander verknüpfen - und das nun auch nicht mehr nur einseitig.

Zum heutigen Zeitpunkt ist die Erfassung von Metadaten eine recht aufwendige Sache und obliegt dem Redakteur eines Textes. Daher sind brauchbare RDF-Metadaten noch recht wenig verbreitet und beschränken sich auf sogenannte Mikroformate. Darunter versteht man Abwandlungen des RDF-Standards oder einfacher: XML-Attribute, die ein Dokument um spezialisierte Metadaten ergänzen, zB. um Visitenkarten, Kalenderdaten oder Produktbewertungen.

1.8 - Tagging

Tagging

Häufig handelt es sich bei Blogs um lose Artikelsammlungen, die der Autor mal mehr und mal weniger miteinander in Bezug gesetzt hat. Klassischerweise wurden Artikel thematisch ausschließlich festen Kategorien zugeordnet. Damit stand der Redakteur vor dem Problem, sich bereits von vornherein Gedanken über eine hierarchische Struktur seiner zukünftigen Texte machen zu müssen.

Aus dieser Not heraus wurde das Tagging erfunden: Einem Artikel lässt sich so dynamisch eine beliebige Menge an Schlagwörtern zuordnen. Mit deren Hilfe kann sich ein Benutzer zu Artikeln weiterführen lassen, die dasselbe Stichwort tragen. Das geht zB. über Tagwolken, also Übersichten der meistgebrauchten Tags, die häufig durch unterschiedliche Schriftgrößen gewichtet werden.

Gerade im Kontext von Foto-Providern wie Flickr ist Tagging sehr sinnvoll. Ein Bild einer starren Hierarchie zuzuordnen bedeutete viel Arbeit, ohne zwingend für mehr Übersicht zu sorgen. Anhand der Stichwörter jedoch kann man zügig auch andere Bilder mit ähnlichem Kontext auffinden, zB. weitere Fotos, die mit dem Begriff "Hochzeit" verkettet sind.

1.9 - Wiki

Wiki

Der Begriff Wiki steht für eine offene Webseite, auf der sich Informationen von vielen Benutzern gleichzeitig zusammentragen lassen. Mittels Versionierung und Protokollierung werden unterschiedliche Bearbeitungen hervorgehoben und miteinander kombiniert.

Zum großen Erfolg der Wikis trug ihre einfache Syntax bei. Anstelle komplizierter HTML-Regeln beschränken sich Wiki-Anwendungen auf einfache Auszeichnungen (die je nach Software jedoch variieren können). Beispielsweise lässt sich ein Wort durch Einschließen in Sternchen * fetten.

Das zentrale Problem von Wikis ist der Vandalismus ihrer Benutzer -- die Freiheit in einer kollaborativen Umgebung können Einzelne ausnutzen, indem sie destruktive Änderungen vornehmen, was zu hohem Moderationsaufwand führt. Gerade im Bereich des freien Wissensmanagements (Stichwort Wikipedia) hat sich eine solche Form der technisch lockeren Zusammenarbeit jedoch bewährt.

1.10 - AJAX

AJAX

Eine Technologiekomponente, die das Web 2.0 nachhaltig verändert hat, wird unter dem Schlagwort AJAX (Asynchronous Javascript and XML) geführt. Letztlich handelt es sich dabei um eine einfache Form von JavaScript, die XML als Basis für Variablen und Daten verwendet. Innerhalb des Browsers können in dieser Sprache geschriebene Skripte mit Webservices kommunizieren und so Webseiten weiter dynamisieren. Setzte früher jede Aktion auf einer Webseite das Ausfüllen und Absenden von Formularen voraus, können nun auch Aktionen ausgeführt werden, ohne dass der Benutzer merkt, dass neue Komponenten nachgeladen werden.

Dies bringt Web-Anwendungen den gewohnten Desktop-Anwendungen um einiges näher, stellt jedoch auch höhere Anforderungen an Programmierer und Clients und führt zu neuen Arten von Sicherheitslücken.

1.11 - Pod- und Vodcast

Pod- und Vodcast

Dass Internet-Surfer über ständig höhere Bandbreiten verfügen, schafft den wachsenden Bedarf an Multimedia-Inhalten. Webseiten (und damit auch Blogs) lassen sich um Videos oder Audio-Dateien ergänzen, die im Browser automatisch abgespielt werden. Da Videos und Audio-Dateien auch in die RSS-Feeds der Blogs eingebunden werden können, die MP3-Player wie Apples iPod automatisch importieren, spricht man hier von Podcast (Audio) oder Vodcast (Video).

1.12 - Moblogging

Moblogging

Das mobile Bloggen via Handy oder PDA bezeichnet man als Moblogging. Auf Reisen hat man meist keinen Zugriff auf einen normalen Webbrowser. Um dennoch Inhalte in einem Blog publizieren zu können, gibt es die Möglichkeit, eine E-Mail an das eigene Blog zu schicken, die automatisch als Beitrag veröffentlicht wird. Auch gibt es inzwischen mobile XML-RPC-Anwendungen, die über eine GPRS/UMTS-Verbindung direkt auf das Blog zugreifen.

1.13 - (Hyper-)Links, URLs und Permalinks

Ein Hyperlink (Kurzform: Link), umgangssprachlich auch Verknüpfung oder Verweis genannt, gibt die Fundstelle eines Dokuments im Internet an und erlaubt es so, verschiedene Dateien miteinander zu vernetzen.

Das Konzept ähnelt Querverweisen oder Fußnoten bei einem Buch: Zeigt Ihnen Ihr Browser einen speziell markierten Begriff in einer HTML-Seite, können Sie durch dessen Anwahl zur referenzierten Internetseite springen. Erst durch diese Verweise werden die Dateien unterschiedlicher Webserver miteinander in Verbindung gesetzt und stellen dadurch das ursprüngliche Kernkonzept der HTML-Auszeichnungssprache dar.

Den Begriff Link benutzt man oft als Synonym für den Fachbegriff URL (Uniform Resource Locator). Was sich so kompliziert anhört, ist das, was Sie üblicherweise unter dem Namen Internetadresse bereits kennen. Diese beschreibt, auf welche Art und Weise (das heißt: über welches Protokoll, siehe Seite Protokolle) und von welchem Rechner sich das Dokument beziehen lässt (http://www.ebay.de, http://www.example.com). Oft enthält sie zudem Pfadangaben/Dateinamen wie in https://ophian.github.io/blog/index.html.

Außer den URLs gibt es noch die URIs (Uniform Resource) Deren Definition geht über die der URLs hinaus. Eine URI kann sogenannte URL-Variablen enthalten, die nicht Bestandteil einer URL sind. Sie werden üblicherweise von einem ?-Zeichen eingeleitet und sind mittels & voneinander getrennt. In vielen Fällen ist der Unterschied zwischen URL und URI für Sie als Leser unerheblich, und oft wird von einer URL gesprochen, wenn man fachlich eigentlich URI sagen müsste. Als Merksatz gilt: Sobald an eine URL Variablen angehängt sind, muss man von einer URI sprechen.

Ein Permalink ist eine spezielle URL, die den Inhalt eigentlich dynamischer Webseiten permanent "eingefroren" zugänglich macht. Bei deren Aufruf erhält ein Besucher immer dieselbe Seite, egal, wann er sie aufruft. Obwohl sich Übersichtsseiten aufgrund des chronologischen Bezugs bei jedem neuen Blogeintrag ändern, erlaubt es ein Permalink, Artikel eindeutig zu identifizieren und immer wieder aufrufen zu können.

Permalinks können in Serendipity nach Benutzervorgabe formatiert werden und unterschiedliche Prä-/Postfixe aufweisen (siehe Seite Permalinks-Frontend).

1.14 - Suchmaschinenoptimierung

Suchmaschinenoptimierung

Der Bereich der Suchmaschinenoptimierung (kurz SEO für Search Engine Optimization) ist ein sehr weites Feld. Um Ihre Webseite möglichst weit oben in den Suchergebnissen von Google und Co. erscheinen zu lassen (ihnen also ein hohes Ranking zu verschaffen), gibt es einige Tricks und Kniffe und vor allem auch Konzeptionelles zu beachten.

Webseiten werden heutzutage fast automatisch von allen Suchrobotern gefunden. Jeder Link, der auf Ihre Seite führt, gibt dieser mehr Gewicht bei der Berechnung des Page Rank bei Google [*] Andere Suchmaschinen wie Yahoo benutzen vergleichbare Algorithmen, die ähnlich wie die Rezeptur eines schwarzen Zuckergetränkes als Firmengeheimnis gelten und Grund vieler Spekulationen sind.. Die Begriffe, die Sie auf Ihren Unterseiten angeben, werden jeweils verschlagwortet und erscheinen in Abhängigkeit von der Gewichtung an oberer oder unterer Stelle in der Liste entsprechender Suchmaschinenergebnisse.

Serendipity kann Ihnen teilweise bei der Suchmaschinenoptimierung helfen. Durch sprechende URLs (siehe Seite mod-rewrite) lassen sich Artikeltitel mit in die URL aufnehmen, was die Gewichtung erhöht. Die Verwendung korrekt verschachtelter Überschriften innerhalb der HTML-Seite und eine gültige HTLM-Syntax steigern die Effektivität eines Suchroboters. Weiterhin gibt es Plugins, mit denen Sie Kreuzverkettungen zu ähnlichen Artikeln in Ihrem Blog erstellen können (siehe Seite freetag) oder auch eine spezielle Google-Sitemap-Datei (siehe Seite googlesitemap) anlegen.

Letzten Endes zählt aber auch die Strukturierung Ihrer Artikeltexte sehr viel. Die Verteilung der (Schlüssel-)Wörter ist ebenso wichtig wie die Benutzung von Wörtern, die Ihre Besucher womöglich zu einem Thema erwarten. Nicht unwichtig kann der Aufbau eines Partner-Netzwerks sein, da Verlinkungen auf Ihre Seite den Page Rank erhöhen. Hier wird jedoch auch viel unseriöse Geschäftemacherei betrieben. Hüten Sie sich also vor Tricks, die womöglich ins Gegenteil umschlagen können.

Letztlich erhalten Sie gute Suchmaschinenergebnisse nur dann, wenn Sie für Ihre Besucher interessante Texte oder Services anbieten. Alle anderen technischen Kniffe nutzen Ihnen nichts, wenn die Besucher herausfinden, dass Ihre Webseite nicht das hält, was sie durch eine Suchmaschine verspricht.

1.15 - Protokolle: HTTP, FTP, SSH

Protokolle: HTTP, FTP, SSH

Im Internet gibt es eine beinahe unendliche Zahl verschiedener Protokolle, die Regeln definieren, nach denen Rechner, Anwendungen und Server miteinander kommunizieren. Im Zusammenhang mit Serendipity sind folgende Protokolle von Belang:

  • HTTP, das Hypertext Transfer Protocol, ist sicherlich das geläufigste, denn Sie verwenden es bei jedem Abruf einer Internetseite. Erkennbar ist dies daran, dass die meisten URLs, die Ihr Webbrowser anzeigt, ein vorgestelltes http:// enthalten. Über dieses Protokoll überträgt der Webserver ein Dokument an den eigenen Computer, wobei der Webbrowser als Empfänger dient. Die Sonderform https tritt auf, wenn ein Webserver eine sichere, verschlüsselte Verbindung zur Datenübertragung nutzt. Dabei kommt das Protokoll SSL (Secure Socket Layer) zum Einsatz, so dass die übertragenen Daten durch den Einsatz von Zertifikaten ausschließlich vom Server und vom Client entschlüsselt werden können. Bei http ist es grundsätzlich möglich, dass auch andere Benutzer oder Proxies die Übertragung belauschen können.
  • Obwohl auch HTTP als Protokoll zum Dateitransfer dient und mittlerweile oft dafür eingesetzt wird, gibt es ein noch spezielleres (und älteres) Protokoll für den Dateiaustausch: das File Transfer Protocol FTP. Dieses Protokoll ermöglicht nicht nur den Empfang (Download), sondern auch ein Senden von Dateien (Upload).
  • Im Gegensatz zu graphischen Betriebssystemen wie Windows kann Unix komplett mit textbasierten Befehlen gesteuert werden, was sich gerade im Einsatz als Webserver als große Erleichterung herausgestellt hat. Das geht auch ferngesteuert übers Netz, am besten über einen abgesicherten SSH-Zugang.[*] SSH steht für Secure Shell. Mit Shell bezeichnet man ein Programm, das die interaktive Steuerung über Textbefehle ermöglicht. Diese Zugriffsmöglichkeit auf einen Server bezeichnen viele Leute irrtümlicherweise auch als root-Zugang. Den hat man aber nur, wenn man über das Login (meist als User root) volle Zugriffsrechte für den Server bekommt. SSH-Zugang ist aber auch mit reduzierten Zugriffsrechten (als unprivilegierter Nutzer) möglich. Web-Provider bieten selten SSH-Zugang an. Häufig steht ausschließlich FTP und HTTP zum Zugriff auf einen Server zur Verfügung. Die Bedienung einer SSH-Konsole setzt zudem einiges an Fachkenntnissen voraus, die wir in diesem Buch nicht vermitteln können. Dennoch wird an Stellen, wo SSH-Zugriff die Arbeit erleichtert, auf diesen eingegangen.
1.16 - Frontend, Backend, Admin-Oberfläche

Frontend, Backend, Admin-Oberfläche

Bei vielen Web-Anwendungen unterscheidet man zwischen Frontend und Backend. Vereinfacht ausgedrückt ist ein Frontend all das, was der Besucher einer Webseite sieht. Als Backend oder Admin-Oberfläche bezeichnet man das, was ein Redakteur oder Administrator nach einem Login in den geschützten Bereich sehen kann.

 

1.17 - Cookies und Sessions

Cookies und Sessions

Da HTTP ein verbindungsloses Protokoll ist, "vergisst" der Webserver nach jedem Zugriff, was der Benutzer beim vorigen Aufruf getan hat. Das ist besonders bei dynamischen Web-Anwendungen ärgerlich, da man sich normalerweise bei jeder Aktion erneut einloggen müsste. Als rettenden Kniff gibt es das Konzept der Sessions oder Sitzungen.

Webbrowser besitzen einen kleinen Datenspeicher. Dort kann ein Webserver den Browser anweisen, eine kleine Datenmenge auf der eigenen Festplatte zu speichern. Diesen kleinen Datensatz nennt man Cookie. Er wird meistens dazu eingesetzt, einen Besucher eindeutig zu identifizieren, so dass er autorisierte Aktionen ausführen kann. Cookies haben einen schlechten Ruf erworben, da viele Werbetreibende sie dazu benutz(t)en, ihre Werbe-Zielgruppe eindeutig wiederzuerkennen und Statistiken über deren Nutzerverhalten zu sammeln. Auch besteht oft die Angst, dass ein Webserver so auf die eigene Festplatte zugreifen könnte.

Diese Furcht ist normalerweise unbegründet. Fast alle Browser ermöglichen es Ihnen, Cookies nur von vertrauenswürdigen Quellen und nur im Bedarfsfall anzunehmen oder abzuweisen. Serendipity benötigt solche Cookies ebenfalls für das Frontend und das Backend, daher muss der Webbrowser so eingestellt werden, dass er Cookies annimmt.

Um Nutzeraktionen als zusammengehörige Session zu erkennen, speichert Serendipity eine einfache Zufallskombination aus Buchstaben und Zahlen, die Session-ID, als Cookie im Browser des Besuchers. Bei jedem Folgeaufruf überträgt dieser die ID zurück an den Server, der damit den Besucher identifizieren und zuvor gesetzte Variablen (die Sessiondaten) wiederherstellen kann. Sessiondaten werden auf dem Server gespeichert und nicht in Cookies, so dass der Nutzer sie nicht beliebig verändern kann.

Eine Sitzung ist zeitlich begrenzt. Das heißt, dass nach einem gewissen Timeout die Sessiondaten auf dem Server (automatisch) gelöscht werden und keinen unnötigen Speicherplatz beanspruchen.

1.18 - Parsen und Kompilieren

Parsen und Kompilieren

Der englische Begriff to parse beschreibt das maschinelle, automatisierte Auslesen einer Datei. Bei diesem Vorgang interpretiert ein Parser etwaige Platzhalter und Instruktionen (Schleifen, Bedingungen ...).

Die Smarty-Templatedateien enthalten allesamt Anweisungen, die erst nach diesem Vorgang des Parsens gültige HTML-Ausgaben enthalten.

Alternativ bezeichnet man diesen Vorgang auch als Kompilierung (von englisch: to compile). PHP selbst stellt eine interpretierende Skriptsprache dar, die erst nach der Interpretation der PHP-Funktionen und -Anweisungen einen maschinenausführbaren Code zurückliefert.

Kapitel 2: Einrichtung / Installation

Die folgenden Installationsanweisungen sind bewusst sehr ausführlich gehalten, um auch Anfängern den Einstieg zu ermöglichen. Fortgeschrittene Anwender finden eine Zusammenfassung im Abschnitt Schnelle Installation auf Seite Schnelle Installation.

 

2.1 - Wahl der Waffen

Wahl der Waffen

Um Serendipity voll auszunutzen, benötigt man einiges an Zusatzsoftware, als erstes ein Programm um Dateien (und auch Serendipity selbst) auf den eigenen Server hochzuladen. Üblicherweise geschieht dies mittels eines FTP-Programmes, in manchen Fällen aber auch per SSH bzw. SFTP [*] siehe Abschnitt Protokolle auf Seite Protokolle. Sollten Sie FTP einsetzen, empfiehlt sich ein Programm, das mit Threads [*] Threading wird von FTP-Programmen benutzt, um mehrere gleichzeitige Verbindungen zu einem Server aufzubauen. umgehen kann, was den Upload vieler kleiner Dateien beschleunigt. Für Windows sind SmartFTP oder FileZilla [*] https://www.smartftp.com/ https://filezilla-project.org/ für solche Zwecke empfehlenswert. Weiterhin sollte das FTP-Programm auch ermöglichen, Dateirechte mit dem Befehl chmod zu ändern.

Zum Entpacken von Serendipity benötigen Sie ein Programm wie 7-Zip oder Winzip oder entsprechende Kommandozeilen-Tools in einer Linux-Umgebung.

Um das Blogsystem zu bedienen, benötigen Sie selbstverständlich einen aktuellen Webbrowser. Serendipity läuft mit allen gängigen Webbrowsern (Mozilla Firefox, Google Chrome / Chromium, Edge, Vivaldi, Opera, Safari, und Weitere). Um später leicht Änderungen an Ihrem Layout durchzuführen, empfiehlt der Autor den Einsatz von Mozilla Firefox oder Chromium Variationen, um im Bedarfsfall Designänderungen direkt in der Browser-Ansicht testen. Dies erleichtert die Template-Erstellung ungemein.

Alle großen Browser verfügen über geeignete Developer-Tools (meist unter der Tastatur-Taste [F12] erreichbar [*] Das ist natürlich spezifisch in verschiedenen Browsern auf verschiedenen Betriebssystemen. Zum Beispiel wäre das gleiche auf OS X in Chrome so [⌥ + ⌘ + J] zu erreichen.), die die genannten Änderungen spielerisch einfach “am lebenden Objekt” einer Webseite ermöglichen. [*] https://developer.mozilla.org/en-US/docs/Tools https://developer.chrome.com/devtools

Zur Verwaltung von Datenbanken und Tabellen gibt es zahlreiche SQL-Anwendungen. Bei der Benutzung von MySQL ist das Web-basierte phpMyAdmin [*] https://www.phpmyadmin.net/ sehr zu empfehlen, für PostgreSQL gibt es analog phpPgAdmin [*] https://github.com/phppgadmin/phppgadmin und für SQLite phpSQLiteAdmin.[*] https://www.phpliteadmin.org/ Die Installationsanleitung für diese Web-Anwendungen schlagen Sie bitte auf den jeweiligen Projekt-Webseiten nach.

 

2.2 - Installation

Installation

Im Folgenden gehen wir davon aus, dass Sie entweder selbständig einen Webserver mit PHP und Datenbanken eingerichtet haben oder von einem Dienstleister einen entsprechend aufgesetzten Webserver bereitgestellt bekommen.

Dort müssen Sie Serendipity unterhalb des Document Root (siehe Seite DocRoot) ablegen. Im Folgenden nennen wir dieses Verzeichnis exemplarisch /var/www/example.com. Alle Angaben, die diesen Pfad enthalten, müssen Sie auf Ihre individuellen Gegebenheiten anpassen.

Sie werden Serendipity in einem Unterverzeichnis dieses Stammpfads installieren, so dass Sie das Blogsystem später über die URL http://www.example.com/serendipity/ aufrufen können. Ob Sie dieses Unterverzeichnis ebenfalls serendipity nennen, bleibt Ihnen überlassen - es darf auch blog, tagebuch oä. heißen. Sie sollten jedoch Sonderzeichen wie den Unterstrich (_) sowie Zahlen am Anfang oder Ende des Verzeichnisnamens vermeiden, da dies zu Problemen mit dynamisch generierten URLs führen kann.

Sie können Serendipity natürlich auch direkt ins Stammverzeichnis selbst installieren. Beachten Sie jedoch dabei, dass dadurch die Installation anderer Software, etwa eines Forums oder eines Statistikprogramms, schwieriger werden könnte, wenn die URL-Umformung aktiviert wurde und Serendipity direkte Zugriffe auf Unterverzeichnisse möglicherweise als eigene Seitenausgabe auffasst (siehe Seite mod_rewrite ganz unten und .htaccess im Allgemeinen).

2.2.1 - Upload der Dateien

Upload der Dateien

Serendipity Styx sollten Sie natürlich direkt auf der GitHub-Projektseite.[*] https://github.com/ophian/styx/releases unter Releases herunterladen. Es ist ratsam mit den namentlich ausgezeichneten Downloads zu beginnen, denn die Source code (zip) und Source code (tar.gz) Dateien sind reine Developer snapshots, während die namentlichen Serendipity Archive über eine interne Bereinigung und mehrere Sicherheitsmaßnahmen wie Berechtigungen etc. verfügen.

Auf GitHub finden Sie sowohl die aktuellste Ausgabe als auch Beta- und ältere Versionen und die täglichen Snapshots. Obwohl es sich bei Letzteren um die tagesaktuellen Entwicklerversionen handelt, sind diese bei Serendipity für gewöhnlich sehr stabil.

Außerdem können Sie die Pakete in mehreren Archivformaten herunterladen: als zip-Datei, sowie als xz (Dateinamensendung tar.xz) oder gzip (Dateinamensendung tar.gz) gepackten Tarball. Alle drei Varianten enthalten die gepackten PHP-Dateien, die Sie auf Ihren Webserver hochladen müssen. Für Windows-Benutzer ist das zip-Archiv am einfachsten zu handhaben, unter Unix empfiehlt sich der Tarball. Am besten schauen Sie vorher kurz einmal nach welches Format tatsächlich angeboten wird.

Falls Sie via ssh direkten Shellzugriff auf Ihren Webserver haben, laden Sie das Paket mittels wget ohne Umwege direkt auf den Server und entpacken es mit einem Kommandozeilen-Programm:


    user@server:~# cd /var/www/example.com/
user@server:~# wget "https://github.com/ophian/styx/releases/download/3.2.0/serendipity-3.2.0.tar.xz"
[...]
user@server:~# tar -xvf serendipity-3.2.0.tar.xz
[...]

Anderenfalls laden Sie das Paket auf Ihren eigenen Rechner und entpacken es dort mit einem geeigneten Programm in ein temporäres Verzeichnis. Aus diesem Ordner heraus laden Sie alle Dateien und Unterverzeichnisse des entpackten serendipity-Unterverzeichnisses mit allen Dateien mittels FTP-Programm auf Ihren Webserver.

Achten Sie beim Aufspielen der Dateien unbedingt darauf, dass der Transfer nicht an einer Stelle abbricht oder fehlschlägt. Teilweise hochgeladene Dateien können Serendipity unbenutzbar machen. Da insgesamt mehrere hundert kleine Dateien hochgeladen werden, empfiehlt es sich, im FTP-Programm die Benutzung sogenannter Threads zu aktivieren. Damit öffnet es mehrere parallele FTP-Verbindungen und lädt die Dateien so schneller hoch. In jedem Fall sollten Sie sorgfältig auf etwaige Fehlermeldungen achten.

2.2.2 - Abgesicherte Installation

Abgesicherte Installation

Serendipity Styx wird über eine sogenannte abgesicherte Installation geschützt, um zufällige andere Gäste aus dem Installationsprozess herauszuhalten. Dazu dient eine temporäre install_token.php Datei, die man schnell per FTP heraufladen und im Root Verzeichnis von Serendipity platzieren muss. Um eine abgesicherte Installation auszuführen, müssen Sie diese Datei namens install_token.php mit dem String (Beispiel Token)

<?php $install_token = 'ea032be371d64ec77009257f6f0f9b424b182519'; ?>

in diesem Wurzelverzeichnis erstellen. Achten Sie darauf keine zusätzlichen Leerzeichen oder Zeilen am Anfang oder Ende der Datei einzufügen. Dieser Token ist einzigartig und fixiert die Autorisierungs-Beziehung zwischen Ihnen und dem Installer.

Sobald diese Datei existiert, müssen Sie die Installation innerhalb der nächsten XX Minuten ausführen und dürfen ihren Browser währenddessen nicht schließen. Sie müssen Cookies erlauben.

Fügen Sie also nun den Sicherheits Install Token ein, der Ihnen auf der Seite angegeben wird, laden Sie die Datei hoch und reloaden Sie die Browserseite.

Sie sind nicht autorisiert die Installation auszuführen, wenn Ihr vorgegebener Install-Token nicht demjenigen aus der hochgeladenen Datei install_token.php entspricht. Stellen Sie sicher, dass Sie die Datei mit dem korrekten Inhalt erstellt haben. Sie können einen neuen Token erstellen, in dem Sie die Datei löschen.

Ist ihr sicherer Install-Token gültig, können Sie Serendipity wie gehabt installieren.

Selbst wenn Sie vergessen sollten die Datei nach getanem Werk wieder zu löschen, richtet diese keinen Schaden an.

2.2.3 - Einrichten der Verzeichnisse

Einrichten der Verzeichnisse

Nach dem Upload finden Sie auf Ihrem Webserver im Verzeichnis serendipity einige Dateien mit .php-Endung (index.php, comment.php, serendipity_admin.php ...) sowie einige Unterverzeichnisse (bundled-libs, docs, include, lang, plugins, ...).

Um Zugriffsrechte auf einem Server zu verwalten, bedienen sich sowohl Windows- als auch Linux-Systeme sogenannter Eigentümer- und Gruppenrechte. Jeder Benutzer des Systems kann Dateieigentümer und jeder Eigentümer kann Mitglied einer oder mehrerer Benutzergruppen sein.

Jede Datei (und jedes Verzeichnis) auf einem Server ist einem Eigentümer und einer Gruppe zugewiesen. Für beide wird der Zugriff auf eine Datei über ein Zugriffs- (oder Ausführbarkeits-), Lese- und Schreibrecht geregelt. Meist hat ein Eigentümer die vollen Rechte an einer Datei: Er kann sie ansehen, ändern und löschen. Die anderen Mitglieder derselben Benutzergruppe können jedoch abweichende Rechte haben, so dass sie die Datei nur ansehen, aber nicht verändern dürfen. Zudem muss noch geregelt werden, welche Zugriffsrechte Benutzer haben, die weder Eigentümer noch Gruppenmitglieder sind. Auch für diese "anderen Benutzer", also den "Rest der Welt", werden Zugriffs-, Lese und Schreibrecht aufgeteilt.

Wenn Sie eine Datei mittels FTP auf einen Webserver laden, tun Sie dies (zwangsläufig) mit dem Benutzeraccount, der für den FTP-Zugriff eingerichtet wurde. Hochgeladene Dateien werden diesem Benutzeraccount und standardmäßig einer Gruppe zugewiesen, der Ihrem Benutzerkonto angehört. Dieses Vorgehen stellt sicher, dass andere Benutzer, die auf demselben Server tätig sind, nicht einfach Ihre Dateien lesen oder verändern können. Optimalerweise haben diese keine Möglichkeit, auf von Ihnen hochgeladene Dateien zuzugreifen.

Die Webserver-Software, die die von Ihnen hochgeladenen Dateien interpretiert und als Webseite ausliefert, läuft ebenfalls mit den Rechten eines bestimmten Benutzers. Dieser heißt häufig www-data, wwwrun oder auch nobody. Damit dieser Systembenutzer Software wie Serendipity ausführen kann, muss er bestimmte Rechte an den von Ihnen hochgeladenen Dateien haben. Das müssen Sie sicherstellen. In üblichen Konfigurationen ist Ihr Benutzeraccount Mitglied derselben Gruppe wie der Webserver-Nutzer, die Lesezugriff auf alle hochgeladenen Dateien hat.

Beim Hochladen von Dateien mittels FTP können Sie in diese Rechte eingreifen. Dazu bieten viele Programme bei Rechtsklick auf eine Datei oder ein Verzeichnis ein Menü namens Permission oder CHMOD an (Abbildung 2.1a).

chmod.png
Abbildung 2.1a: CHMOD-Maske des FTP-Programmes FileZilla
Abbildung 2.1b: CHMOD-Über die Linux Konsole

Dort trägt man, Unix-Konventionen entsprechend, die Zugriffsrechte für Eigentümer/Benutzer (Owner), Gruppe (Group) und Rest (Other) ein: für jede dieser drei Nutzerkategorien eine Zahl.

Eine 0 bedeutet "kein Zugriff", eine 1 "Ausführen möglich", eine 2 "Schreiben erlaubt" und eine 4 "Lesen erlaubt". Diese Zahlen lassen sich addieren, so dass ein Lese- und Schreibzugriff durch die Zahl 6 angegeben wird. Für Verzeichnisse gilt dabei, dass diese nur betreten werden dürfen, wenn das Recht mit der Zahl 1 in der Summe enthalten ist, etwa beim Vollzugriff mit 7.

Mit der Zugriffsmaske 777 erhält jeder Nutzer volle Zugriffsrechte auf die betroffene Datei. Damit stellt man einfach sicher, dass sowohl der eigene Benutzeraccount als auch der des Webservers volle Zugriffsrechte haben -- allerdings auch andere Benutzer auf demselben Server. Daher ist es besser, die Zugriffsrechte von Dateien und Verzeichnissen so strikt wie möglich zu setzen. Wie dies konkret bei Ihnen aussieht, klären Sie am besten mit Ihrem Provider.

Als Beispielhaft gelten also 775 für Verzeichnisse und 644 für Dateien. Am besten konsultieren Sie die Serendipity Styx FAQ für mehr.

Damit der Webserver Serendipity ausführen kann, benötigt er Leserechte für alle Dateien und Verzeichnisse. Um Serendipity zu installieren, braucht er zudem anfangs Schreibzugriff auf das Stammverzeichnis, damit er die Dateien serendipity_config_local.inc.php und .htaccess erstellen kann. Darüber hinaus wird das Installationsprogramm die Unterverzeichnisse templates_c, archives und uploads zu erstellen versuchen. Sollte es diese schon geben, müssen Schreibrechte für den Webserver-Benutzer dafür vergeben werden. Nach der Installation benötigt der Webserver nur noch Schreibrechte auf die genannten drei Unterverzeichnisse und zwei Dateien, den globalen Schreibzugriff auf das Stammverzeichnis können Sie also wieder entfernen.

Wenn Sie darüber hinaus das Spartacus-Plugin zum Download von Templates und Plugins nutzen wollen (siehe Kapitel Spartacus ab Seite Spartacus), müssen auch die Verzeichnisse plugins und templates beschreibbar sein (und bleiben).

2.2.4 - Einrichten der Datenbank

Einrichten der Datenbank

Nachdem nun also alle notwendigen Dateien hochgeladen wurden und Sie die Zugriffsrechte konfiguriert haben, müssen Sie eine Datenbank für Serendipity einrichten.

Je nachdem, welche Datenbanksoftware auf Ihrem Webserver zur Verfügung steht, kann dieser Vorgang unterschiedlich ausfallen.

Verwendet Ihr Webserver mindestens PHP5, ist die Datenbank SQLite automatisch verfügbar. Dieses Datenbanksystem speichert alle seine Datenbanken und Tabellen in einer einzigen Datei. Diese wird im Serendipity-Verzeichnis abgelegt und während der Installation ohne Ihr Zutun automatisch erstellt, es sind daher keine vorbereitenden Eingriffe notwendig.

Beim Einsatz von MySQL und PostgreSQL geht Serendipity davon aus, einen Datenbankbenutzer und eine leere Datenbank vorzufinden. Üblicherweise erhält man die Zugangsdaten von seinem Provider, da der Benutzeraccount bereits besteht. Manche Provider gestehen Ihnen nur eine einzelne Datenbank zu, so dass Sie keine neuen erstellen können. Das ist nicht weiter tragisch, da sich Serendipity problemlos mit anderen Anwendungen innerhalb derselben Datenbank betreiben lässt. Viele Provider bieten zudem eigene Oberflächen zur Erstellung einer Datenbank an.

Serendipity benötigt lediglich irgendeine Datenbank für seine Tabellen -- man kann also problemlos eine bereits bestehende Datenbank für die Installation benutzen.

Für Styx und MariaDB/MySQL geben Sie der Datenbank am besten gleich die korrekte utf8mb4_unicode_ci, bzw. noch besser die neuere und erweiterte utf8mb4_unicode_520_ci Kollation mit auf den Weg.

Wie auch an anderer Stelle erwähnt, wird der Name MySQL hier als Synonym für MariaDB/MySQL Datenbanken benutzt. Empfohlen ist auf MariaDB zu setzen, ein Unternehmen das vom MySQL-Gründer Michael "Monty" Widenius betrieben wird, und das in wesentliches Details gegenüber Oracles MySQL zu empfehlen ist.

Sollte noch kein Datenbankbenutzeraccount bestehen, müssen Sie ihn anlegen. Dabei ist wichtig, dass der Benutzer über alle Rechte verfügt, die Serendipity später im Betrieb benötigt. Konkret heißt das, dass er Tabellen anlegen (CREATE), aktualisieren (ALTER) und indizieren (INDEX) sowie Datensätze anlegen (INSERT), aktualisieren (UPDATE), lesen (SELECT) und löschen (DELETE) darf.

Um für MySQL einen solchen Benutzer anzulegen, benutzt man (in einem Programm wie phpMyAdmin, welches die meisten Provider anbieten) folgende SQL-Syntax:


    CREATE DATABASE serendipity;
GRANT SELECT, CREATE, INSERT, UPDATE, DELETE, ALTER, INDEX ON serendipity
TO 'serendipity'@'%' IDENTIFIED BY PASSWORD 'passwort';

Diese beiden Befehle erstellen die leere Datenbank namens serendipity und den gleichnamigen Benutzer, der die notwendigen Zugriffsrechte erhält und sich über das Passwort passwort ausweisen muss. Bei PostgreSQL benutzt man folgende Syntax:


    CREATE USER serendipity WITH PASSWORD 'passwort';
CREATE DATABASE serendipity WITH OWNER = serendipity;
GRANT SELECT, CREATE, INSERT, UPDATE, DELETE, ALTER ON DATABASE
serendipity TO 'serendipity'

Um die Serendipity-Installation erfolgreich durchzuführen, benötigen Sie den Benutzernamen des Datenbanknutzers (hier serendipity), dessen Passwort, den Namen einer leeren Datenbank und den Namen (oder die IP-Adresse) des Datenbankservers.

2.2.5 - Die grafische Installationsroutine

Die grafische Installationsroutine

Nach diesen Vorarbeiten rufen Sie die URL Ihrer Serendipity-Installation im Browser auf, hier also http://www.example.com/serendipity/. Versuchen Sie nicht, eine Datei Ihrer lokalen Festplatte aufzurufen oder eine Datei mittels FTP-Zugriff zu öffnen (zB. via Doppelklick). Dies würde Ihnen lediglich den Quellcode der PHP-Anwendung anzeigen. Stattdessen müssen Sie den Webbrowser einsetzen, damit Ihr Webserver die PHP-Anwendung ausführt.

Bei korrekter Einrichtung des Webservers sehen Sie nun eine Kurzübersicht wie in Abbildung 2.2, die aufführt, welche Voraussetzungen der Server erfüllen muss, ehe Sie fortfahren können. Sollte sich diese entgegen Ihren Wünschen in englischer Sprache präsentieren, konfigurieren Sie Ihren Browser so um, dass Deutsch die bevorzugte Sprache darstellt.

install.png
Abbildung 2.2: Installationsbildschirm (mit exemplarischen Fehlern wie sie im Alltag fast nie vorkommen)

Weist Sie die Übersicht auf einen Fehler bei den Schreibrechten oder den Server-Einstellungen hin, beheben Sie ihn und rufen Sie die Installationsoberfläche erneut auf. Warnungen werden mit roter Schriftfarbe dargestellt, eingeschränkte Funktionen oder Hinweise in Gelb; korrekte Einstellungen sind grün hervorgehoben.

Hinweise der Installationsoberfläche zeigen dabei einen Unterschied zwischen dem von Serendipity empfohlenen Wert und der Einstellung auf Ihrem Webserver an. Im Gegensatz zu Fehlern können Sie Serendipity bei solchen Hinweisen aber trotzdem betreiben, jedoch entweder mit Einbußen bei der Performance oder Funktionalität.

Stimmen die systemseitigen Voraussetzungen, was gerade bei den Rechten oft schon die Regel ist, starten Sie die Installationsoberfläche über einen der beiden Links am Ende der Seite: Einfache Installation oder Fortgeschrittene Installation.

Die Einfache Installation verlangt von Ihnen nur die absolut notwendigen Angaben. Dagegen bietet die Fortgeschrittene Installation sämtliche Konfigurationsoptionen an, die sich auch später im laufenden Betrieb ändern lassen. Da wir in Kapitel Konfiguration ab Seite Konfiguration detailliert auf alle Optionen eingehen, klicken Sie an dieser Stelle am besten auf Einfache Installation.

install2.png
Abbildung 2.3: Initiale Konfiguration

Die Folgeseite (Abbildung 2.3) stellt alle Installationsoptionen in Gruppen unterteilt dar.

Der Abschnitt: Datenbankeinstellungen

In diesem Bereich stellen Sie die Zugangsdaten für die gewünschte Datenbank ein. Im Feld Datenbanktyp können Sie zwischen allen im PHP-Kern verfügbaren Datenbanktypen wählen.

Den Servernamen (meist localhost oder ein Name wie db1231231.puretec.de) tragen Sie genauso wie den Namen und das Passwort des Datenbankbenutzers in die zugehörigen Felder ein. Beim Datenbanktyp SQLite spielen diese Einstellungen keine Rolle und dürfen leer bleiben.

Als Datenbankname tragen Sie den Namen der, entsprechend der Beschreibung auf Seite DBeinrichten, erstellten Datenbank ein. Darin erstellt Serendipity Tabellen, deren Namen es das Präfix serendipity_ oder styx_ voranstellt. Diese Vorsilbe ermöglicht die Installation in eine Datenbank, in der bereits andere Tabellen liegen. Wählen Sie in der Fortgeschrittenen Installation ein anderes Präfix, können Sie auch mehrere Serendipity-Instanzen auf einem Server installieren.

Der Abschnitt: Generelle Einstellungen

Die Optionen im Abschnitt Generelle Einstellungen legen den Standard-Benutzer für das zu installierende Blog fest. Tragen Sie als Admin-Benutzername also den Namen ein, den Sie später beim Login verwenden wollen. Er sollte möglichst keine Sonderzeichen oder Umlaute enthalten, da dies zu Problemen bei unterschiedlichen Zeichensätzen führen kann. Das Gleiche gilt für das Admin-Passwort; lediglich im Feld Voller Name können Sie auch auf Sonderzeichen zurückgreifen.

Die Angabe der Admin-E-Mail-Adresse benötigt Serendipity beim Verschicken von Hinweisen über neu eingegangene Kommentare und Trackbacks.

Den Blog-Titel und die Blog-Beschreibung zeigt das Frontend im Kopfbereich an und verwendet beides auch für die Titelzeile im Browser.

Die Sprache des Blogs gibt die Standardsprache vor, in der Serendipity Nachrichten und Meldungen darstellt. Später lässt sich für Besucher der Webseite und für jeden Redakteur individuell eine Sprache einstellen (siehe Seite eigeneeinstellungen-sprache).

Der Abschnitt: Design und Optionen

Der letzte Einstellungsblock legt bei der einfachen Installation lediglich fest, ob der Standard-Redakteur den WYSIWYG-Editor zur Erstellung von Einträgen benutzen möchte.

Abschluss der Installation

Sind alle Optionen eingetragen (keine Angst, Sie können sie später allesamt wieder verändern), schließen Sie den Installationsvorgang durch einen Klick auf Vollständige Installation ab.

Die letzte Seite der Installationsroutine (Abbildung 2.4) informiert Sie über die von Serendipity durchgeführten Aktionen. Dazu gehört das Anlegen der notwendigen Tabellen und des Standardbenutzers und die Einrichtung der Standard-Plugins. Sollten Sie an dieser Stelle noch nicht über eine passende Datenbank verfügen oder andere Fehler auftreten, informiert Sie Serendipity auch darüber. Dann heißt es zurück zu Abschnitt DBeinrichten ab Seite DBeinrichten.

install3.png
Abbildung 2.4: Einrichtung abgeschlossen

Bei fehlerfreier Installation können Sie über die URL http://www.example.com/serendipity/ das Frontend aufrufen und unter http://www.example.com/serendipity/serendipity_admin.php mit den gewählten Login-Daten auf das Backend zugreifen.

2.2.6 - Die Konfigurationsdatei serendipity_config_local.inc.php

Die Konfigurationsdatei serendipity_config_local.inc.php

Alle grundlegenden Konfigurationsvariablen wie die Daten für den Datenbankzugang und die aktuelle Versionsnummer speichert Serendipity in der Datei serendipity_config_local.inc.php im Stammverzeichnis. Diese Datei sieht ungefähr wie folgt aus:

<?php
    /*
      Serendipity configuration file
      Written on Thu, 14 Apr 2022 11:22:27 +0200
    */

    $serendipity['versionInstalled']  = '3.8.2';
    $serendipity['dbName']            = 'serendipity';
    $serendipity['dbPrefix']          = 'styx_';
    $serendipity['dbHost']            = '127.0.0.1';
    $serendipity['dbUser']            = 'root';
    $serendipity['dbPass']            = 'root';
    $serendipity['dbType']            = 'mysqli';
    $serendipity['dbPersistent']      = false;

    // End of Serendipity configuration file
    // You can place your own special variables after here:

?>

Ähnlich wie bei der .htaccess-Datei (siehe Seite htaccess) können Sie in dieser Datei später auch eigene Konfigurationsparameter nachtragen. Fügen Sie diese nach der Zeile You can place your own special variables after here: ein, so dass Serendipity sie bei einer Konfigurationsänderung nicht versehentlich überschreibt. Je nach Konfiguration des Webservers kann es sein, dass Sie keine Schreibrechte für diese Datei besitzen. Dies lässt sich mit dem fixperm.php-Skript (siehe Seite fixperm) ändern.

2.2.7 - Fehler bei der Installation

Fehler bei der Installation

Die zahlreichen Konfigurationsmöglichkeiten von Webservern geben Spielraum für hinterlistige Fehler.

Nur eine leere Seite erscheint

Wenn an einer Stelle der Installation lediglich eine weiße Seite erscheint, liegt dies meist an sogenannten PHP Fatal Errors. Normalerweise sieht man diese direkt auf der Webseite, aber einige Webserver sind so eingestellt, dass sie PHP-Fehlermeldungen unterdrücken. Wenn das Installationsskript endet, ohne vollständig ausgeführt worden zu sein, führt dies dann zu den weißen/leeren Seiten.

Um die Fehlermeldung dennoch zu sehen, versuchen Sie, in den PHP-Fehlerlogfiles Ihres Webservers nachzuschauen. Diese liegen meist in einem logs-Unterverzeichnis. Den genauen Speicherort solcher Dateien teilt Ihnen der Provider mit.

Man kann aber auch versuchen, im Serendipity-Stammverzeichnis eine Datei namens .htaccess anzulegen und mit folgender Zeile zu füllen:


    php_value display_errors on

Beim Speichern der Datei achten Sie bitte unbedingt darauf, dass PHP dafür Schreibrechte erhalten muss, da es diese Datei während der Installation automatisch verändert. Achten Sie auch darauf, dass einige FTP-Programme Dateien, die mit einem Punkt anfangen, verstecken, so dass Sie diese erst nach Umkonfiguration des Programms sehen.

Die Fehlermeldungen geben meist Aufschluss über die Ursache. Oft sind dies fehlende oder defekte Dateien. Enthält eine Datei Parse Errors [*] PHP meldet einen Parse Error, wenn eine Datei fehlerhafte Zeichen oder eine ungültige Syntax enthält., ist dies meist auf fehlerhafte FTP-Uploads zurückzuführen. Auch fehlende Leserechte kommen als Ursache in Frage.

Am häufigsten kann der Ordner templates_c nicht beschrieben werden. Dieser ist für von Smarty kompilierte Dateien gedacht, die für die Darstellung des Frontends verwendet werden.

HTTP/500 Fehlermeldung

Serendipity setzt einige Standardoptionen über die Datei .htaccess. Von einigen Webservern wird dieser Mechanismus jedoch nicht unterstützt und kann gar zu einem Abbruch des Skripts führen. Sollte sich Serendipity nach der Installation nicht aufrufen lassen, löschen Sie die .htaccess-Datei einfach. Sie ist für den Betrieb nicht zwingend notwendig. Ohne diese Datei können Sie jedoch keine URL-Umformung benutzen, die für Serendipity "sprechende URLs" ermöglicht (siehe Seite urlformung).

Seiten werden nicht gefunden

Um "sprechende URLs" wie http://www.example.com/serendipity/archives/1-Mein-erster-Artikel.html zu unterstützen, kann Serendipity zwei Arten der URL-Umformung unterstützen. Da Pfade und Dateien wie oben genannt nur virtuell erstellt werden und nicht wirklich auf dem Server liegen, muss Serendipity über Umleitungen auf seine zentrale Datei index.php geleitet werden.

Diese Umleitung konfiguriert Serendipity anhand der Datei .htaccess. Dort gibt es zwei Varianten der URL-Umformung: mod_rewrite und Apache Errorhandling.

mod_rewrite ist die komfortabelste Variante der Umformung, benötigt aber ein zusätzliches Webserver-Modul, welches nicht immer verfügbar ist. Apache Errorhandling setzt einen Trick ein, der eigentlich nicht gefundene Seiten (HTTP/404 Not Found) virtuell auf eine zentrale Seite umleitet, die dann den eigentlichen Inhalt ausgibt.

Serendipity versucht bei der Installation die beste Art für Sie automatisch zu erkennen. Auf manchen Servern gelingt dies jedoch nicht, und es kann sein, dass Serendipity die URL-Umformung fälschlicherweise aktiviert. Wenn diese Umformung nicht klappt, gehen alle Links von Serendipity somit "ins Leere". Dazu zählen auch Links zum Stylesheet des Frontends, die das Layout beeinflussen.

Löschen Sie die .htaccess, um dieses Problem zu lösen. Danach suchen Sie die Serendipity-Administrationsoberfläche via http://www.example.com/serendipity/serendipity_admin.php auf, loggen sich ein und gehen über den Menüpunkt Konfiguration zu der Unterebene Design und Optionen. Dort findet sich die Option URL-Formung. Diese Option stellen Sie auf None und speichern die Konfiguration. Daraufhin wird die .htaccess-Datei neu erstellt.

Nun sollten Sie Serendipity-Unterseiten wieder problemlos öffnen können.

Installation erneut ausführen

Wenn die Installation aus irgendwelchen Gründen fehlgeschlagen ist, möchten Sie Serendipity vielleicht von Grund auf neu installieren. Dazu muss Serendipity in den Ursprungszustand zurückversetzt werden. Löschen Sie dafür die Datei serendipity_config_local.inc.php. Diese Datei enthält die Basis-Konfigurationsparameter des Blogs, und sobald diese Datei nicht mehr vorhanden ist, erkennt Serendipity nicht mehr, dass es installiert ist.

Auch die Datei .htaccess sollte vor einer neuen Installation gelöscht werden. Bei beiden Dateien ist zu beachten, dass sie von PHP erstellt wurden und von Serendipity mit minimalen Rechten versehen werden, um diese Daten zu schützen. Daher kann es unter Umständen sein, dass Sie mit Ihrem FTP-Zugang keinen Zugriff mehr auf diese Datei haben!

Um dies zu beheben, bedienen Sie sich eines kleinen PHP-Skripts. Speichern Sie eine Datei namens fixperm.php im Serendipity-Stammverzeichnis mit folgendem Inhalt:

<?php

$ziel = '/var/www/example.com/serendipity/serendipity_config_local.inc.php';
if (chmod($ziel, 0777)) {
  echo "Rechte geändert.";
} else {
  echo "Fehler: Rechte dürften nicht verändert werden.";
  echo "Sie müssen den Provider kontaktieren.";
}

?>

Rufen Sie danach die Datei mittels http://www.example.com/serendipity/fixperm.php im Browser auf. Nach dem Aufruf sollten Sie die Ausgabe "Rechte geändert" sehen, und die Dateirechte sollten nun so verändert worden sein, dass Sie wieder vollen Zugriff auf die Datei haben.

Übrigens können Sie dieses kleine Skript auch später benutzen, um andere Dateien im Serendipity-Verzeichnis wieder mit Zugriffsrechten für Sie auszustatten. Dabei müssen Sie lediglich die Code-Zeile verändern, die den Namen der zu ändernden Datei enthält.

Zuletzt müssen Sie noch die von Serendipity angelegten Datenbanktabellen wieder löschen. Wenn diese Tabellen nicht gelöscht werden, würde Serendipity diese bei einer Neuinstallation schützen wollen. Nur wenn alle Tabellen von Serendipity vorher mittels phpMyAdmin oder Ähnlichem gelöscht werden, wird eine vollständige Neuinstallation möglich sein.

Fehler beim Login

Wenn Sie Fehlermeldungen am Anfang der Seite erhalten, die aussehen wie diese:


    Warning: session_write_close() [function.session-write-close]:
open(/var/lib/php/session/sess_h5a8jerb22q54pkqcjb4qtnqr1, O_RDWR)
failed: Permission denied

dann bedeutet dies, dass Ihr Webserver keinen gültigen Speicherpfad für die PHP-Sessiondateien eingetragen hat. Entweder können Sie den Fehler beheben, indem Sie korrekte Schreibrechte zu dem in der Fehlermeldung genannten Pfad einrichten. Oder Sie müssen einen gültigen Pfad in der Datei php.ini in der Variable session.save_path eintragen.

Ein weiteres Problem, das bei falsch eingerichteten PHP-Sessions auftreten kann, ist, wenn Sie sich nach jedem Klick im Serendipity-Backend erneut einloggen müssen. Dies bedeutet, dass der Webserver Ihre Logindaten nicht in einer Session speichern und Sie somit nicht eindeutig wiedererkennen kann.

Ein ähnliches Problem kann auch dann auftreten, wenn Ihr Browser keine Cookies annimmt, weil sie zB. von einem Werbefilter oder Anti-Virus-Programm gefiltert werden. Auch kann es passieren, dass, wenn Sie die Serendipity-Oberfläche mit einer URL wie http://localhost/serendipity/ aufrufen, die Cookies für eine solche URL nicht angenommen werden. In einem solchen Fall müssten Sie Serendipity über die IP-Adresse wie http://127.0.0.1/serendipity/ aufrufen.

Weiterleitung auf verschiedene URLs

Wenn Sie Serendipity installieren, möchten Sie Ihr Blog möglicherweise unter mehreren URLs aufrufen können.

Ein klassischer Fall dieser unterschiedlichen URLs ist, wenn Ihr Blog sowohl unter http://example.com/serendipity/ als auch http://www.example.com/serendipity/ verfügbar sein soll. Damit Serendipity die jeweils genutzte URL als Standard für Folgeseiten übernimmt, müssen Sie lediglich in der Konfiguration desselben die Option HTTP-Hostname (siehe Kapitel HTTP-Hostname ab Seite HTTP-Hostname) aktivieren.

Diese Funktion hilft Ihnen jedoch nur dann, wenn der benutzte Pfad (in diesem Fall /serendipity/) in allen Fällen gleich bleibt. Sollten Sie Ihr Blog aber sowohl unter der URL http://example.com/serendipity/ als auch http://serendipity.example.com/ darstellen wollen, dann würden Sie diese Vorbedingung nicht erfüllen können. Serendipity kann mit einer derartigen Einstellung nicht umgehen.

Der Grund dafür ist, dass bei einer abweichenden Pfadkomponente die relativen Links nicht mehr korrekt funktionieren. Bei der einen URL müsste Serendipity für den HTTP-Pfad immer /serendipity/ nutzen, während bei der anderen URL immer / genutzt werden müsste. Die Links würden daher nicht übereinstimmen und zu zahlreichen Problemen bei der Darstellung von Grafiken und Verweisen führen.

Das bessere Vorgehen in diesem Fall wäre also die Einrichtung einer Weiterleitung. Dabei sollten Sie sich eine endgültige URL aussuchen und alle weiteren optionalen URLs zu dieser Zielseite weiterleiten.

Weiterleitungen können Sie auf unterschiedliche Weisen realisieren. In unserem Beispiel gehen wir davon aus, dass http://serendipity.example.com/ die Zielseite und http://example.com/serendipity/ die Quellseite darstellt.

Bei vielen Standardinstallationen für mehrere verfügbare URLs würden beide URLs bereits auf dasselbe Verzeichnis verweisen. http://serendipity.example.com/index.php als auch http://example.com/serendipity/index.php würden physikalisch auf dieselbe Datei zeigen, man spricht daher von einem Alias. Sollte dies bei Ihnen der Fall sein, haben Sie zwei Möglichkeiten der Weiterleitung:

  • Weiterleitung via .htaccess bei identischen Serendipity-Verzeichnissen Wenn auf Ihrem Server mod_rewrite zur Verfügung steht, können Sie an den Anfang Ihrer .htaccess-Datei des Serendipity-Verzeichnisses vor dem Blog #Begin s9y folgende Zeilen einfügen: RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example.com [NC]
    RewriteRule ^serendipity/(.*)$ http://serendipity.example.com/$1 [QSA]
    Diese Regel weist den Webserver an, dass sämtliche Zugriffe zu http://example.com/ auf die Zielseite http://serendipity.example.com/ weitergeleitet werden. Sie müssen also jeweils den Quellservernamen, das Quellverzeichnis auf dem Quellserver und den Zielserver in den obigen Zeilen an Ihre Gegebenheiten anpassen.
  • Weiterleitung mittels PHP bei identischen Serendipity-Verzeichnissen Ohne mod_rewrite müssen Sie die Weiterleitung innerhalb der Datei serendipity_config_local.inc.php einprogrammieren. Öffnen Sie diese Datei in einem Editor (bei fehlendem Schreibzugriff schauen Sie sich bitte fixperm.php auf Seite fixperm an) und fügen Sie in die Zeile vor dem letzten ?> Folgendes ein: // Ist der ausführende Server der Quellserver?
    if ($_SERVER['HTTP_HOST'] == 'example.com') {
        // Ersetze böse Sonderzeichen
        $ziel = str_replace(
          array("\n", "\r"), 
          array('', ''),
          $_SERVER['REQUEST_URI']
        );
        
        // Entferne Quell-Pfad zur Weiterleitung
        $ziel = preg_replace('@^/serendipity/@i', '/', $ziel);

        // Leite zu Ziel-Server weiter
        header('Location: http://serendipity.example.com' .$ziel);
        exit;
    }
    Dieser Code sorgt dafür, dass, wenn Serendipity auf dem Quellserver aufgerufen wird, der Besucher automatisch auf die Zielseite weitergeleitet wird.

Sollten durch die Art der Einrichtung jedoch beide URLs (Weiterleitungsquelle und Weiterleitungsziel) auf unterschiedliche Verzeichnisse Ihrer Domain zugreifen, dann können Sie die einfachste Form der Weiterleitung nutzen:

  • Weiterleitung mittels index.html bei unterschiedlichen Serendipity-Verzeichnissen Erstellen Sie die Datei index.html in dem Verzeichnis der Quell-URL (in unserem Beispiel /serendipity/): <html>
      <head>
        <meta http-equiv="refresh" content="0;url=http://serendipity.example.com/">
      </head>
      <body>
      </body>
    </html>
    Beim Aufruf der Quell-URL wird dann unkompliziert auf die Ziel-URL weitergeleitet.
  • Weiterleitung mittels index.php bei unterschiedlichen Serendipity-Verzeichnissen Etwas schneller geht die Weiterleitung mittels PHP, da die Weiterleitung dann intern im Browser ausgeführt wird und Sie nicht vorher kurz eine weiße Seite im Browser aufflackern sehen. Speichern Sie im Quellverzeichnis folgende index.php-Datei: <?php
    header('Location: http://serendipity.example.com/');
    ?>

Einen Sonderfall dieser Weiterleitung stellt das Beispiel dar, wenn Sie Serendipity zwar in einem Unterverzeichnis Ihres Webservers installiert haben (http://example.com/blog/), aber gerne möchten, dass Serendipity beim Aufruf der Haupt-Domain (http://example.com/) direkt aufgerufen wird. Die einfachste Variante hier wäre natürlich, dass Sie Serendipity in das Stammverzeichnis Ihrer Webseite installieren, da dies problemlos möglich ist. Sollten Sie dies aus irgendwelchen Gründen nicht bevorzugen, können Sie ebenfalls die oben genannte Methode der Weiterleitung mittels index.php oder index.html nutzen.

Falsche Anzeige von Datumsangaben oder Sonderzeichen

Serendipity benutzt zur Darstellung von Datumsangaben für Artikel und im Kalender ein serverseitiges System namens locales. Diese locales sind, grob gesagt, eine Sammlung von nationalen Sprachbesonderheiten und geben an, wie in beinahe allen gesprochenen Sprachen die Währungs- und Datumsangaben formatiert und geschrieben werden. Damit Serendipity auf möglichst vielen Sprachumgebungen ohne viel Aufwand lauffähig ist, verlässt es sich auf diesen De-facto-Standard.

Ebenfalls zur weitreichenden Unterstützung verschiedener Sprachen unterstützt Serendipity mehrere Zeichensätze. Ein Zeichensatz regelt, mit welchem Binärsystem Buchstaben für den Computer abgespeichert werden -- denn je nach Zeichensatz ist für einen Computer "ä" nicht gleich "ä". Für die deutsche Sprache ist der standardisierte ISO-8859-1-Zeichensatz üblich. Um jedoch auch mit anderen Sprachen benutzbar zu sein, hat sich der Zeichensatz UTF-8 etabliert, da dieser beinahe alle Sonderzeichen jeder Sprache enthält. Ein arabischer Artikel könnte so also direkt neben einem deutschen Artikel stehen, ohne dass Sonderzeichen falsch dargestellt würden.

Sobald die Zeichensätze vermischt werden, kann es zu Fehldarstellungen im Browser kommen - Mozilla Firefox zeigt statt des korrekten Zeichens dann ein Karo-Symbol mit einem Fragezeichen an. Wenn Sie dies einmal in Ihren Artikeln beobachten, liegt ein solcher Zeichensatzkonflikt vor.

In der Serendipity-Konfiguration können Sie einstellen, ob Serendipity mit nationalem Zeichensatz oder UTF-8 betrieben wird. Standardmäßig wird dies bei der Installation für größtmögliche Kompatibilität direkt auf UTF-8 gesetzt. Sie sollten daher bei einer frischen Installation keinerlei Probleme mit Zeichensätzen erwarten - erst bei späteren Änderungen am System könnten möglicherweise einmal Probleme auftreten.

Die Behandlung von Sonderzeichen zur Speicherung in Datenbanken ist recht komplex und kann mehrere Fehlerursachen haben.

Die erste Fehlerursache kann Ihr Browser sein. Stellen Sie sicher, dass dieser den UTF-8-Zeichensatz darstellen kann. Wenn Sie beim Besuch der Seite http://www.columbia.edu/kermit/utf8.html falsche Sonderzeichen sehen, ist dies ein Indiz für eine fehlerhafte Browserkonfiguration, die Sie mithilfe der Dokumentation Ihres Webbrowser lösen müssen.

Die zweite Fehlerursache kann der Webserver sein, der Zeichensätze selbständig verändert. Apache bietet eine Option an, ein sogenanntes DefaultCharset zu setzen, das die Ausgabe von Sonderzeichen eventuell verändern könnte. Wenn der Webserver nicht die von Serendipity bestimmten Content-Type-HTTP-Kopfzeilen an den Browser sendet, kann es sein, dass der Webserver durch seine Standardeinstellung die Umbelegung durch Serendipity verhindert. Sprechen Sie daher mit ihrem Provider und bitten Sie ihn, diese HTTP-Kopfzeilen zu überprüfen.

Zu guter Letzt gibt es nun noch die Datenbank, die Artikel mit unterschiedlicher Kodierung speichern kann. Gerade zwischen MySQL 4.0 und 4.1 gab es weitreichende Änderungen in der Behandlung von Zeichensätzen, die sich bei einem MySQL-Update darin äußern konnten, dass Serendipity die Sonderzeichen falsch anzeigte. Um dies zu korrigieren, müssen Sie sicherstellen, dass alle MySQL-Tabellen und -Spalten als Collation den übereinstimmenden Zeichensatz benutzen (also de_latin beim ISO-Zeichensatz und utf8 für UTF-8). Sobald dies korrekt übereinstimmt, kann in der Serendipity-Konfiguration die Option Datenbank-Zeichensatzkonvertierung aktivieren gewählt werden, was dann wieder zu einer korrekten Darstellung der Sonderzeichen führen sollte.

In einigen Fällen ist es möglicherweise notwendig, einen vollständigen SQL-Export der Datenbank vorzunehmen und die Datei mittels eines Editors vom ISO-8859-1- ins UTF-8-Format zu überführen, neu zu importieren und danach Serendipity zentral auf UTF-8-Zeichensätze umzustellen. Alternativ können Sie das mit folgendem PHP-Skript erreichen, das einen Datenbankdump namens dump-iso.sql in dump-utf8.sql vom ISO-8859-1-Zeichensatz in den UTF-8-Zeichensatz verwandelt. Etwaige SQL-Befehle (COLLATION), die MySQL-Zeichensätze bestimmen, müssen Sie jedoch manuell in der Datei umwandeln, um sie später als vollständiges UTF-8 importieren zu können:

<?php

$input  = file_get_contents('dump-iso.sql');
$output = @utf8_encode($input);
$fp     = fopen('dump-utf8.sql', 'wb');
if ($fp) {
  fwrite($fp, $output);
  fclose($fp);
} else {
  echo "Keine Schreibrechte, bitte korrigieren.";
}

?>

Zurück aber zu dem Problem mit falsch angezeigten Datumsangaben. Damit der Wochentag "Freitag" nicht als "Friday" oder Ähnliches ausgegeben wird, muss eine deutsche Sprachdatei für das locales-System auf dem Server hinterlegt werden. Locales sind auf allen Betriebssystemen verfügbar und in fast allen Fällen vorinstalliert. Je nach System können sie auch nachinstalliert werden (bei Linux zB. mittels locale-gen). Für jede Sprache gibt es abhängig vom Zeichensatz eine Sprachdatei. Für Deutsch ist es üblicherweise de_DE.UTF8 (UTF-8-Zeichensatz) oder de_DE.ISO88591 (nationaler Zeichensatz). Manchmal ist auf Servern nur das ISO-Locale installiert, und deshalb wird der Monat "März" mit einem falschen Sonderzeichen dargestellt. Abhilfe schafft hier die Installation der passenden UTF8-Locale-Datei. UTF8 ist grundsätzlich immer vorzuziehen.

Die Installation der Locales kann nur vom Serverbetreiber vorgenommen werden, im Problemfall müssen Sie sich also an diesen wenden. Die Locales, die Serendipity anwendet, finden Sie im Übrigen in der Datei lang/serendipity_lang_de.inc.php bzw. lang/UTF-8/serendipity_lang_de.inc.php in einer Zeile wie:


    @define('DATE_LOCALES', 'de_DE.ISO-8859-1, de_DE.ISO8859-1, german, de_DE, de_DE@euro, de');

Die definitive Nutzung der korrekten locales wird sich in Zukunft noch verschärfen, da PHP spätestens mit Version 9 aus Sicherheitsgründen auf diesen besteht. Ansonsten werden Ihrem Zeit und Datumsangaben nur im englischen Format zur Vefügung stehen.

2.3 - Schnelle Installation

Schnelle Installation

  • Serendipity-Release-Paket von der Homepage herunterladen und via FTP auf den Webserver hochladen.
  • Zugriffsrechte überprüfen: Stammverzeichnis und Unterverzeichnis archives, templates_c, uploads müssen Schreibrechte für PHP besitzen, alle anderen Dateien und Verzeichnisse Leserechte.
  • Eine leere Datenbank erstellen, falls noch nicht vorhanden. Sicherstellen, dass der Datenbankbenutzer die Rechte CREATE, INSERT, UPDATE, DELETE, ALTER, INDEX, SELECT besitzt. Im Falle von Styx und MariaDB/MySQL geben Sie der Datenbank am besten gleich eine utf8mb4_unicode_ci, bzw. noch besser die neuere utf8mb4_unicode_520_ci Kollation mit auf den Weg.
  • Via HTTP die Installationsroutine aufrufen: http://www.example.com/serendipity/
  • Der Installationsroutine folgen und die Anfangskonfiguration vornehmen. Einrichtung

Kapitel 3: Frontend / Übersicht

Nach der Installation können Sie unter http://www.example.com/serendipity/ das Frontend aufrufen. Hier spielt sich alles ab, was jeder Besucher sehen kann: Man kann Einträge lesen und kommentieren, in älteren Archiven stöbern, eine Suche durchführen und auch etliche Plugin-Funktionalitäten (Umfrage, Flickr-Fotos ...) ansehen.

Im Folgenden gehen wir von dem standardmäßig genutzten Theme (siehe Seite theme) Pure aus. Die meisten anderen Themes richten sich in der Darstellung der Seitenelemente nach demselben Schema, können aber in Details davon abweichen. Wie man die Darstellung anpassen kann, werden Sie in späteren Kapiteln ab Seite Anpassungen lernen.

 

3.1 - Übersicht

Übersicht

Die Startseite eines Serendipity-Blogs zeigt üblicherweise die chronologisch letzten 15 Artikel in allen Kategorien untereinander an, wobei der erste Artikel der aktuellste ist. Je nach Template ist dieser Inhaltsbereich von ein bis zwei sogenannten Seitenleisten umgeben. In den Seitenleisten können sich Seitenleisten-Plugins ansiedeln, die beliebige Inhalte darstellen können. Ebenfalls abhängig vom Template sehen Sie meist eine zentrale Seitenüberschrift (Kopf- oder auch Banner-Bereich genannt) und eine weitere Überschrift vor der Artikelübersicht.

startpage_empty_dm_de.png
Abbildung 3.1: Frontend nach der Installation im Dark Mode

Die Standard-Installation von Serendipity richtet eine rechte Seitenleiste ein, in der folgende Elemente dargestellt werden:

Kalender Frühere Serendipity Versionen installierten hier zuallererst den Kalender. Inzwischen ist die Meinung gewachsen auf diese Art der Navigation und Darstellung per default verzichten zu können. Der Kalender stellt den aktuellen Monat in einer graphischen Übersicht dar. Der aktuelle Tag wird hervorgehoben, und jeder Tag, an dem ein Artikel verfasst wurde, ist ebenfalls hervorgehoben. Bei einem Klick auf einen Tag oder auf die Navigationspfeile in der Kopfzeile des Kalenders kann man sich die Artikel anzeigen lassen, die im gewählten Zeitraum verfasst wurden.

Suche In die Eingabebox der Schnellsuche kann man einen Suchbegriff eingeben und den Suchvorgang mittels (Enter)-Taste ausführen. Die Suche umfasst dabei sowohl Artikelüberschrift als auch den Artikelinhalt und zeigt in der Ergebnisseite die gefundenen Artikel genauso an wie in einer normalen Artikelübersicht eines Zeitraumes. Details zur Suche sind am Ende des Kapitels (Seite Suche) erwähnt.

Archive Die Links dieses Plugins zeigen unterschiedliche chronologische Abschnitte der Blogeinträge an. Standardmäßig werden die letzten drei Monate mit Link angezeigt, und ein Klick darauf ruft die übliche Artikelansicht auf, bei der jedoch nur der gewünschte Zeitraum berücksichtigt wird. Der Link Das neueste führt zur üblichen Startseite und der Link Älteres zu einer besonderen Übersichtsseite (siehe Abschnitt Archive auf Seite Permalinks-Frontend).

Kategorien In dem Seitenleisten-Block Kategorien wird eine Liste aller eingerichteten Kategorien des Blogs dargestellt. Ein Klick auf eine Kategorie wird daraufhin ausschließlich Artikel anzeigen, die dieser Kategorie zugeordnet sind. Neben jedem Kategorienamen befindet sich zudem ein kleines Symbol, das auf den RSS-Feed dieser Kategorie zeigt. Außerdem besteht für den Besucher die Möglichkeit, mehrere Kategorien zur Ansicht zu kombinieren. So könnte man sich alle Beiträge mehrerer Kategorien anzeigen lassen, indem man die Auswahlboxen neben mehreren Kategorien ankreuzt und danach auf den Button Los! darunter klickt. Alle Kategorien führt zurück auf die Übersichtsseite des Blogs, in der wieder alle Beiträge aller Kategorien gezeigt werden.

Blog abonnieren Alle Feed-Formate (siehe Terminologie, Seite RSS), die das Blog anbietet, werden in dieser Box dargestellt. Die unterstützten Formate sind RSS 0.91, RSS 2.0, Atom 0.3 und Atom 1.0. Zusätzlich gibt es noch einen speziellen RSS 2.0-Feed, der alle Kommentare zu den Beiträgen enthält. Mit diesem Feed können Besucher des Blogs auch auf dem Laufenden über neue Kommentare bleiben.

Verwaltung des Blogs Damit ein Redakteur sich leicht in das Backend des Blogs einloggen kann, wird ein Link dorthin angeboten. Je nachdem, ob der Benutzer bereits eingeloggt ist, steht hier entweder Zum Login oder Administrationsbereich.

Powered by Zuletzt befindet sich in diesem Block eine kleine Werbung für Serendipity. Besucher Ihres Blogs finden die Technik dahinter womöglich faszinierend, so dass sie dieser Hinweis über das eingesetzte System interessiert. Da ein Open-Source-System von seinen Benutzern und seiner Verbreitung lebt, freuen sich die Entwickler immer sehr, wenn dieser Hinweis nicht entfernt wird.

Fast alle der genannten Plugins lassen sich in ihrer Pluginkonfiguration genauer auf Ihre Wünsche einstellen.

3.2 - Beiträge

Beiträge

Da nach der Installation noch keine Einträge verfasst wurden, wird im Inhaltsbereich nur die Meldung "Keine Einträge vorhanden" angezeigt.

Unterhalb des Inhaltsbereichs befindet sich der Fußbereich, in dem man je nach dargestellter Seite vor- und zurückblättern kann. Viele Archivansichten können so chronologisch von vorne nach hinten durchblättert werden.

Sobald sich in dem Blog ein Artikel befindet, wird dessen Titel und der einfache Eintragstext angezeigt. Zusätzlich werden Meta-Angaben über einen Artikel eingeblendet: die Erstellungszeit, die Kategorie, in der sich ein Artikel befindet, der Name des Autors und die Anzahl der Kommentare zu diesem Artikel.

pure_dm_de.png
Abbildung 3.2: Frontend mit einem eingetragenen Artikel im Dark Mode

Jeder Beitrag kann zudem einen sogenannten Erweiterten Eintrag aufweisen. Dieser Zusatztext wird in der Übersichtsseite nicht angezeigt, sondern erst bei der Detailansicht eines Artikels. Sobald ein Artikel solchen Zusatztext enthält, führt der Link "Artikeltitel" vollständig lesen oder ein Klick auf den Titel des Beitrags zu dieser Detailseite.

Auf dieser Detailseite befinden sich außerdem alle Kommentare und Trackbacks zu einem Artikel. Auch in der Seitenüberschrift verändert sich der Kopfbereich und stellt durch die Aufnahme des Artikeltitels dar, dass man sich auf einer einzelnen Artikelseite befindet.

Sollte man sich bereits in das Backend eingeloggt haben, erscheint bei den Meta-Angaben zu einem Artikel auch ein Link Eintrag bearbeiten, mittels dessen man den entsprechenden Artikel direkt bearbeiten kann.

 

3.3 - Archive

Archive

Wie bereits erwähnt, verfügt Serendipity über einige besondere chronologische Artikelübersichten, abhängig von der gewählten Kategorie, dem Zeitraum (nach Jahr, Monat, Woche oder Tag), einem Autor und einer Seitenzahl.

Diese Seiten sind alle vom Inhalt her gleich aufgebaut, da alle Ansichten die Artikel gleichartig auflisten. Lediglich die dargestellten Inhalte sind nach dem gewünschten Kriterium gefiltert, und der Kopfbereich sowie der Fußbereich geben die Art der Übersichtsseite an.

Alle Seiten haben zudem einen Stamm-Permalink (siehe Kapitel Terminologie auf Seite terminologie-permalinks) gemeinsam: http://www.example.com/serendipity/archives/XXX. Alle Archivseiten sind so einem virtuellen Verzeichnis zugeordnet, die Darstellung richtet sich nach dem dahinterstehenden XXX. Unterschiedliche Pfadkomponenten legen dabei fest, was genau angezeigt wird:

/archives/2007.html stellt alle Artikel des Jahres 2007 dar.

/archives/2007/12.html stellt alle Artikel aus Dezember 2007 dar.

/archives/2007/12/01.html stellt alle Artikel vom ersten Dezember 2007 dar.

/archives/1-Beispiel.html stellt eine einzelne Artikelseite dar.

/archives/C1.html stellt alle Artikel der Kategorie mit der Nummer 1 dar. Die Pfadkomponente C (für Category) wird dabei gefolgt von einer Zahl.

/archives/P2.html stellt die zweite Seite einer Übersicht dar. Die Pfadkomponente P (für Page) wird gefolgt von einer Seitennummer.

/archives/A1.html stellt alle Artikel des Autors mit der Nummer 1 dar. Die Pfadkomponente A (für Author) wird gefolgt von einer Zahl, die den Autor angibt.

/archives/W52.html stellt alle Artikel der Kalenderwoche 52 dar. Die Pfadkomponente W (für Week) wird gefolgt von der Wochennummer.

/archives/summary.html legt fest, dass die Artikelübersicht ausschließlich Datum und Artikeltitel (also ohne jeglichen Inhalt) darstellt. Diese Ansicht - wie fast alle weiteren summary Seiten - hat eine fest eingestellte, optionslose und spezifische Limitierung von 25 Artikeln pro Seite (bzw. 24, wenn die normale fetchLimit Selektion schon auf diese Zahl eingestellt ist), kann aber über eine manuell gesetzte $serendipity['summaryFetchLimit'] Variable zB. in der serendipity_config_local.inc von Hand überschrieben werden.

Wichtig ist dabei, dass die Pfadkomponenten (bis auf die für eine einzelne Artikelseite) hierbei beliebig miteinander kombinierbar sind. Dabei ist nur zu beachten, dass die Angabe des Datums (Jahr, Monat, Tag) immer direkt am Anfang des Permalinks stehen muss. Hier einige Beispiele für die Kombinationsmöglichkeiten:

/archives/2007/C1/A2.html stellt alle Artikel des Jahres 2007 dar, die in Kategorie 1 vom Autor 2 geschrieben wurden.

/archives/2007/12/summary.html stellt die Seite der Artikelübersicht (nur Datum und Titel) aller Artikel im Dezember 2007 dar.

/archives/summary/P2.html stellt die zweite Seite der zusammenfassenden Artikelübersicht (nur Datum und Titel) aller Artikel dar.

/archives/2020/summary.html stellt die Artikelübersicht (nur Datum und Titel) aller Artikel im Jahr 2020 dar.

/archives/2020/summary/P2.html stellt die zweite Seite der Artikelübersicht (nur Datum und Titel) aller Artikel im Jahr 2020 dar.

/archives/2007/12/P2.html stellt die zweite Seite der offenen Artikelübersicht aller Artikel im Dezember 2007 dar.

/archives/W52/A1.html stellt alle Artikel des ersten Autors der 52. Kalenderwoche des aktuellen Jahres dar.

/archives/2018/W52.html stellt alle Artikel der 52. Kalenderwoche im Jahr 2018 dar.

Die URL muss immer auf .html enden, die letzte Pfadkomponente darf somit keinen abschließenden / enthalten.

Da für die Ansicht der Artikel nach Autoren oder nach Kategorie eigenständige Permalinks wünschenswert sind, bietet Serendipity dieselben Artikelübersichten auch bei Aufruf folgender URLs (ohne .html) an:

/authors/1-AutorName stellt die Artikelübersicht nach Autor dar, wobei in diesem Fall der Name des Autors zu Suchmaschinenzwecken in der URL stehen kann. Mehrere Autoren können hierbei mittels ; nach der Nummer des Autors kombiniert werden: authors/1;2;3-AutorName. Der Parameter P für die gewünschte Seite kann angehängt werden.

/categories/1-KategorieName stellt die Artikelübersicht nach Kategorie dar, wobei in diesem Fall der Name der Kategorie zu Suchmaschinenzwecken in der URL stehen kann. Mehrere Kategorien können hierbei mittels ; nach der Nummer der Kategorie kombiniert werden: categories/1;2;3-KategorieName. Die Parameter P für die gewünschte Seite sowie A für die Einschränkung nach Autoren können zusätzlich angehängt werden.

Über http://www.example.com/serendipity/archive/ gelangt man zu einer Übersichtsseite mit einer speziellen chronologischen Übersicht.

pure_archive_dm_de.png
Abbildung 3.3: Archiv-Übersicht im Dark Mode

Dort werden für alle Jahre, in denen Artikel verfasst wurden, die Monate dargestellt. Die Links im Standard Theme Pure Monat (ganz anzeigen) und Anzahl der Einträge (Überschriften anzeigen) führen hierbei wieder zu den eingangs erwähnten Archiv-Übersichtsseiten.

Auch die URL für die spezielle chronologische Übersicht kann mit speziellen Pfadkomponenten eingeschränkt werden - eine Einschränkung nach Zeitraum erfolgt dabei jedoch nicht, da die Übersicht immer den ganzen Zeitraum berücksichtigt. (Das .html ist hier optional.)

/archive/C1.html stellt die Übersicht aller Artikel der Kategorie mit der Nummer 1 dar. Die Pfadkomponente C (für Category) wird dabei gefolgt von einer Zahl.

/archive/A1.html stellt die Übersicht aller Artikel des Autors mit der Nummer 1 dar. Die Pfadkomponente A (für Author) wird gefolgt von einer Zahl, die den Autor angibt.

 

3.4 - Kommentare und Trackbacks

Kommentare und Trackbacks

Artikel des Blogs können von Besuchern kommentiert oder referenziert werden. Diese Kommentare werden von Serendipity auf unterschiedliche Weise im Frontend eingebunden und können in weiteren Übersichtsseiten speziell gefiltert werden.

3.4.1 - Kommentare zu einzelnen Artikeln

Kommentare zu einzelnen Artikeln

Die Ansicht der Kommentare (und Trackbacks) zu einem Beitrag erreicht man entweder durch einen Klick auf die Detailseite eines Beitrags oder indem man auf den Link Kommentare (x) klickt. Je nach Einstellung des Blogs (siehe Seite config-popups) öffnet sich dann ebenfalls die Detailseite des Beitrags oder ein Popup-Fenster mit den Kommentaren.

Trackbacks zu einem Artikel werden unterhalb eines Beitrags vor den Kommentaren chronologisch geordnet angezeigt. Ein Trackback ist ein Artikel eines fremden Blogs, der sich auf Ihren geschriebenen Beitrag bezieht. Dabei führt der Link des Trackbacks zu diesem fremden Beitrag, und zur Orientierung werden die ersten Absätze des fremden Beitrags mit angezeigt. Damit ein fremdes Blog sich auf Ihren Artikel beziehen konnte, war der Link Trackback für spezifische URI dieses Eintrags vorgesehen. Ein Klick darauf, oder das Überfahren mit der Maus verriet, dass dieser Link nicht für die Ansicht im Browser gedacht war, sondern für fremde Blogsysteme übernommen werden sollte. Besucher mussten diesen Link verwenden, um ein Trackback zu Ihnen zu senden. Heutzutage ist dies aber viel einfacher gelöst, denn sollte ihr Theme bereits über einen "link rel" tag im Seitenkopf verfügen <link rel="trackback" type="application/x-www-form-urlencoded" href="https://ihrBlog.de/styx/comment.php?type=trackback&entry_id=28"> (als beispielhaften Eintrag), was heutzutage die Regel ist, ist die genannte URL für alte Systeme obsolet, denn ihr System "lauscht" bereits automatisch auf eventuell gesetzte Trackbacks, wenn jemand die eigentliche URL ihres Artikels https://ihrBlog.de/styx/archives/28-titel.html im eigenen Blog verlinkt.

Nach den Trackbacks folgt die Auflistung der Kommentare. Standardmäßig werden diese thread-basiert aufgelistet. Dabei startet die Auflistung mit dem chronologisch ersten Kommentar, und mögliche andere Kommentare, die sich auf diesen beziehen, werden eingerückt darunter dargestellt. Daher nennt sich diese Ansicht Verschachtelt. Falls Sie eine chronologisch sortierte Ansicht bevorzugen, kann man diese über den Link Linear aufrufen.

Als Redakteur des Blogs sehen Sie zudem noch den Link Kommentare für diesen Eintrag nicht mehr zulassen, mit dem Sie die Kommentarfunktionalität eines Beitrags (auch übergangsweise) sperren können. An derselben Stelle erscheint danach auch wieder ein Link zum Entsperren.

pure_article_dm_de.png
Abbildung 3.4: Artikel-Ansicht mit Kommentardarstellung im Dark Mode

Zu jedem Kommentar wird der Name des Kommentatoren dargestellt, sowie (falls von ihm angegeben) seine E-Mail-Adresse und Homepage.

Nach der Auflistung der vorhandenen Kommentare kann ein eigener, neuer Kommentar eingefügt werden. In das Eingabeformular trägt man dazu seine Daten (Name, E-Mail, Homepage, Bezug) sowie den gewünschten Kommentartext ein. Unterhalb der Eingabebox befindet sich ein Hinweis, welche Textformatierungsmöglichkeiten es gibt, um gewisse Dinge hervorzuheben.

Die Auswahlbox Daten merken? kann genutzt werden, damit der eingetragene Name in Zukunft vom Browser vorausgefüllt wird. Die Box Bei Aktualisierung dieser Kommentare benachrichtigen bestimmt, ob man bei einem neuen Kommentar zu dem Beitrag per E-Mail informiert werden soll.

Um einen Kommentar vor Übermittlung zu überprüfen, kann man den Button Vorschau benutzen. Die Folgeseite zeigt den eigenen Kommentar dann so innerhalb der Webseite, wie er danach für alle Besucher erscheinen sollte. Gerade wenn Sie Sonderzeichen oder HTML-Code in Ihrem Kommentartext benutzen, dient die Vorschau der Kontrolle, ob später auch wirklich alles angezeigt werden kann.

Nach Abschicken eines Kommentars kann es je nach Einstellung des Artikels zu einer Moderation kommen - in diesem Fall muss ein Redakteur einen Kommentar erst autorisieren, bevor er angezeigt wird (siehe Seite Kommentare).

3.4.2 - Kommentarübersichten

Kommentarübersichten

Neben der gezielten Ansicht von Kommentaren zu einem Artikel gibt es auch eine Übersichtsseite, auf der alle Kommentare unabhängig vom Artikel dargestellt werden.

pure_startpage_comments_dm_de.png
Abbildung 3.5: Kommentarübersicht im Dark Mode

Dies eignet sich besonders, um zu sehen, zu welchen Einträgen bestimmte Personen kommentiert haben. Die Seite zeigt dabei wie üblich seitenweise blätterbar die Überschrift eines Artikels an, und darunter die getätigten Kommentare.

Diese /comments/ Ansichten haben eine fest eingestellte, optionslose und spezifische Limitierung von 10 Kommentaren pro Seite, können aber über die manuell gesetzte $serendipity['CBAfetchLimit'] Variable zB. in der serendipity_config_local.inc von Hand überschrieben werden. Als ein gutes Maß haben sich 20 Kommentare per Seite herausgestellt, deshalb ist es zu empfehlen diese Variable zu setzen, wenn Sie solcherlei Übersichten anbieten. Ab Styx 4.1 wird dies zu einer normalen Konfigurationsoption.

Diese Übersichtsseite ist bisher in wenigen Templates eingebaut und wird daher von Besuchern auch seltener genutzt.

Das Permalink-Schema sieht dabei wie folgt aus:

/comments/kommentator/ stellt die Übersicht aller Kommentare dar, die vom Benutzer kommentator stammen. Die Kommentatoren werden dabei in der Datenbank nach exakter Übereinstimmung mit dem Namen in der URL herausgesucht. Ohne Angabe eines solchen Wertes werden die Kommentare aller Benutzer angezeigt. Sollten Sie nach Namen mit Leerzeichen suchen, müssen Sie ein + anstelle des Leerzeichens einfügen, zB. /comments/John+Doe/.

/comments/last_5/ stellt die Übersicht der Kommentare der letzten fünf Tage zu allen Artikeln des aktuellen Monats ab Uhrzeit dar. Ohne Angabe eines solchen Wertes werden alle Kommentare angezeigt.

/comments/from_2007-12-01/ stellt alle Kommentare seit dem 01.12.2007 dar. Das Datum muss hierbei der GNU DATE-Syntax entsprechen, siehe https://www.gnu.org/software/coreutils/manual/html_node/Examples-of-date.html. Ohne Angabe dieses Wertes wird keine minimale Zeitbeschränkung gesetzt.

/comments/to_2007-12-31/ stellt alle Kommentare dar, die bis zum 31.12.2007 gemacht wurden. Das Datum muss ebenfalls der GNU DATE-Syntax entsprechen. Ohne Angabe dieses Wertes wird keine maximale Zeitbeschränkung gesetzt.

/comments/trackbacks/ stellt anstelle einer Übersicht zu Kommentaren die Übersicht der Trackbacks dar.

/comments/comments_and_trackbacks/ stellt sowohl Kommentare als auch Trackbacks dar.

/comments/comments/ stellt nur Kommentare dar. Da die Variable dem Standard entspricht, kann man sie üblicherweise weglassen.

/comments/P2.html stellt die zweite Seite einer Übersicht dar. Die Pfadkomponente P (für Page) wird gefolgt von einer Seitennummer.

Auch bei diesem Schema lassen sich die Pfadkomponenten miteinander kombinieren, um besondere Ansichten zu erhalten:

/comments/garvin/last_5 stellt die Übersicht der Kommentare der letzten fünf Tage des Benutzers garvin dar.

/comments/from_2007-01-01/to_2007-12-31/ stellt die Übersicht aller Kommentare vom 01.01. bis zu 31.12.2007 dar.

/comments/comments_and_trackbacks/from_2007-01-01/P2/ stellt die zweite Übersichtsseite aller Kommentare und Trackbacks seit dem 01.01.2007 dar.

3.5 - Seite nicht gefunden (404)

Seite nicht gefunden (404)

Immer wenn man eine URL des Serendipity-Blogs aufruft, die zu einer ungültigen Seite führt, wird statt einer Fehlerseite die Standard-Übersicht angezeigt. Selbstverständlich wird für Suchroboter und Ähnliches dennoch eine HTTP-404-Statusmeldung ausgegeben, um die Ungültigkeit der angeforderten Seite herauszustellen.

Die Standard-Übersicht wird dargestellt, damit Besucher des Blogs dazu motiviert werden, sich über die restlichen Inhalte des Blogs schnell einen Überblick zu verschaffen, anstatt nur eine leere, nichtssagende Fehlermeldung zu sehen.

Neuere Versionen zeigen zusätzlich aber wieder eine Fehlermeldung, da das fehlerlose Fallback sich als zu verwirrend für manche User herausstellte. Damit die Meldung in bestimmten Situationen unterdrückt wird, muss in den Template Dateien auf die {if $view == '404'} Variable zurückgegriffen werden, um eine bestimmte Reaktion auszulösen.

 

3.6 - RSS-Feeds

RSS-Feeds

Streng genommen zählen RSS-Feeds nicht zum eigentlichen Frontend, da ein RSS-Feed außerhalb von Serendipity angezeigt wird. Ein RSS-Feed enthält, wie eingangs im Zusammenhang der Terminologie erwähnt (siehe Seite RSS), einige XML-Elemente, die die aktuellsten Einträge des Blogs mit einigen zusätzlichen Metadaten aufführen. RSS steht für Really Simple Syndication.

Folgende RSS-Versionen sind verfügbar:

/feeds/index.rss2 Aktuelle Beiträge in RSS-Version 2.0. Diese Version wird aufgrund ihrer Vollständigheit bevorzugt, da sie die meisten Möglichkeiten bietet und den höchsten Verbreitungsgrad besitzt.

/feeds/index.rss Aktuelle Beiträge in RSS-Version 0.91 (veraltet).

/feeds/index.rss1 Aktuelle Beiträge in RSS-Version 1.0 (veraltet).

/feeds/atom03.xml Aktuelle Beiträge in Atom-Version 0.3 (veraltet).

/feeds/atom10.xml Aktuelle Beiträge in Atom-Version 1.0. Diese Version liegt in ihren Möglichkeiten ungefähr gleichauf mit RSS 2.0 und wird in Zukunft sicherlich noch an Bedeutung gewinnen, da dieser Atom-Standard vom W3C-Gremium [*] Das W3C-Gremium entscheidet in einer großen Arbeitsgruppe über die Standardisierung von Internet-Formaten wie HTML und andere. empfohlen wird. Diese Aussage hat sich aber bis zum laufenden Jahr noch immer nicht wirklich bewahrheitet [*] https://meiert.com/de/publications/translations/intertwingly.net/rss-2.0-and-atom-1.0/.

/feeds/index.opml Aktuelle Beiträge im OPML-Format. Dies beinhaltet nur Artikelübersichten und dient mehr der Übersicht als einem tatsächlichen Feed-Format.

Es gilt zu beachten, dass die URLs für die RSS-Feeds von Besuchern immer aufgerufen werden können, selbst wenn Sie das Seitenleisten-Plugin nicht aktiviert haben. Daher ist es auch grundsätzlich irrelevant, welche Versionen Sie persönlich bevorzugen, da Ihre Besucher die notwendige Version eigenständig beziehen können.

Neben den Einträgen können auch aktuelle Kommentare und Trackbacks zu einem Blog bezogen werden:

/feeds/comments.rss2 Kommentare im RSS-2.0-Format.

/feeds/trackbacks.rss2 Trackbacks im RSS-2.0-Format.

/feeds/comments_and_trackbacks.rss2 Kommentare und Trackbacks im RSS-2.0-Format.

Diese Feeds können auch durch Änderung der Dateiendung in einem anderen Format ausgegeben werden: .rss2 für RSS 2.0, .rss1 für RSS 1.0, .rss für RSS 0.91 und .atom für Atom 1.0.

Um nur einen Feed von einer speziellen Kategorie oder einem Autor abzurufen, sind folgende URLs möglich (jeweils auch mit oben genannten Dateiendungen):

/feeds/categories/Kategoriename.rss2 Aktuelle Beiträge der Kategorie Kategoriename.

/feeds/authors/Autorname.rss2 Aktuelle Beiträge des Autors Autorname.

RSS-Feeds liegen von Serendipity in mehreren Versionen vor und werden allesamt auf die Ausgabedatei rss.php umgeleitet. Diese Datei stellt den Feed dar und kann einige optionale Parameter aufnehmen. Ein kleiner Teil dieser Optionen wird durch Einstellungen des Seitenleisten-Plugins "Blog abonnieren" beeinflusst, die ab Seite syndication aufgeführt sind.

Die rss.php Datei kann somit auch direkt von einem Browser aufgerufen werden, da sie übersichtlichere Paramter ermöglicht. Diese Parameter können jeweils miteinander verbunden werden. Um mehrere Parameter anzugeben, ruft man die URL mittels rss.php?parameter1=wert1&parameter2=parameter3&... auf. Bitte beachten Sie, dass Sie aus technischen Gründen die folgenden Parameter ausschließlich beim Aufruf der rss.php-Datei anhängen können, nicht aber beim Aufruf der sprechenden Feed-URLs wie /feeds/index.rss2.

rss.php?version=version wobei version folgende Werte haben kann: 0.91, 1.0, 2.0, atom0.3, atom1.0 und opml1.0. Individuelle Feeds, die von Ihnen erstellt werden können (siehe Seite customfeeds), werden ebenfalls einer eindeutigen Version zugeteilt und können durch diesen Parameter später aufgerufen werden. Ohne Angabe der Version wird das RSS-2.0-Format gewählt.

rss.php?category=1 wobei die Zahl der jeweiligen Nummer einer Kategorie des Blogs entspricht. Um einen RSS-Feed für Einträge mehrerer Kategorien zu bündeln, können die Kategorie-Nummern mittels Semikolon (;) hintereinander aufgeführt werden. Ohne Angabe werden Artikel aller Kategorien dargestellt.

rss.php?viewAuthor=1 wobei die Zahl der jeweiligen Nummer eines Autors des Blogs entspricht. Um einen RSS-Feed für Einträge mehrerer Autoren zu bündeln, können die Autor-Nummern mittels Semikolon (;) hintereinander aufgeführt werden. Ohne Angabe werden Artikel aller Autoren dargestellt.

rss.php?type=typ Anstelle von typ kann comments (Kommentare), content (Beiträge), trackbacks (Trackbacks) und comments_and_trackbacks (Kommentare und Trackbacks) eingetragen werden, was dafür sorgt, dass nur Artikel des gewünschten Typs im RSS-Feed eingebunden werden. Ohne Angabe werden nur Artikel angezeigt.

rss.php?nocache=true Diese Variable sorgt dafür, dass Conditional GET für RSS-Feeds deaktiviert wird (siehe Caching von RSS-Feeds auf Seite Caching von RSS-Feeds).

rss.php?cid=Artikel-ID Falls als Inhaltstyp eines RSS-Feeds ein anderer als content gewählt wurde, kann man die Anzeige der Kommentare und Trackbacks auf einen bestimmten Artikel einschränken. Die Nummer (ID) dieses Artikels wird als Wert des Parameters angegeben. Solche RSS-Feeds werden oft verwendet, damit Besucher die Kommentare zu einem Artikel verfolgen können, an dessen Diskussion sie teilgenommen haben.

rss.php?all=true Falls dieser Parameter gesetzt wird, enthält der RSS-Feed nicht nur die letzten 15 aktuellen Artikel, sondern alle verfügbaren. Der RSS-Feed kann dadurch sehr groß werden, daher ist die Verwendung dieses Parameters nur für den Export der Artikeldatenbank gedacht.

rss.php?fullFeed=true Falls dieser Parameter gesetzt ist, enthält der RSS-Feed den vollständigen Artikel (anstelle nur des Teasers). Diese Option muss vom Betreiber des Blogs jedoch gezielt aktiviert werden, da durch die Aktivierung der "Diebstahl" von Artikeln stark vereinfacht wird (siehe Seite syndication-fullfeed).

rss.php?forceLocal=true Das Plugin "Blog abonnieren" unterstützt die Möglichkeit, dass RSS-Feeds zu einem Dienstleister namens Feedburner weitergeleitet werden. In so einem Fall würde der Aufruf der eigenen RSS-URLs immer direkt zu der Seite des Dienstleisters führen und man hätte keine Möglichkeit mehr, den echten RSS-Feed aufzurufen. Sollte diese Umleitungsoption also gesetzt sein, können Sie mittels des Parameters forceLocal dafür sorgen, dass Sie nicht umgeleitet werden. Der Parameter zeigt jedoch nur Wirkung, wenn Sie als Redakteur am Blog angemeldet sind.

 

3.6.1 - Caching von RSS-Feeds

Caching von RSS-Feeds

Da RSS-Feeds von den RSS-Readern Ihrer Besucher relativ häufig aufgerufen werden (meist halbstündlich), ist es wichtig, dort so wenig wie möglich Redundanz für die Datenübertragung zu verursachen.

Bei 200 Abonnenten Ihres RSS-Feeds und einem größeren Artikelbestand kommt es durchaus vor, dass die XML-Datei des Feeds 100kb und größer ist. Bei dieser Benutzerzahl würden Sie pro Stunde 4MB (das sind im Monat gut 3GB!) an Daten übertragen. Wenn Sie durchschnittlich nur alle drei Tage einen neuen Artikel schreiben, wäre ein Großteil dieser Datenmenge unnötig übertragen worden.

Um dieses Problem zu lösen, wurde im HTTP-Standard ein Caching [*] Ein Cache ist ein Zwischenspeicher oder Puffer, der einmal erstellte Daten erneut ausgeben kann, anstatt sie neu zusammenzustellen. -Mechanismus vorgesehen. Dabei überträgt der RSS-Reader (und auch jeder Webbrowser) den Zeitpunkt des letzten Abrufs an den Server. Der Server vergleicht, ob sich seit diesem Zeitpunkt etwas am RSS-Feed geändert hat. Falls das nicht der Fall ist, wird eine leere Antwort an die Software zurückgeschickt, und es werden keine Daten übertragen.

Wenn sich etwas verändert hat, kann der Server lediglich die seit dem letzten Aufruf erne