News Portal
Version 0.24pre1
Einleitung
Newsportal ist ein PHP-Basierter Newsreader.
Es steht unter der GNU Public License (siehe beiliegende LICENSE).
Überblick
Diese Skriptsammlung ermöglicht von einer Webseite aus den Zugriff auf einen
Newsserver (per NNTP). Man kann damit Webforen und Newsgruppen verbinden, so
daß auf ein "Webforum" auch per NNTP zugegriffen werden kann. Dieses Skript
eignet sich auch für die Präsentation von Announce-Newsgruppen auf
Webseiten, ohne daß der Benutzer merkt, daß er in Wirklichkeit auf einen
Newsserver zugreift.
Die eigentliche Funktionalitäts des Skripts liegt in der Datei
newsportal.php3, in der die meisten php3-Funktionen untergebracht sind.
Zusätzlich gibt es vier weitere php3-Dateien, auf die direkt mit dem Browser
zugegriffen wird:
- index.php3 zeigt die auf dem Newsserver verfügbaren Newsgruppen an (sofern
sie auch in die Datei groups.txt eingetragen sind).
- thread.php3 zeigt die Artikel in einer Newsgruppe an.
- article.php3 zeigt einen einzelnen Artikel an.
- post.php3 schreibt eine Nachricht in die passende Newsgruppe.
WARNUNG: Dieses Skript erzeugt noch nicht unbedingt RFC-Konforme
Nachrichten. So werden Umlaute im Subject nicht 7bit-kodiert!
- config.inc enthält die Einstellungen
- body.inc enthält die HTML-Bodyzeile, in der z.B. die Hintergrundfarbe
gesetzt wird. Das betrifft nur "index.php3", "thread.php3", "post.php3"
und "article.php3".
- deutsch.lang: Die deutschen Sprachdefinitionen
- english.lang: Die englischen Sprachdefinitionen
Da das Abfragen der Artikelübersicht vom Newsserver viel Zeit beansprucht,
werden diese Dateien im Verzeichnis spool/ zwischengespeichert. Die Dateien
dort drin können nach belieben gelöscht werden, sie werden bei Bedarf neu
angelegt.
Installation:
- Das Archiv in ein Verzeichnis entpacken.
- Die Datei config.inc muß angepasst werden (für einen Schnellstart müssen
$server, $port, $title und gegebenenfalls $readonly verändert werden).
- In die Datei groups.txt werden alle Newsgruppen eingetragen, die
Newsportal anzeigen soll. Optional kann man hinter den Gruppennamen von
einem Leerzeichen getrennt eine Beschreibung eintragen, die dann von der
index.php3 angezeigt wird. Fehlt diese, wird die Beschreibung vom
Newsserver angefordert.
- Das Verzeichnis spool muß mit "
chmod 777 spool
" für jeden les- und
schreibbar gemacht werden. Nach einem Update kann es passieren, daß das
Skript ohne das Löschen aller Dateien in diesem Verzeichnis nicht
funktioniert. Das kommt aber darauf an, ob ich das Format dieser Dateien
geändert habe. NewsPortal erkennt normalerweise fehlerhafte Spooldateien und
löscht sie gegebenenfalls.
Konfiguration
Folgende Einstellungen können in der config.inc vorgenommen werden:
Verzeichnisse und Dateien:
- $file_newsportal="newsportal.php3": Name des newsportal-Skripts
- $file_groups="index.php3": Die Gruppenübersicht
- $file_thread="thread.php3": Die Artikelübersicht
- $file_article="article.php3": Zeigt den Artikel an
- $file_post="post.php3": einen Artikel schreiben. Die Datei kann entfernt
werden, wenn das System auf readonly gesetzt ist (siehe unten)
- $file_language="deutsch.lang": Verweis auf die Sprachdefinitionsdatei.
- $file_footer: Hier kann Optional der Name einer Datei angegeben
werden, die an jede über Newsportal verschickte Nachricht
angehängt wird.
Servereinstellungen
- $server: Adresse des Newsservers
- $port: Port des Newsservers, normalerweise 119
- $post_server: Optional kann hier für das Schreiben von
Artikeln ein eigener Server angegeben werden. Es ist dann natürlich so,
daß ein Artikel eine Zeit braucht, bis er vom $post_server zum $server
gelangt ist.
- $post_port: Port des Post-Newsservers, normalerweise 119
- $maxfetch: Hier wird die maximal bei einem Aufruf von thread.php3 vom
Newsserver anzufordernden Artikelübersichten beschränkt. Auf "0" gesetzt
werden so viele Artikel angefordert, wie neu zur Verfügung stehen, jede
andere Nummer legt die Maximalanzahl fest. Diese Option sollte nur dann
auf etwas anderes als 0 gesetzt werden, wenn es Probleme mit der
Geschwindigkeit gibt.
- $initialfetch: Bei einem Neuaufbau der Overview-Spooldatei wird statt
$maxfech viele Artikel maximal $initialfetch viele Artikel abgeholt.
Bei "0" ist es auch ungeschränkt.
- $server_auth_user: Falls der Newsserver durch Name und Passwort
gschützt wird, kann hier der Username angegeben werden. Ansonsten
einfach die Variable auf "" setzen.
- $server_auth_pass: Hier wird das zum Usernamen passende Passwort
angegeben.
Threaddarstellung
- $treestyle: Setzt das Aussehen des Nachrichtenbaums.
- 0: Einfache Auflistung der Artikel
- 1: Einfache Auflistung der Artikel, jedoch als HTML-Auflistung
- 2: Einfache Auflistung in Tabellenform
- 3: Thread mit HTML-Auflistungen
- 4: Thread aus Textzeichen
- 5: Thread auf Graphikelementen
- 6: Thread aus Textzeichen mit Tabelle
- 7: Thread aus Grafikzeichen mit Tabelle
- $thread_fontPre: Der Inhalt dieser Variable wird vor Texten in
der Threadansicht ausgegeben. Diese Variable ist gedacht um z.B. die
Textgröße der Texte zu ändern. Standardmäß wird
dort der Font klein gestellt. Das ist bei alle Threadstyles sinnvoll, wo mit
Tabellen gearbeitet wird, bei allen anderen ist es schöner die Variable
auf einen leeren String zu setzen.
- $thread_fontPost: Das gleiche wie $thread_fontPre, nur daß
dieser String nach Textausgaben ausgegeben wird.
- $thread_showDate,
$thread_showSubject,
$thread_showAuthor:
- true: das Datum / das Subject / der Autor wird im Artikelbaum angezeigt
- false: Darstellung wird unterdrückt.
- $thread_maxSubject: Anzahl der Zeichen, die vom Subject in der
Artikelübersicht angezeigt werden.
- $maxarticles: Gibt die Anzahl der Artikel an, die maximal im Artikelbam
angezeigt werden. "0" bedeutet keine Beschränkung.
Es werden immer die letzten x Artikel angezeigt, wo wie sie auf dem
Newsserver liegen. Das muß nicht unbedingt mit dem Erstelldatum des
Artikels übereinstimmen.
- $maxarticles_extra: Das Problem beim Betrieb mit $maxarticles
ist, daß alle Artikeldaten vom Newsserver komplett neu angefordert
werden müssen, wenn der angegebene Wert überschritten worden
ist. Damit dies nicht ganz so oft vorkommt, kann $maxarticles_extra
gesetzt werden. Dann wird die Artikeldatenbank erst neu aufgebaut, wenn
$maxarticles + $maxarticles_extra Artikel vorliegen, wobei dann
$maxarticles viele Artikeldaten angefordert werden. Wenn man mit
$maxarticles arbeitet, weil die Newsgruppen zu groß sind, sollte man
unbedingt immer auch mit $maxarticles_extra arbeiten. Der Wert sollte etwa
20% von $maxarticles betragen. Nur dann, wenn man wirklich eine ganz genau
vorgegebene Anzahl von Artikeln auf einer Webseite anzeigen will, sollte
man hier den Wert auf Null setzen.
- $age_count: Anzahl der verschiedenen Altersstufen für die
farbliche Markierung von Artikeln
- $age_time[n]: maximales Alter eines Artikels in Sekunden, so daß der
Artikel mit der Farbe $age_color[n] markiert wird. n ist eine natürliche
Zahl >= 1, wobei alle Zahlen von 1 bis n vergeben sein müssen, Lücken sind
also nicht erlaubt.
- $age_color[n]: Die Farbe, mit dem der Artikel markiert wird
- $thread_sorting: Die Sortierreihenfolge für die Artikel:
- 0: Keine Sortierung, die Artikel werden in der Reihenfolge angezeigt,
in der sie vom Newsserver kommen.
- 1: aufsteigende Sortierung, die ältesten Artikel zu oberst
- -1: absteigende Sortierung, die neusten Artikel zu oberst
Es ist zu beachten, daß die Artikel in einer Baumstruktur angezeigt
werden, so daß der oberste Artikel eines Teilbaums immer den Ausschlag
gibt.
- $articles_per_page: Ist dieser Wert ungleich 0, so gibt er die
Anzahl der Artikel an, die auf einer Seite gleichzeitig angezeigt werden
sollen. Es gibt dann Links um die einzelnen Seiten zu wechseln. Benutzt man
diese Option, so sollte man $maxarticles beachten: Diese Variable
gibt nämlich auch an, wieviele Artikel in den Spooldateien gespeichert
werden, sa daß ein zu hoher Wert trotz Seiteneinteilung die
Geschwindigkeit herabsetzen kann.
- $startpage: In Verbindung mit $articles_per_page wird hier
angegeben, welche Seite bei Aufruf des Threads angezeigt werden soll:
- "first": zeigt zuerst die erste Seite an.
- "last": zeigt die letzte Seite an.
Die Angabe sollte mit $thread_sorting abgestimmt werden. "first"
für 0 und 1, und "last" für -1.
Artikeldarstellung
- $article_show["Subject"],
$article_show["From"],
$article_show["Newsgroups"],
$article_show["Organization"],
$article_show["Date"],
$article_show["Message-ID"],
$article_show["User-Agent"],
$article_show["References"]: Bei "true" wird die jeweilige Headerzeile in der
Artikelansicht angezeigt, bei "false" wird sie unterdrückt. Momentan ist
die Ansicht weiterer Headerzeilen nicht möglich.
Frameunterstützung
Beispieldateien für die Frameunterstützung liegen in
extras/frames/. In dieser Sektion werden die targets für
diverse Links definiert, also in welchem Frame welche Webseite dargestellt
werden soll. In der config.inc muß statt "thread.php3"
"thread_frameset.php3" eingetragen werden.
- $frame_article: Name des Artikel-Frames. Muß mit dem Namen
in thread_frameset.php3 übereinstimmen
- $frame_thread: Name des Thread-Frames;
- $frame_groups: Name des Frames für die Gruppenübersicht,
normalerweise "_top".
- $frame_post: Name des Schreiben-Frames
- $frame_threadframeset: Frame, in dem der Frameset erscheinen
soll, der den Artikel- und Thread-Frame aufnimmt. Normalerweise "_top".
- $frame_externallink: Zielframe für extrerne Links innerhalb
von Artikeln
Sicherheitseinstellungen
- $send_poster_host: bei "true" wird bei jeder geschriebenen Nachricht noch
die Zeile "X-HTTP-Posting-Host: " in den Header geschrieben, und der Name
des Rechners eingetragen, der die Nachricht abgeschickt ist. Das kann als
Ersatz von "NNTP-Posting-Host" angesehen werden, dessen Wert beim Einsatz
von Newsportal immer nur den Namen des Webservers anzeigt.
- $readonly: wenn auf "true" gesetzt, kann man keine Artikel in Gruppen
schreiben.
- $testgroup: auf "true" gesetzt wird beim Anzeigen des Threads überprüft, ob
betreffende Gruppe in die "groups.txt" eingetragen ist.
Andernfalls könnte man über das direkte Eintragen der richtigen URL eine
Gruppe einsehen, obwohl diese nicht in der Gruppenübersicht angezeigt wird.
- $validate_email: Hier kann eingestellt werden, wie Newsportal
beim Posten eine angegebene eMail-Adresse auf richtigkeit prüft:
- 0: keine Überprüfung. Ist nicht zu empfehlen, da
normalerweise der Newsserver eine Fehlermeldung liefert, wenn
die Adresse syntaktisch Falsch ist.
- 1: Ü:berprüft die Adresse auf syntaktische Richtigkeit.
- 2: hier wird zusätzlich überprüft, ob zu der angegebenen
Domain ein MX oder A Record existiert.
Allgemeines
- $title: Name des Systems, wird als Überschrift verwendet
- $organization: Die Organisation für den NNTP-Header beim
Schreiben von Nachrichten
- $setcookies: Erlaubt dem Benutzer, seinen Namen und seine eMail-Adresse
beim schreiben eines Artikels als Cookie abzuspeichern, so daß die Daten
beim erneuten Schreiben eines Artikels automatisch eingesetzt werden.
- $compress_spoolfiles: Hier kann eingestellt werden, ob die
Spooldateien komprimiert werden sollen. Dies ist im Normalfall empfohlen,
da auf etwa 10 bis 15% der Originalgröße komprimiert wird.
Bei aelteren PHP-Versionen muß man diese Variable jedoch auf
false
setzen, falls diese Kompression noch nicht
unterstützen.
Sicherheitshinweise
Ein paar Kleinigkeiten müßen beachtet werden, damit NewsPortal
nicht zu einem Sicherheitsloch werden soll:
- Zu Debugzwecken wird immer der User-Agent in der Artikelansicht
mitübermittelt, wenn die Anzeige ($article_show["User-Agent"])
abgeschaltet ist, ist der Eintrag lediglich unsichtbar.
- Die config.inc kann solange von jedem Websurfer (der den Dateinamen
kennt) abgerufen werden, wie die Datei nicht in einen geschützten Bereich
des Webservers verschoben worden ist.
Dieses Skript war ursprünglich (und eigentlich immer noch) nur für
den Zugriff auf lokale Newsgruppen
gedacht. Wenn Gruppen des UseNet im Web verfügbar sind, ergeben sich
folgende Probleme:
- Spammer können anonym ($send_poster_host beachten!) Artikel abschicken
- Newsportal erzeugt 8bit-Headerzeilen (z.B. das Subject), was eigentlich
nicht erlaubt ist. Es scheint aber keine ernsthaften Probleme zu geben.
- Es gibt im Internet Listen mit sogenannten "offenen" Newsservern. Offen
heißt hier meist nicht, daß die jeder benutzen darf, sondern
daß diese einfach nur nicht ordentlich gesichert worden sind. Bevor Du
also einen solchen Newsserver benutzt, solltest Du Dich vergewissern,
daß der Betreiber nichts gegen Dein Vorhaben einzuwenden hat.
- Es wird im UseNet oft nicht gerne gesehen, wenn Personen anonym in
Newsgruppen schreiben können. Bevor Du also schreibenden Zugriff auf
eine Newsgruppe erlaubst, solltest Du in der betreffenden Gruppe nachfragen,
ob es dort keine Einwände gibt. Etwas anderes ist es natürlich,
wenn Du NewsPortal in einem geschützten Bereich Deines Webservers
betreibst, auf den nur eine Dir bekannte Benutzergruppe zugreifen kann.
Gib keinen öffentlichen Schreibzugriff auf UseNet Newsgruppen, wenn
Du nicht ganz genau weißt, was Du tust!
Die Benutzung des Skripts erfolgt auf eigene Gefahr!
Kompatiblität
Sollte auf jedem PHP3-Fähigen Webserver zusammen mit jedem NNRP-fähigen
Newsserver laufen. Webserver und Newsserver müßen nicht auf der selben
Maschine laufen.
Kontakt:
Florian Amrhein
eMail: florian.amrhein@gmx.de
WWW: http://floh.gartenhaus.net