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