1 |
wakaba |
1.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 |