| 1 |
|
| 2 |
News Portal |
| 3 |
|
| 4 |
Version 0.24pre1 |
| 5 |
|
| 6 |
Einleitung |
| 7 |
|
| 8 |
Newsportal ist ein PHP-Basierter Newsreader. Es steht unter der GNU |
| 9 |
Public License (siehe beiliegende LICENSE). |
| 10 |
|
| 11 |
Überblick |
| 12 |
|
| 13 |
Diese Skriptsammlung ermöglicht von einer Webseite aus den Zugriff auf |
| 14 |
einen Newsserver (per NNTP). Man kann damit Webforen und Newsgruppen |
| 15 |
verbinden, so daß auf ein "Webforum" auch per NNTP zugegriffen werden |
| 16 |
kann. Dieses Skript eignet sich auch für die Präsentation von |
| 17 |
Announce-Newsgruppen auf Webseiten, ohne daß der Benutzer merkt, daß |
| 18 |
er in Wirklichkeit auf einen Newsserver zugreift. |
| 19 |
|
| 20 |
Die eigentliche Funktionalitäts des Skripts liegt in der Datei |
| 21 |
newsportal.php3, in der die meisten php3-Funktionen untergebracht |
| 22 |
sind. Zusätzlich gibt es vier weitere php3-Dateien, auf die direkt mit |
| 23 |
dem Browser zugegriffen wird: |
| 24 |
* index.php3 zeigt die auf dem Newsserver verfügbaren Newsgruppen an |
| 25 |
(sofern sie auch in die Datei groups.txt eingetragen sind). |
| 26 |
* thread.php3 zeigt die Artikel in einer Newsgruppe an. |
| 27 |
* article.php3 zeigt einen einzelnen Artikel an. |
| 28 |
* post.php3 schreibt eine Nachricht in die passende Newsgruppe. |
| 29 |
WARNUNG: Dieses Skript erzeugt noch nicht unbedingt RFC-Konforme |
| 30 |
Nachrichten. So werden Umlaute im Subject nicht 7bit-kodiert! |
| 31 |
* config.inc enthält die Einstellungen |
| 32 |
* body.inc enthält die HTML-Bodyzeile, in der z.B. die |
| 33 |
Hintergrundfarbe gesetzt wird. Das betrifft nur "index.php3", |
| 34 |
"thread.php3", "post.php3" und "article.php3". |
| 35 |
* deutsch.lang: Die deutschen Sprachdefinitionen |
| 36 |
* english.lang: Die englischen Sprachdefinitionen |
| 37 |
|
| 38 |
Da das Abfragen der Artikelübersicht vom Newsserver viel Zeit |
| 39 |
beansprucht, werden diese Dateien im Verzeichnis spool/ |
| 40 |
zwischengespeichert. Die Dateien dort drin können nach belieben |
| 41 |
gelöscht werden, sie werden bei Bedarf neu angelegt. |
| 42 |
|
| 43 |
Installation: |
| 44 |
|
| 45 |
1. Das Archiv in ein Verzeichnis entpacken. |
| 46 |
2. Die Datei config.inc muß angepasst werden (für einen Schnellstart |
| 47 |
müssen $server, $port, $title und gegebenenfalls $readonly |
| 48 |
verändert werden). |
| 49 |
3. In die Datei groups.txt werden alle Newsgruppen eingetragen, die |
| 50 |
Newsportal anzeigen soll. Optional kann man hinter den |
| 51 |
Gruppennamen von einem Leerzeichen getrennt eine Beschreibung |
| 52 |
eintragen, die dann von der index.php3 angezeigt wird. Fehlt |
| 53 |
diese, wird die Beschreibung vom Newsserver angefordert. |
| 54 |
4. Das Verzeichnis spool muß mit "chmod 777 spool" für jeden les- und |
| 55 |
schreibbar gemacht werden. Nach einem Update kann es passieren, |
| 56 |
daß das Skript ohne das Löschen aller Dateien in diesem |
| 57 |
Verzeichnis nicht funktioniert. Das kommt aber darauf an, ob ich |
| 58 |
das Format dieser Dateien geändert habe. NewsPortal erkennt |
| 59 |
normalerweise fehlerhafte Spooldateien und löscht sie |
| 60 |
gegebenenfalls. |
| 61 |
|
| 62 |
Konfiguration |
| 63 |
|
| 64 |
Folgende Einstellungen können in der config.inc vorgenommen werden: |
| 65 |
|
| 66 |
Verzeichnisse und Dateien: |
| 67 |
* $file_newsportal="newsportal.php3": Name des newsportal-Skripts |
| 68 |
* $file_groups="index.php3": Die Gruppenübersicht |
| 69 |
* $file_thread="thread.php3": Die Artikelübersicht |
| 70 |
* $file_article="article.php3": Zeigt den Artikel an |
| 71 |
* $file_post="post.php3": einen Artikel schreiben. Die Datei kann |
| 72 |
entfernt werden, wenn das System auf readonly gesetzt ist (siehe |
| 73 |
unten) |
| 74 |
* $file_language="deutsch.lang": Verweis auf die |
| 75 |
Sprachdefinitionsdatei. |
| 76 |
* $file_footer: Hier kann Optional der Name einer Datei angegeben |
| 77 |
werden, die an jede über Newsportal verschickte Nachricht |
| 78 |
angehängt wird. |
| 79 |
|
| 80 |
Servereinstellungen |
| 81 |
* $server: Adresse des Newsservers |
| 82 |
* $port: Port des Newsservers, normalerweise 119 |
| 83 |
* $post_server: Optional kann hier für das Schreiben von Artikeln |
| 84 |
ein eigener Server angegeben werden. Es ist dann natürlich so, daß |
| 85 |
ein Artikel eine Zeit braucht, bis er vom $post_server zum $server |
| 86 |
gelangt ist. |
| 87 |
* $post_port: Port des Post-Newsservers, normalerweise 119 |
| 88 |
* $maxfetch: Hier wird die maximal bei einem Aufruf von thread.php3 |
| 89 |
vom Newsserver anzufordernden Artikelübersichten beschränkt. Auf |
| 90 |
"0" gesetzt werden so viele Artikel angefordert, wie neu zur |
| 91 |
Verfügung stehen, jede andere Nummer legt die Maximalanzahl fest. |
| 92 |
Diese Option sollte nur dann auf etwas anderes als 0 gesetzt |
| 93 |
werden, wenn es Probleme mit der Geschwindigkeit gibt. |
| 94 |
* $initialfetch: Bei einem Neuaufbau der Overview-Spooldatei wird |
| 95 |
statt $maxfech viele Artikel maximal $initialfetch viele Artikel |
| 96 |
abgeholt. Bei "0" ist es auch ungeschränkt. |
| 97 |
* $server_auth_user: Falls der Newsserver durch Name und Passwort |
| 98 |
gschützt wird, kann hier der Username angegeben werden. Ansonsten |
| 99 |
einfach die Variable auf "" setzen. |
| 100 |
* $server_auth_pass: Hier wird das zum Usernamen passende Passwort |
| 101 |
angegeben. |
| 102 |
|
| 103 |
Threaddarstellung |
| 104 |
* $treestyle: Setzt das Aussehen des Nachrichtenbaums. |
| 105 |
+ 0: Einfache Auflistung der Artikel |
| 106 |
+ 1: Einfache Auflistung der Artikel, jedoch als |
| 107 |
HTML-Auflistung |
| 108 |
+ 2: Einfache Auflistung in Tabellenform |
| 109 |
+ 3: Thread mit HTML-Auflistungen |
| 110 |
+ 4: Thread aus Textzeichen |
| 111 |
+ 5: Thread auf Graphikelementen |
| 112 |
+ 6: Thread aus Textzeichen mit Tabelle |
| 113 |
+ 7: Thread aus Grafikzeichen mit Tabelle |
| 114 |
* $thread_fontPre: Der Inhalt dieser Variable wird vor Texten in der |
| 115 |
Threadansicht ausgegeben. Diese Variable ist gedacht um z.B. die |
| 116 |
Textgröße der Texte zu ändern. Standardmäß wird dort der Font |
| 117 |
klein gestellt. Das ist bei alle Threadstyles sinnvoll, wo mit |
| 118 |
Tabellen gearbeitet wird, bei allen anderen ist es schöner die |
| 119 |
Variable auf einen leeren String zu setzen. |
| 120 |
* $thread_fontPost: Das gleiche wie $thread_fontPre, nur daß dieser |
| 121 |
String nach Textausgaben ausgegeben wird. |
| 122 |
* $thread_showDate, |
| 123 |
$thread_showSubject, |
| 124 |
$thread_showAuthor: |
| 125 |
+ true: das Datum / das Subject / der Autor wird im Artikelbaum |
| 126 |
angezeigt |
| 127 |
+ false: Darstellung wird unterdrückt. |
| 128 |
* $thread_maxSubject: Anzahl der Zeichen, die vom Subject in der |
| 129 |
Artikelübersicht angezeigt werden. |
| 130 |
* $maxarticles: Gibt die Anzahl der Artikel an, die maximal im |
| 131 |
Artikelbam angezeigt werden. "0" bedeutet keine Beschränkung. Es |
| 132 |
werden immer die letzten x Artikel angezeigt, wo wie sie auf dem |
| 133 |
Newsserver liegen. Das muß nicht unbedingt mit dem Erstelldatum |
| 134 |
des Artikels übereinstimmen. |
| 135 |
* $maxarticles_extra: Das Problem beim Betrieb mit $maxarticles ist, |
| 136 |
daß alle Artikeldaten vom Newsserver komplett neu angefordert |
| 137 |
werden müssen, wenn der angegebene Wert überschritten worden ist. |
| 138 |
Damit dies nicht ganz so oft vorkommt, kann $maxarticles_extra |
| 139 |
gesetzt werden. Dann wird die Artikeldatenbank erst neu aufgebaut, |
| 140 |
wenn $maxarticles + $maxarticles_extra Artikel vorliegen, wobei |
| 141 |
dann $maxarticles viele Artikeldaten angefordert werden. Wenn man |
| 142 |
mit $maxarticles arbeitet, weil die Newsgruppen zu groß sind, |
| 143 |
sollte man unbedingt immer auch mit $maxarticles_extra arbeiten. |
| 144 |
Der Wert sollte etwa 20% von $maxarticles betragen. Nur dann, wenn |
| 145 |
man wirklich eine ganz genau vorgegebene Anzahl von Artikeln auf |
| 146 |
einer Webseite anzeigen will, sollte man hier den Wert auf Null |
| 147 |
setzen. |
| 148 |
* $age_count: Anzahl der verschiedenen Altersstufen für die |
| 149 |
farbliche Markierung von Artikeln |
| 150 |
* $age_time[n]: maximales Alter eines Artikels in Sekunden, so daß |
| 151 |
der Artikel mit der Farbe $age_color[n] markiert wird. n ist eine |
| 152 |
natürliche Zahl >= 1, wobei alle Zahlen von 1 bis n vergeben sein |
| 153 |
müssen, Lücken sind also nicht erlaubt. |
| 154 |
* $age_color[n]: Die Farbe, mit dem der Artikel markiert wird |
| 155 |
* $thread_sorting: Die Sortierreihenfolge für die Artikel: |
| 156 |
+ 0: Keine Sortierung, die Artikel werden in der Reihenfolge |
| 157 |
angezeigt, in der sie vom Newsserver kommen. |
| 158 |
+ 1: aufsteigende Sortierung, die ältesten Artikel zu oberst |
| 159 |
+ -1: absteigende Sortierung, die neusten Artikel zu oberst |
| 160 |
Es ist zu beachten, daß die Artikel in einer Baumstruktur |
| 161 |
angezeigt werden, so daß der oberste Artikel eines Teilbaums immer |
| 162 |
den Ausschlag gibt. |
| 163 |
* $articles_per_page: Ist dieser Wert ungleich 0, so gibt er die |
| 164 |
Anzahl der Artikel an, die auf einer Seite gleichzeitig angezeigt |
| 165 |
werden sollen. Es gibt dann Links um die einzelnen Seiten zu |
| 166 |
wechseln. Benutzt man diese Option, so sollte man $maxarticles |
| 167 |
beachten: Diese Variable gibt nämlich auch an, wieviele Artikel in |
| 168 |
den Spooldateien gespeichert werden, sa daß ein zu hoher Wert |
| 169 |
trotz Seiteneinteilung die Geschwindigkeit herabsetzen kann. |
| 170 |
* $startpage: In Verbindung mit $articles_per_page wird hier |
| 171 |
angegeben, welche Seite bei Aufruf des Threads angezeigt werden |
| 172 |
soll: |
| 173 |
+ "first": zeigt zuerst die erste Seite an. |
| 174 |
+ "last": zeigt die letzte Seite an. |
| 175 |
Die Angabe sollte mit $thread_sorting abgestimmt werden. "first" |
| 176 |
für 0 und 1, und "last" für -1. |
| 177 |
|
| 178 |
Artikeldarstellung |
| 179 |
* $article_show["Subject"], |
| 180 |
$article_show["From"], |
| 181 |
$article_show["Newsgroups"], |
| 182 |
$article_show["Organization"], |
| 183 |
$article_show["Date"], |
| 184 |
$article_show["Message-ID"], |
| 185 |
$article_show["User-Agent"], |
| 186 |
$article_show["References"]: Bei "true" wird die jeweilige |
| 187 |
Headerzeile in der Artikelansicht angezeigt, bei "false" wird sie |
| 188 |
unterdrückt. Momentan ist die Ansicht weiterer Headerzeilen nicht |
| 189 |
möglich. |
| 190 |
|
| 191 |
Frameunterstützung |
| 192 |
Beispieldateien für die Frameunterstützung liegen in extras/frames/. |
| 193 |
In dieser Sektion werden die targets für diverse Links definiert, also |
| 194 |
in welchem Frame welche Webseite dargestellt werden soll. In der |
| 195 |
config.inc muß statt "thread.php3" "thread_frameset.php3" eingetragen |
| 196 |
werden. |
| 197 |
* $frame_article: Name des Artikel-Frames. Muß mit dem Namen in |
| 198 |
thread_frameset.php3 übereinstimmen |
| 199 |
* $frame_thread: Name des Thread-Frames; |
| 200 |
* $frame_groups: Name des Frames für die Gruppenübersicht, |
| 201 |
normalerweise "_top". |
| 202 |
* $frame_post: Name des Schreiben-Frames |
| 203 |
* $frame_threadframeset: Frame, in dem der Frameset erscheinen soll, |
| 204 |
der den Artikel- und Thread-Frame aufnimmt. Normalerweise "_top". |
| 205 |
* $frame_externallink: Zielframe für extrerne Links innerhalb von |
| 206 |
Artikeln |
| 207 |
|
| 208 |
Sicherheitseinstellungen |
| 209 |
* $send_poster_host: bei "true" wird bei jeder geschriebenen |
| 210 |
Nachricht noch die Zeile "X-HTTP-Posting-Host: " in den Header |
| 211 |
geschrieben, und der Name des Rechners eingetragen, der die |
| 212 |
Nachricht abgeschickt ist. Das kann als Ersatz von |
| 213 |
"NNTP-Posting-Host" angesehen werden, dessen Wert beim Einsatz von |
| 214 |
Newsportal immer nur den Namen des Webservers anzeigt. |
| 215 |
* $readonly: wenn auf "true" gesetzt, kann man keine Artikel in |
| 216 |
Gruppen schreiben. |
| 217 |
* $testgroup: auf "true" gesetzt wird beim Anzeigen des Threads |
| 218 |
überprüft, ob betreffende Gruppe in die "groups.txt" eingetragen |
| 219 |
ist. Andernfalls könnte man über das direkte Eintragen der |
| 220 |
richtigen URL eine Gruppe einsehen, obwohl diese nicht in der |
| 221 |
Gruppenübersicht angezeigt wird. |
| 222 |
* $validate_email: Hier kann eingestellt werden, wie Newsportal beim |
| 223 |
Posten eine angegebene eMail-Adresse auf richtigkeit prüft: |
| 224 |
+ 0: keine Überprüfung. Ist nicht zu empfehlen, da |
| 225 |
normalerweise der Newsserver eine Fehlermeldung liefert, wenn |
| 226 |
die Adresse syntaktisch Falsch ist. |
| 227 |
+ 1: Ü:berprüft die Adresse auf syntaktische Richtigkeit. |
| 228 |
+ 2: hier wird zusätzlich überprüft, ob zu der angegebenen |
| 229 |
Domain ein MX oder A Record existiert. |
| 230 |
|
| 231 |
Allgemeines |
| 232 |
* $title: Name des Systems, wird als Überschrift verwendet |
| 233 |
* $organization: Die Organisation für den NNTP-Header beim Schreiben |
| 234 |
von Nachrichten |
| 235 |
* $setcookies: Erlaubt dem Benutzer, seinen Namen und seine |
| 236 |
eMail-Adresse beim schreiben eines Artikels als Cookie |
| 237 |
abzuspeichern, so daß die Daten beim erneuten Schreiben eines |
| 238 |
Artikels automatisch eingesetzt werden. |
| 239 |
* $compress_spoolfiles: Hier kann eingestellt werden, ob die |
| 240 |
Spooldateien komprimiert werden sollen. Dies ist im Normalfall |
| 241 |
empfohlen, da auf etwa 10 bis 15% der Originalgröße komprimiert |
| 242 |
wird. Bei aelteren PHP-Versionen muß man diese Variable jedoch auf |
| 243 |
false setzen, falls diese Kompression noch nicht unterstützen. |
| 244 |
|
| 245 |
Sicherheitshinweise |
| 246 |
|
| 247 |
Ein paar Kleinigkeiten müßen beachtet werden, damit NewsPortal nicht |
| 248 |
zu einem Sicherheitsloch werden soll: |
| 249 |
* Zu Debugzwecken wird immer der User-Agent in der Artikelansicht |
| 250 |
mitübermittelt, wenn die Anzeige ($article_show["User-Agent"]) |
| 251 |
abgeschaltet ist, ist der Eintrag lediglich unsichtbar. |
| 252 |
* Die config.inc kann solange von jedem Websurfer (der den |
| 253 |
Dateinamen kennt) abgerufen werden, wie die Datei nicht in einen |
| 254 |
geschützten Bereich des Webservers verschoben worden ist. |
| 255 |
|
| 256 |
Dieses Skript war ursprünglich (und eigentlich immer noch) nur für den |
| 257 |
Zugriff auf lokale Newsgruppen gedacht. Wenn Gruppen des UseNet im Web |
| 258 |
verfügbar sind, ergeben sich folgende Probleme: |
| 259 |
* Spammer können anonym ($send_poster_host beachten!) Artikel |
| 260 |
abschicken |
| 261 |
* Newsportal erzeugt 8bit-Headerzeilen (z.B. das Subject), was |
| 262 |
eigentlich nicht erlaubt ist. Es scheint aber keine ernsthaften |
| 263 |
Probleme zu geben. |
| 264 |
* Es gibt im Internet Listen mit sogenannten "offenen" Newsservern. |
| 265 |
Offen heißt hier meist nicht, daß die jeder benutzen darf, sondern |
| 266 |
daß diese einfach nur nicht ordentlich gesichert worden sind. |
| 267 |
Bevor Du also einen solchen Newsserver benutzt, solltest Du Dich |
| 268 |
vergewissern, daß der Betreiber nichts gegen Dein Vorhaben |
| 269 |
einzuwenden hat. |
| 270 |
* Es wird im UseNet oft nicht gerne gesehen, wenn Personen anonym in |
| 271 |
Newsgruppen schreiben können. Bevor Du also schreibenden Zugriff |
| 272 |
auf eine Newsgruppe erlaubst, solltest Du in der betreffenden |
| 273 |
Gruppe nachfragen, ob es dort keine Einwände gibt. Etwas anderes |
| 274 |
ist es natürlich, wenn Du NewsPortal in einem geschützten Bereich |
| 275 |
Deines Webservers betreibst, auf den nur eine Dir bekannte |
| 276 |
Benutzergruppe zugreifen kann. Gib keinen öffentlichen |
| 277 |
Schreibzugriff auf UseNet Newsgruppen, wenn Du nicht ganz genau |
| 278 |
weißt, was Du tust! |
| 279 |
|
| 280 |
Die Benutzung des Skripts erfolgt auf eigene Gefahr! |
| 281 |
|
| 282 |
Kompatiblität |
| 283 |
|
| 284 |
Sollte auf jedem PHP3-Fähigen Webserver zusammen mit jedem |
| 285 |
NNRP-fähigen Newsserver laufen. Webserver und Newsserver müßen nicht |
| 286 |
auf der selben Maschine laufen. |
| 287 |
|
| 288 |
Kontakt: |
| 289 |
|
| 290 |
Florian Amrhein |
| 291 |
eMail: florian.amrhein@gmx.de |
| 292 |
WWW: http://floh.gartenhaus.net |