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 |