-
Notifications
You must be signed in to change notification settings - Fork 3
/
einfuehrung.tex
1854 lines (1584 loc) · 83.8 KB
/
einfuehrung.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
%revised
\chapter{Einführung}
\index{Einführung}%
\index{Self-Publishing}%
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 \emph{Self-Publishing} war geboren.
Während der Boom der \emph{Wiki-Communities} aus dem vornehmlich
akademischen Wunsch nach Wissensaustausch resultierte, entstand auch für
das Self-Pub\-lish\-ing eine neue Art von Software -- \emph{Weblogs},
kurz: \emph{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
\emph{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.
\index{Serendipity!Namensursprung}%
\index{s9y!Namensursprung}%
\emph{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: \emph{s9y}. Geeks ersetzen längere Wörter gerne durch deren
Anfangs- und Endbuchstaben und schreiben die Zahl der ausgelassenen
Buchstaben einfach dazwischen\,\ldots
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
\emph{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 (Letzterer ist auch Autor der
Cracklib\footnote{\cmd{http://www.cracklib.net/}} und von
\cmd{mod-pubsub}\footnote{\cmd{http://sourceforge.net/projects/mod-pubsub}})
sowie Sebastian Bergmann vom phpUnit-Projekt.\footnote{Die
PHP-Testsuite ist unter \cmd{http://www.phpunit.de/} erhältlich.}
Mit den Jahren entwickelten wechselnde Programmierer das System stetig
und konsequent weiter. Seit 2003 ist der Autor dieses Buchs leitender
Entwickler.
Dieses Buch bezieht sich auf die aktuelle Version 1.3 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.
%GH:TODO:Aktuelle Versionsnummer einsetzen! Screenshots beachten!
\section{Was unterscheidet ein Blog von einem CMS?}
\index{CMS!vs. Blog|(}%
\index{Content-Management|see{CMS}}%
\index{Blog!vs.\ 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 \emph{Statische Seiten}, mit dem man
Inhalte losgelöst von den chronologisch sortierten Artikeln erstellen
und auch Hierarchien mit Unterseiten abbilden kann (siehe Seite
\pageref{staticpage}).
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\footnote{Eine Erklärung dieser Begriffe finden Sie im
Kapitel \ref{Terminologie} auf Seite \pageref{Terminologie}.})
lassen sich meist mit wesentlich geringerem Aufwand einbinden als in
umfangreichen Content-Management-Systemen.
\index{Blog!vs.\ CMS|)}%
\index{CMS!vs. Blog|)}%
\section{Warum Serendipity?}
\index{Serendipity!Vorteile|(}%
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 lauf{}fä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
\index{Sicherheitslücken!Behebungszeitraum}%
\label{xsrf}%
Sicherheitslücken, die bei Bekanntwerden innerhalb weniger Stunden
offiziell behoben wurden. Auch gegen weniger verbreitete
Angriffsmöglichkeiten auf eine Webanwendung wie XSRF\footnote{XSRF
steht \index{Angriff!Robustheit gegen \textasciitilde{}e}%
\index{Cross-Site Request Forgery|see{XSRF}}%
\index{XSRF}%
für \emph{Cross-Site Request Forgery} und beschreibt eine
Angriffsmethode, bei der eine fremde Website mit Privilegien eines
authentifizierten Benutzers Aktionen (z.\,B.\ das Löschen aller
Artikel) durchführt.} \index{Schutz!gegen Angriffe}%
stellte Serendipity frühzeitig Schutzmechanismen bereit.
Serendipity-Templates werden unter Verwendung des
Templating"=Frameworks
\index{Smarty}%
\emph{Smarty},\footnote{\cmd{http://smarty.php.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
\index{Spartacus}%
\index{Plugin-Archiv|see{Spartacus}}%
\index{Template-Archiv|see{Spartacus}}%
\emph{Spartacus}\footnote{\cmd{http://spartacus.s9y.org/}} 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 Serendipitys Kernentwickler 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 65.000
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.
\index{Serendipity!Vorteile|)}%
\index{Serendipity!Nachteile|(}%
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
\index{MovableType}%
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.
\index{Serendipity!Nachteile|)}%
%revised
\index{Serendipity!Funktionsübersicht}%
\index{Serendipity!Vorteile|(}%
Serendipity hebt sich von der Konkurrenz anderer frei oder
kommerziell erhältlicher Systeme vor allem in folgenden Punkten ab:
\begin{osplist}
\item 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 \menu{Fortgeschrittenen
Installation} (Seite \pageref{webinstaller}). Jede installierte Version lässt
sich über die integrierte Oberfläche auf die jeweils aktuellste updaten (Seite
\pageref{s9yupdate}).
\item Texte pflegt man auf Wunsch mit übersichtlichen, einfach verständlichen und
funktionalen WYSIWYG-Editoren ein (Seite \pageref{wysiwyg}).
\item Die integrierte Mediendatenbank für Bilder, PDFs, MP3s etc.\ gestattet
Rechtemanagement, Stichwortsuche und automatische Vorschaugrafiken (Seite
\pageref{Mediendatenbank}). Über einen gesonderten Dialog (Seite
\pageref{Mediendatenbank-Popup}) bindet man die Dateien aus der Mediendatenbank
mit wählbaren Layout"=Optionen einfach in Blog-Artikel ein. Die Inhalte dieser
Mediendatenbank lassen sich dynamisch in einer Verzeichnisansicht darstellen, wie
Sie es z.\,B. vom Windows Explorer gewöhnt sind.
\item Serendipitys gruppenbasiertes Rollenkonzept erlaubt das Anlegen unbegrenzt
vieler Autorengruppen und das Vergeben individueller Rechte (Seite
\pageref{Benutzerverwaltung} und \pageref{Gruppenverwaltung}).
\item 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 \ldots (siehe Seite
\pageref{Terminologie}).
\item 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 \pageref{pluginapi}).
\item Das bereits erwähnte Online-Plugin-Archiv (Spartacus) erlaubt die
Ein-Klick-Installation von mehr als 160 Plugins (Seite \pageref{Spartacus}).
\item 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 \pageref{Plugins verwalten}).
\item Das dynamische, Smarty-basierte Template-Konzept erlaubt die strukturelle
Änderung sämtlicher Frontend-Elemente über aufeinander aufbauende
Templatedateien. Smarty-Templates dürfen ohne Einschrän\-kung\osplinebreak{} Kontrollstrukturen
wie Schleifen, Abfragen und Variablen enthalten und optional mit
zusätzlichem PHP-Code versehen werden (Seite \pageref{Smarty-Templates}).
\item Einfache Integration in bestehende Webseiten. Das Konzept der \emph{Shared
Installation} ermöglicht den Betrieb beliebig vieler Blog-Instanzen mit nur einer
Code-Basis (Seite \pageref{sharedinstall}).
\item 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 \pageref{spamblock}).
\item Beim Datenbanksystem haben Sie die Wahl zwischen MySQL(i), PostgreSQL und
SQLite.
\item Serendipity ist nicht nur Open Source, sondern unterliegt sogar der
BSD-Lizenz. Somit kann das System auch in kommerziellen Programmen seinen Einsatz
finden.
\item Ob WordPress, MoveableType, b2Evo, blogger oder andere --
Serendipity importiert auf Wunsch den Inhalt zahlreicher anderer
Blogsysteme (Seite \pageref{Daten importieren}).
\end{osplist}
\index{Serendipity!Vorteile|)}%
%revised
\section{Voraussetzungen}
\label{Voraussetzungen}%
\index{Serendipity!Voraussetzungen|(}%
Serendipity als Software wird nicht auf Ihrem persönlichen Computer
ausgeführt, sondern läuft im Internet auf einem Webserver.
\index{Provider}%
Einen solchen mietet man meistens bei Providern wie
Manitu\footnote{\cmd{http://www.manitu.de/}},
1\&1\footnote{\cmd{http://www.einsundeins.de/}},
Strato\footnote{\cmd{http://www.strato.de/}},
tiggerswelt\footnote{\cmd{http://www.tiggerswelt.net/}} oder
anderen\footnote{\cmd{http://www.webhostlist.de/}};
die Dienstleistung, die diese erbringen, nennt man \emph{Webhosting}.
\index{Webhosting}%
Für einen gewissen Monatsbeitrag erhalten
Sie Zugangsdaten zu einem Rechner, auf den Sie HTML-Dateien und
Software wie Serendipity mittels eines
\emph{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. Manche Provider (z.\,B.\
\cmd{http://www.domainfactory.de/}) bieten Serendipity für ihre
Kunden sogar vorinstalliert an.
Sollten Sie über keinen eigenen Webspace verfügen, gibt es noch eine
andere Möglichkeit, Serendipity zu nutzen. Einige kostenlose oder
kostengünstige Provider haben die Software auf ihren Servern
vorinstalliert und gewähren externen Nutzern Zugriff darauf. Hier können
Sie meist nur aus einer Liste vorinstallierter Plugins wählen und auch
keine Änderungen an Templates vornehmen oder eigene Plugins einspielen.
Um das System erst einmal nur zu testen oder als einfaches
Kommunikationsmittel einzusetzen, ist dies sicher eine gute Alternative. Eine Liste
dieser Provider finden Sie auf der
Serendipity-Webseite.\footnote{\cmd{http://www.s9y.org/61.html}}
\index{PHP}%
\index{Terminologie!PHP}%
\index{Skriptsprache}%
Die Dateien, die zu Serendipity gehören, enthalten Quellcode, der in der
\emph{Skriptsprache} PHP\footnote{PHP ist die Abkürzung von
\emph{PHP Hypertext Preprocessor}, siehe \cmd{http://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.
Serendipitys Vorgehensweise 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.
\index{Voraussetzungen}%
Um Serendipity einzusetzen, benötigen Sie FTP-Zugriff auf einen Webserver,
auf dem eine aktuelle PHP-Version (mindestens PHP 4.3.1, PHP5 wird
unterstützt) installiert ist \emph{und} auf dem der Webhoster Zugriff
auf eine Datenbank (MySQL, PostgreSQL, SQLite) gewährt.
Als Webserver-Software eignen sich
\emph{Lighthttpd}, \emph{Apache} und \emph{Microsoft IIS}. Das Blogsystem
lässt sich somit sowohl auf Windows- als auch auf Unix-Derivaten
einsetzen.
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
\ref{Installation} ab Seite \pageref{Installation} springen können, wenn
Sie Ihren Webserver nicht selbst aufsetzen und dem Techniker bei Ihrem
Provider keine Hinweise geben müssen.
\subsection{Systemseitige Einstellungen}
\index{PHPModule@PHP-Module|(}%
Um herauszufinden, welche PHP-Module auf Ihrem Webserver installiert sind,
laden Sie folgende kleine Datei namens \cmd{info.php} in das
\index{Document Root}%
\index{Stammverzeichnis}%
Webdaten"=Stammverzeichnis (auch
\emph{Document Root} genannt)\footnote{Das ist meistens
\label{DocRoot}%
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 \cmd{htdocs} oder \cmd{httpdocs} wechseln müssen, um in das
Stammverzeichnis des Webservers zu gelangen.} auf den Server (im Buch
\cmd{www.example.com} genannt) und rufen diese in einem Browser über
\cmd{http://www.example.com/info.php} auf:
\begin{ospcode}
<?php phpinfo(); ?>
\end{ospcode}
Der Browser sollte dann eine Übersicht darstellen, aus der Sie Ihre
aktuellen Einstellungen herauslesen können. Folgende Module benötigt
Serendipity:
\index{PHPModule@PHP-Module}%
\index{PHPKonfiguration@PHP-Konfiguration}%
\index{Konfiguration!PHP}%
\begin{osplist}
\index{session (PHP-Modul)}
\label{session}%
\item Das PHP-Modul \cmd{session}
muss installiert und aktiviert sein sowie Session-Cookies zulassen. Dies
erreicht man mit der \cmd{php.ini}-Einstellung
\begin{ospcode}
session.use_cookies = On
\end{ospcode}
Serendipity verlangt darüber hinaus, dass die PHP-Sessiondateien schreibbar sind.
Die \cmd{php.ini}-Einstellung \cmd{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.
\index{libxml (PHP-Modul)}%
\label{xml/libxml}%
\item 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 \cmd{xml/libxml}
installiert und aktiviert sein.
\index{iconv (PHP-Modul)}%
\index{mbstring (PHP-Modul)}%
\label{iconv/mbstring}%
\item Für andere Zeichensatzkonvertierungen, die besonders bei Import- und
Exportvorgängen (z.\,B.\ von RSS-Feeds) nötig werden, kann Serendipity
sowohl das PHP-Modul \cmd{iconv} als auch \cmd{mbstring} verwenden. Beide
Module sind in aktuellen PHP5-Versionen standardmäßig aktiviert.
\index{PCRE (PHP-Modul)}%
\label{PCRE}%
\item Um Zeichenketten zu finden und zu bearbeiten, setzt Serendipity häufig
\emph{reguläre Ausdrücke} ein. Diese Funktionalität liefert das
(standardmäßig installierte) PHP-Modul \cmd{pcre}.
\index{libgd (PHP-Modul)}%
\index{ImageMagick}%
\label{gd/imageMagick}%
\item Um die Mediendatenbank vernünftig nutzen zu können, benötigen Sie
entweder das PHP-Modul \cmd{gd} oder das Paket ImageMagick. Sollten Sie
Letzteres benutzen, müssen die Dateien des Pakets für Ihren Web"=Benutzer
ausführbar sein.
\index{socket (PHP-Modul)}%
\index{Firewall}%
\label{socket}%
\item Damit Serendipity auf fremde Webseiten zugreifen kann, um z.\,B.\
Webservices zu integrieren und den Download von Plugins zu ermöglichen,
benötigt es das (standardmäßig aktivierte) PHP-Modul \cmd{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 (z.\,B.\ \cmd{spartacus.s9y.org} und
\cmd{netmirror.org} 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.
\index{openssl (PHP-Modul)}%
\label{openssl}%
\item Damit die Serendipity-Komponenten intern auf \cmd{https}-URLs zugreifen
können (und beispielsweise Trackbacks zu solchen geschützten URLs senden
können), wird das PHP-Modul \cmd{openssl} benötigt.
\index{zlib (PHP-Modul)}%
\label{zlib}%
\item Soll Serendipity die HTML-Seiten per \cmd{gzip}-Kompression
bündeln, wird das PHP-Modul \cmd{zlib} benötigt.
\index{sendmail}
\label{sendmail}%
\item Um E-Mails zu versenden (z.\,B.\ um auf neue Kommentare
hinzuweisen), muss PHP mit der \cmd{sendmail}-Option kompiliert worden
sein.
\index{MySQL}%
\index{PostgreSQL}%
\index{SQLite}%
\label{mysql, pgsql, sqlite}%
\item Abgesehen von einem
Datenbanksystem muss auf Ihrem Server auch die Client-Schnittstelle für
die jeweilige Datenbank (MySQL(i), PostgreSQL, SQLite) als PHP-Modul
(\cmd{mysql}, \cmd{mysqli}, \cmd{pgsql}, \cmd{sqlite})
%PJ:Die Namen der Datenbanken nicht in \cmd{}, da das halt nur
%Projektnamen, keine Binarynamen, Konfigurationsoptionen o.ae. sind.
%GH:Wir brauchen aber einen hervorgehobenen Teil, damit dieses \item
%ähnlich wie die anderen ein gehighlightetes Keyword enthält, um
%querlesen zu ermöglichen.
eingebunden sein. Standardmäßig wird PHP mit MySQL-Bibliotheken
eingerichtet; seit PHP 5 ist auch das Datenbanksystem SQLite
üblicherweise aktiviert.
\index{Cache}%
\index{APC}%
\index{ZendCache}%
\index{ionCube}%
\label{APC, ZendCache, ionCube}%
\item Um die Geschwindigkeit zu erhöhen,
empfiehlt sich der Einsatz von PHP-Bytecode-Caches wie APC (\cmd{apc}),
ZendCache
oder ionCube.
\end{osplist}
\index{PHPModule@PHP-Module|)}%
\index{PHP!Konfigurationseinstellungen}%
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 \cmd{php.ini}"=Konfigurationsdatei
geändert
\index{phpini@php.ini}%
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.
\index{VirtualHost}%
Kommt Apache zum Einsatz, können die Einstellungen auch pro Domain
konfiguriert werden. Im jeweiligen \cmd{<{}VirtualHost>}-Abschnitt der
Konfigurationsdatei (je nach Apache-Version unterschiedlich, meist
\cmd{httpd.conf}
\index{httpd.conf}%
oder auch in Dateien unterhalb des Apache \cmd{conf.d}-Verzeichnisses)
muss dazu \cmd{php\_admin\_value
\cmdvar{option} \cmdvar{wert}} bzw.\ \cmd{php\_value \cmdvar{option}
\cmdvar{wert}}\osplinebreak{} eingetragen werden. Alle per \cmd{php\_value}
einstellbaren Optionen lassen sich auch über eine \cmd{.htaccess}-Datei
\index{htaccess@.htaccess}%
im Stammverzeichnis des Webauftritts verändern. Einstellungen in
dieser Datei haben Vorrang vor den globalen Optionen, die in der
Webserverkonfiguration oder in \cmd{php.ini} definiert wurden. Via
\cmd{php\_admin\_value} gesetzte Werte lassen sich von
\cmd{.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, \emph{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 \cmd{.htaccess}-Dateien nicht
genehmigt.
\index{htaccess@.htaccess}%
Haben Sie die Möglichkeit, die \cmd{.htaccess}-Nutzung über
\index{AllowOverride (Apache-Option)}%
die Option \cmd{Allow\-Override} in der Webserver-Konfigurationsdatei zuzulassen, geschieht dies im
\cmd{<{}VirtualHost>}-Abschnitt mittels
\begin{ospcode}
<Directory \cmdvar{/pfad/zum/serendipity-verzeichnis}>
AllowOverride All
</Directory>
\end{ospcode}
\index{AllowOverride (Apache-Option)}%
Notfalls reicht auch \cmd{AllowOverride Options
FileInfo}. Der Wert \cmd{All} erlaubt es Plugins grundsätzlich, weitere
Webserver-Optionen zu setzen, und gibt Ihnen damit mehr Flexibilität.
Serendipity setzt in seiner \cmd{.htaccess}-Datei (siehe Seite
\pageref{htaccess}) die
Optionen \cmd{session.use\_trans\_sid} (Seite
\pageref{session-trans-sid}) und \cmd{register\_globals} (Seite
\pageref{register-globals}). Bei der Benutzung des Apache-Moduls
\cmd{mod\_rewrite} kommen auch die Optionen \cmd{RewriteEngine},
\cmd{RewriteBase} und \cmd{RewriteRule} zum Einsatz. Die
\cmd{.htaccess}-Optionen \cmd{ErrorDocument} und \cmd{DirectoryIndex}
ermöglichen freie Permalinks (siehe Seite \pageref{urlformung}).
Damit der Webserver bestimmte Serendipity"=Dateien nicht im Klartext
darstellt, folgt ein \cmd{Deny from All} als Sicherheitsmaßnahme.
\subsubsection{Sprechende URLs}\label{mod-rewrite}%
\index{mod\_rewrite|(}%
\index{Error-Handling}%
\index{URL-Umformung|(}%
\index{sprechende URLs|(}%
\index{URL!sprechende|(}%
\cmd{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 \cmd{serendipity\_admin.php} nutzen, lässt man sie besser auf eine
URL wie \cmd{http://www.example.com/""serendipity/admin/} zugreifen, die
den Browser auf die tatsächlich existierende Datei \cmd{serendipity\_admin.php} umleitet.
Das \cmd{mod\_rewrite}-Modul ermöglicht es Serendipity, sogenannte \emph{sprechende
URLs} (auch \emph{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
\index{Google!Indizierung durch \textasciitilde}%
\index{Suchroboter!Indizierung durch \textasciitilde}%
Artikel aufgrund der Schlagwörter in der URL besser indizieren.
Serendipity kann auch mit sprechenden URLs arbeiten, wenn \cmd{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
\emph{Error-Handling} (genau: der \cmd{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
\cmd{mod\_rewrite} und klappt leider nicht auf allen Servern, da sie die oben
erwähnte \cmd{AllowOverride}-Einstellung \cmd{All} voraussetzt. Andere
Webserver wie Microsoft IIS oder lighttpd bieten diese Möglichkeiten leider
nicht, daher ist dort keine URL-Umformung möglich\footnote{Mit etwas manuellem
Aufwand und Kenntnis der Webserver lassen sich die benötigten Umformungsregeln
jedoch auch nachrüsten, mehr dazu unter \cmd{http://s9y.org/""119.html}}.
Bei der Installation wird Serendipity versuchen, automatisch die
passendste Methode für Sie herauszufinden. Abhängig
davon wird die \cmd{.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.
\index{Probleme!URL-Umformung}%
Sobald für Serendipity das \cmd{mod\_rewrite}-Modul aktiviert ist, wird
Serendipity \emph{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 \cmd{.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 \cmd{.htaccess}-Datei erstellen, mit
dem Inhalt:
\begin{ospcode}
RewriteEngine off
\end{ospcode}
Diese Anweisung sorgt dafür, dass für das jeweilige Programm die
URL-Umformung deaktiviert wird.
\index{mod\_rewrite|)}%
\index{URL-Umformung|)}%
\index{sprechende URLs|)}%
\index{URL!sprechende|)}%
\subsection{Für Serendipity relevante PHP-Konfigurationsoptionen}
\index{phpini@php.ini|(}%
\index{httpd.conf|(}%
Folgende Optionen sind für Serendipity maßgeblich:
\begin{ospdescription}
\index{phpini@php.ini!magic\_quotes\_gpc}%
\index{phpini@php.ini!magic\_quotes\_runtime}%
\ospitem{\cmd{php\_value magic\_quotes\_gpc}}
\ospadditem{\cmd{php\_value magic\_quotes\_runtime}}
setzbar in \cmd{.htaccess}, \cmd{php.ini} oder in der Webserverkonfiguration;
Diese Variablen bestimmen, ob PHP Sonderzeichen in URL-Variablen (\cmd{GET},
\cmd{POST}, \cmd{COOKIE}) automatisch in ein sicheres Format
umwandelt. Serendipity benötigt diesen Service nicht, da es
die entsprechende Umformung selber vornimmt. Steht eine dieser Optionen auf
\cmd{true}, macht Serendipity die entsprechende Konvertierung
rückgängig. Daher empfiehlt es sich aus Performancegründen, die beiden
Einstellungen auf \cmd{false} zu setzen und damit zu deaktivieren.
\index{phpini@php.ini!session.use\_cookies}%
\ospitem{\cmd{php\_value session.use\_cookies}}
\cmd{.htaccess}, \cmd{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
\index{Cookies}%
\index{Session-Cookies}%
PHP-Session-Cookies nutzen kann, muss diese Option aktiviert sein.
\label{session-trans-sid}%
\index{phpini@php.ini!session.use\_trans\_sid}%
\ospitem{\cmd{php\_value session.use\_trans\_sid}}
wird von Serendipity selbst in der \cmd{.htaccess}-Datei auf \cmd{0}
gesetzt, kann aber auch in der \cmd{php.ini} oder der
Webserverkonfiguration geändert werden;
Wenn der Browser keine Cookies akzeptiert, kann die Session-ID auch an
\index{URL!mit Session-ID}%
die URL angehängt werden.
PHP macht dies automatisch, wenn die Option
\cmd{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
\index{Angriff!auf Session-Dateien}%
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
\cmd{http://www.example.com/seren\-dipity/index.php?PHPSESSID=23213123adasd},
kann es sein, dass diese Person
\index{Missbrauch!von Session-Daten verhindern}%
Ihre Daten ausspähen will. Die serverseitige Deaktivierung der PHP-Option
\cmd{session.use\_trans\_sid} beugt
solchem Missbrauch vor.
\index{phpini@php.ini!allow\_url\_fopen}%
\ospitem{\cmd{php\_admin\_value allow\_url\_fopen}}
nur in der \cmd{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
\index{Angriff!auf das System}%
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 \emph{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.
\label{register-globals}%
\index{phpini@php.ini!register\_globals}%
\ospitem{\cmd{php\_value register\_globals}}
wird von Serendipity selbst in der \cmd{.htaccess}-Datei auf
\cmd{off} gesetzt, kann aber auch in \cmd{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.
\index{phpini@php.ini!safe\_mode}%
\ospitem{\cmd{php\_admin\_value safe\_mode}}
\ospadditem{\cmd{php\_admin\_value safe\_mode\_include\_dir}}
\ospadditem{\cmd{php\_admin\_value safe\_mode\_gid}}
lediglich via \cmd{php.ini} oder
Webserverkonfiguration änderbar;
\index{Safe Mode (PHP)}%
\label{Safe Mode}%
PHPs \emph{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 \cmd{safe\_mode\_include""\_dir} und \cmd{safe\_mode\_gid}
legen fest, auf welche Verzeichnisse ein PHP-Skript Zugriff hat. Solange
die Benutzerrechte (\emph{Permissions}) und die Eigentumsverhältnisse
(\emph{Ownership}) auf dem Webserver für das
Serendipity-Installationsverzeichnis korrekt gesetzt sind, lassen sich z.\,B.\
Mediendatenbank-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.
\index{phpini@php.ini!open\_basedir}%
\ospitem{\cmd{php\_admin\_value open\_basedir}}
nur via \cmd{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 \cmd{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 (\cmd{;}).
Bleibt diese Option leer, ist der Zugriff auf alle
Verzeichnisse möglich. Befindet sich
bereits der Verzeichniseintrag \cmd{.} in der Auf"|listung, 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.
\index{phpini@php.ini!session.cookie\_domain}%
\ospitem{\cmd{php\_value session.cookie\_domain}}
\cmd{.htaccess}, \cmd{php.ini} oder Webserverkonfiguration;
Wenn Serendipity einen HTTP-Cookie setzt (also z.\,B.\ die Session-ID
oder Login-Daten), enthalten diese den Namen der Domain, auf dem sich die
Serendipity-Installation befindet. Falls in der PHP-Variable
\cmd{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.
\index{phpini@php.ini!session.save\_path}%
\ospitem{\cmd{php\_value session.save\_path}}
\cmd{.htaccess}, \cmd{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 (z.\,B.\osplinebreak{} \cmd{C:/Temp}) eingetragen ist. Sollten
PHP-Sessions nicht schreibbar sein, zeigt Serendipity
Fehlermeldungen an.
\label{file-uploads}%
\index{phpini@php.ini!file\_uploads}%
\index{phpini@php.ini!post\_max\_size}%
\index{phpini@php.ini!upload\_max\_filesize}%
\index{phpini@php.ini!max\_input\_time}%
\ospitem{\cmd{php\_admin\_value file\_uploads}}
\ospadditem{\cmd{php\_value post\_max\_size}}
\ospadditem{\cmd{php\_value upload\_max\_filesize}}
\ospadditem{\cmd{php\_value max\_input\_time}}
\cmd{.htaccess}, \cmd{php.ini} oder
Webserverkonfiguration -- \cmd{file\_uploads} nur via \cmd{php.ini} oder
Webserverkonfiguration änderbar;
Damit man überhaupt Dateien hochladen kann, muss \cmd{file\_uploads} aktiv sein. Die
maximale Dateigröße einer hochgeladenen Datei legen
\cmd{post\_max\_size}, das ein Limit für HTTP-Requests mitsamt aller Daten
definiert, und
\cmd{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 \cmd{max\_input\_time} fest.
\label{memory-limit}%
\index{phpini@php.ini!memory\_limit}%
\ospitem{\cmd{php\_admin\_value memory\_limit}}
Einstellung via \cmd{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 \cmd{memory\_limit} fest. Sollte der Arbeitsspeicher
Fehlermeldungen zufolge nicht mehr ausreichen, müssen Sie entweder dieses
Limit hochsetzen oder Serendipity-Plugins löschen.
\index{phpini@php.ini!display\_errors}%
\ospitem{\cmd{php\_value display\_errors}}
\ospadditem{\cmd{php\_value error\_log}}
\cmd{.htaccess}, \cmd{php.ini} oder \cmd{httpd.conf};
Einige Server geben PHP-Fehlermeldungen nicht an den Browser weiter, um
\index{Fehlermeldungen!PHP-Fehlermeldungen nicht an Browser geben}%
\index{PHPFehlermeldungen@PHP-Fehlermeldungen!nicht an Browser geben}%
\index{Angriff!Informationen über \textasciitilde{}e}%
weniger leicht angreifbar zu sein.\footnote{Fehlermeldungen können
kritische Dateipfade eines Servers offenlegen (\emph{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.
\end{ospdescription}
\index{phpini@php.ini|)}%
\index{httpd.conf|)}%
\subsection{\label{htaccess}Serendipitys .htaccess-Datei}
\index{htaccess@.htaccess}%
Befehle, die Serendipity eigenständig in die
\cmd{.htaccess}-Datei im Stammverzeichnis einträgt, fasst die Software in einen
Block ein, der mit
\cmd{\#Begin s9y} beginnt und mit \cmd{\#End s9y} endet. Wenn Sie eigene
Parameter in diese Datei einfügen, tun Sie dies daher vor
\cmd{\#Begin s9y} oder nach \cmd{\#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 \cmd{s9y}-Block nochmals
ein.
Auf einem Server ohne \cmd{mod\_rewrite} sieht der \cmd{s9y}-Block wie
folgt aus:
\input{snippets/htaccess}
Der erste Parameter, \cmd{DirectoryIndex}, legt die zentrale Serendipity-Datei
\cmd{index.php} als Startseite des Blogs fest. Wenn in der Serendipity"=Konfiguration
bei der \menu{URL-Umformung} (siehe Seite \pageref{urlformung}) die Option
\menu{Apache ErrorHandling} eingestellt wurde, folgt als nächste Zeile der
Eintrag \cmd{ErrorDocument 404 /serendipity/index.php}. Die darin genannte Datei
dient als Weiterleitungsziel für alle virtuellen URLs, auch bei der Verwendung
von \cmd{mod\_""rewrite}.
Die nächsten beiden Zeilen deaktivieren die PHP-Einstellungen
\cmd{session.""use\_trans\_sid} und \cmd{register\_globals}.
Zuletzt folgen mehrere Abschnitte, die den Zugriff auf interne
Serendipity-Dateien (\cmd{*.tpl.php}, \cmd{*.tpl}, \cmd{*.sql},
\cmd{*.inc.php} und \cmd{*.db}) verbieten.
Wurde \cmd{mod\_rewrite} aktiviert, sieht die
\cmd{.htaccess} bis auf einen Block genauso aus wie die eben
gezeigte:
\input{snippets/htaccess-rewrite}
Hinzugekommen ist der Befehl \cmd{RewriteEngine On}, der
\cmd{mod\_rewrite} aktiviert. \cmd{RewriteBase} legt den Stammpfad für
alle Operationen fest. Die einzelnen \cmd{RewriteRule}s legen fest,
wohin der Nutzer weitergeleitet wird, wenn er spezielle URLs aufruft.
Der erste Teil hinter einer \cmd{RewriteRule} gibt an, welches Muster in
der URL gesucht wird, der zweite Teil legt fest, welche Datei
aufgerufen wird, und zuletzt folgen spezielle
\cmd{mod\_rewrite}-Optionen in eckigen Klammern.
\cmd{L} gibt eine abschließende Regel an: Sobald eine URL auf das
jeweilige Muster zutrifft, werden die übrigen Muster nicht mehr geprüft.
\cmd{QSA} bedeutet, dass URL-Parameter (die sogenannten \emph{GET-Variablen}) an
die Ziel-URL angehängt werden. \cmd{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.
\label{PEAR}%
\subsection{PEAR}
\index{PEAR}%
Das \emph{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: \cmd{Cache::Lite}, \cmd{HTTP::Request}, \cmd{Onyx},
\cmd{Net::Socket}, \cmd{Text::Wiki} und \cmd{XML::RPC}. Damit diese
nicht zentral auf dem Webserver installiert sein müssen, liefert
Serendipity die Komponenten im Unterverzeichnis \cmd{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
\cmd{bundled-libs}-Verzeichnis anfassen müssen. Dabei kommt es manchmal
zu (Versions-)Konflikten.
In diesem Fall kann man in der globalen Serendipity-Konfigurationsdatei
\cmd{serendipity\_config.inc.php} mit
\begin{ospcode}
$serendipity['use_PEAR'] = false;
\end{ospcode}
darauf beharren, dass die von s9y mitgelieferten Komponenten zum
Einsatz kommen.
\index{Serendipity!Voraussetzungen|)}%
%revised
\section{Terminologie}
\index{Terminologie}%
\label{Terminologie}%
\index{Web 2.0}%