PHP 5.3 und bbPress: Fehlermeldungen

In der Kombination von PHP 5.3 und bbPress in der aktuellen Version 1.0.2 kommt es immer wieder zu hässlichen Fehlermeldungen, insbesondere, wenn man eine lokale Installation unter XAMPP ausprobiert (im Zitat sind die Fehlermeldungen ein wenig gekürzt):

Deprecated: Assigning the return value of new by reference is deprecated in […] bb-settings.php on line 186

Deprecated: Assigning the return value of new by reference is deprecated in […] /bb-includes/backpress/functions.wp-object-cache.php on line 108

Deprecated: Assigning the return value of new by reference is deprecated in […] /bb-includes/backpress/pomo/mo.php on line 171

Deprecated: Assigning the return value of new by reference is deprecated in […] /bb-includes&/functions.bb-l10n.php on line 484

Deprecated: Assigning the return value of new by reference is deprecated in […] /bb-includes/backpress/class.wp-taxonomy.php on line 581

Deprecated: Assigning the return value of new by reference is deprecated in […] /bb-admin/includes/class.bb-install.php on line 1280

Warning: Cannot modify header information – headers already sent by (output started at […] /bb-settings.php:186) in […] /bb-admin/includes/class.bb-install.php on line 390

Warning: Cannot modify header information – headers already sent by (output started at […] /bb-settings.php:186) in […] /bb-includes/functions.bb-core.php on line 1101

Da solche Fehler bereits bei der Installation auftreten, ist die Situation für einen Neueinsteiger sehr entmutigend und bbPress erweckt nicht gerade den Eindruck, eine im täglichen Betrieb problemlos laufende Software zu sein. Der Fehler ist unter den Entwicklern schon lange bekannt und auch schon seit acht Monaten behoben, aber leider wird die Bugfix-Version schon seit einiger Zeit nicht veröffentlicht. Deshalb hier eine ganz schnelle und einfache Abhilfe, mit der sich bbPress installieren und betreiben lässt:

  1. Zusehen, dass man etwas Ruhe hat und sich auf die folgenden Schritte konzentrieren kann. Dies gilt vor allem für Menschen, denen PHP-Quelltexte wie „böhmische Dörfer“ vorkommen. Nicht von den unverständlichen Quelltexten einschüchtern lassen, es ist alles halb so wild!
  2. Die Datei bb-admin/includes/class.bb-install.php im Editor öffnen.
  3. Dort die Zeile suchen, die
    $bbdb = new BPDB_Multi
    enthält. Diesen Text in
    $bbdb =& new BPDB_Multi
    ändern, die so geänderte Datei speichern.
  4. Die Datei bb-admin/install.php im Editor öffnen.
  5. Dort die Zeile suchen, die den Text
    error_reporting
    enthält. Sie sollte so aussehen:
    error_reporting (E_ALL ^ E_NOTICE);
    diesen Text in
    error_reporting (E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING);
    ändern, die so geänderte Datei speichern.
  6. Die Datei bb-includes/functions.bb-l10n.php im Editor öffnen
  7. Dort die Zeile suchen, die den Text
    $empty = new Translations
    enthält. Diesen Text in
    $empty =& new Translations
    ändern, die so geänderte Datei speichern.
  8. Die Datei bb-load.php im Editor öffnen.
  9. Dort die Zeile sichen, die den Text
    error_reporting enthält.
    Diese Zeile sollte so aussehen:
    error_reporting (E_ALL ^ E_NOTICE);
    diesen Text in
    error_reporting (E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING);
    ändern, die so geänderte Datei speichern.

Nach dem Hochladen der geänderten Dateien auf dem Webserver oder dem Kopieren der geänderten Dateien in das Verzeichnis mit der bbPress-Installation sollte alles problemlos funktionieren. Eventuelle Fragen, warum sich die Veröffentlichung einer fehlerbereinigten Version seit vielen Monaten verzögert, bitte in höflicher englischer Sprache an die Entwickler oder am besten gleich an Matt Mullenweg senden.

Wer aus dem erwartungsgemäßen Schweigen von dieser Seite den gleichen Schluss zieht wie ich, nämlich, dass das Projekt bbPress in der jetzigen Form für die Macher von WordPress nicht weiter erwünscht ist und deshalb still und heimlich begraben werden soll, während andere Projekte mit großem Eifer und aufdringlichem Tamtam vorangetrieben werden, sollte sich noch einmal überlegen, ob bbPress angesichts einer derart trüben Zukunft wirklich die richtige Wahl ist. Ich hoffe ja, dass ich derartige Warnungen in naher Zukunft relativieren muss, aber ich hoffe das für meinen Geschmack schon viel zu lange.

Die Kosten der Deep Integration

Wer ernsthaft über eine deep integration von WordPress und bbPress nachdenkt, sollte besser noch einmal nachdenken. Sicher, die deep integration kostet kein Geld, aber sie verursacht eine immense Serverlast und wirkt sich nachteilig auf die Performanz einer so realisierten Website aus.

Es ist nicht nur so, dass bei jedem Aufruf der Foren der gesamte „WordPress-Apparat“ mitgeladen wird, es werden dabei auch Datenbankabfragen ausgeführt. Was das in der Praxis bedeutet, kann in einem sehr ausführlichen Beitrag im englischsprachigen bbPress-Forum nachgelesen werden. Hier nur ein ganz kurzer Eindruck:

  • WordPress 3.0 mit etlichen Plugins: 27 Datenbankabfragen für eine Seitendarstellung
  • bbPress 1.0.2 mit etlichen Plugins: 29 Datenbankabfragen für eine Seitendarstellung
  • Die deep integration dieses bbPress 1.0.2 in WordPress 3.0: 56 Datenbankabfragen für eine Seitendarstellung

(Hinter „mit etlichen Plugins“ verbirgt sich, dass es weit über die Standardinstallation hinausgeht.)

Der erhöhte Speicherbedarf für den Webserver ist hierbei noch nicht einmal berücksichtigt, er führt zu einer weiteren Erhöhung der Last.

Eine Website mit wenigen Besuchern wird bei einer deep integration relativ langsam, eine Website mit einer nennenswerten Anzahl Besuchern wird zäh und kann sogar zu sichtbaren Fehlfunktionen neigen, wenn der virtuelle Speicher nicht ausreicht. Dabei ist es nicht möglich, für bbPress-Foren Caching einzusetzen – zum einen, weil es dafür zurzeit noch kein Plugin gibt, zum anderen ist es aber bei den häufig wechselnden Ansichten eines aktiv benutzten Forum auch gar nicht sinnvoll.

Deshalb: Wer über deep integration nachdenkt, sollte noch einmal nachdenken, ob sich die gewünschten Anforderungen in einer weniger belastenden Weise erfüllen lassen oder ob sinnvolle Abstriche daran gemacht werden können. Eine langsame und zu Fehlfunktionen neigende Website ist eines der wirksamsten Mittel, Nutzer und Leser fernzuhalten – und das wird niemals gewünscht sein. In der Regel ist es relativ einfach, das verwendete WordPress-Theme für bbPress „nachzubauen“. Der Lohn für diesen Aufwand liegt in einem schlanken und schnellen Forum, dass auch größeren Lastspitzen gewachsen ist, ohne dabei langsam zu werden.

Wenn diese Vorgehensweise nicht ausreicht, muss an die hinreichende Ausstattung des Serverrechners (mit RAM, Rechenleistung etc.) gedacht werden, auf dem die Website mit einer deep integration laufen soll. Ein normaler virtual server wird hierzu nahezu niemals geeignet sein. An dieser Stelle verursacht die deep integration dann doch monetäre Kosten. Auch sollte der MySQL von jemanden optimiert werden, der sich wirklich damit auskennt – und das Ergebnis dieser Optimierung sollte im Betrieb beobachtet und gegenenfalls nachgebessert werden. Diese Kosten und Mühen kann man sich ersparen, wenn man es schafft, die deep integration zu meiden.

Theme führt zu weißer Seite?

Manchmal kommt es vor, dass man ein Theme für bbPress verwenden will und dabei auf einen seltsamen Fehler stößt, der sich meist folgendermaßen äußert:

  1. Das Theme wurde entpackt und in den Ordner my-templates der bbPress-Installation hochgeladen.
  2. Unter „Verfügbare Themes“ werden diese Themes aufgelistet, aber es steht dort nur ein Name, kein Vorschaubild, keine weitere Beschreibung.
  3. Wenn eines dieser seltsam dargestellten Themes angewählt wird, verwandelt sich das Forum in eine weiße Seite.

Dieses Problem liegt beinahe immer an fehlerhaften Zugriffsrechten des Theme-Verzeichnisses und/oder der Theme-Dateien auf einem Webserver, der unter einem unixoiden Betriebssystem läuft. Das Problem kann leicht behoben werden, indem mit dem FTP-Programm passende Zugriffsrechte vergeben werden:

  • Das Verzeichnis my-templates sollte die Zugriffsrechte 755* haben.
  • Die Unterverzeichnisse mit den Theme-Dateien sollten ebenfalls die Zugriffsrechte 755* haben.
  • Die Theme-Dateien in den Unterverzeichnissen sollten die Zugriffsrechte 644** erhalten.

Das Installationsskript von bbPress 1.0.0 hat zum Beispiel das Verzeichnis my-templates mit den falschen Rechten angelegt.

Wie sich die Zugriffsrechte mit einem FTP-Programm ändern lassen, sollte in der Dokumentation des verwendeten FTP-Programmes erklärt sein – leider kocht hier jedes Programm sein eigenes Süppchen, so dass ich keine allgemeine Anleitung geben kann. Nur so viel kann ich sagen: Es geht immer. Wenn man herausfindet, wie es geht, ist das auch eine gute Gelegenheit, einmal nachzuschauen, ob es möglich ist, für zukünftige Uploads Standardeinstellungen für die Zugriffsrechte festzulegen, damit dieser Fehler nicht noch einmal auftritt. Denn erfahrungsgemäß ist ein vor Monaten gelöstes Problem beim zweiten Auftreten „wie neu“, und man fängt wieder von vorne damit an, die Ursache des Fehlers zu suchen.

* Ein Verzeichnis mit den Rechten 755 bedeutet, dass der Besitzer des Verzeichnisses die Dateien darin auflisten kann, in das Verzeichnis wechseln kann und darin Dateien anlegen und löschen kann. Andere Benutzer auf dem System können nur in das Verzeichnis wechseln und die Dateien auflisten.

** Eine Datei mit den Rechten 644 bedeutet, dass der Besitzer der Datei die Datei schreiben und lesen kann, alle anderen Benutzer auf dem System können diese Datei nur lesen.

bbPress ist kein Plugin

Offenbar führt die Anpreisung von bbPress, dass es mit WordPress „integriert“ werden könne, immer wieder zu Missverständnissen, die dann zu gewissen Fragen im offiziellen bbPress-Forum führen. Deshalb möchte ich es an dieser Stelle einmal ganz deutlich ausdrücken:

bbPress ist kein WordPress-Plugin.

Es handelt sich bei bbPress um eine eigenständige Internet-Anwendung. Mit bbPress kann eine Foren-Site betrieben werden, und zwar zurzeit auch ohne die zusätzliche Installation eines WordPress-Blogs.  Wer eine schlanke, leicht zu durchschauende und einfach zu administrierende Forums-Software sucht, die einen gewissen Minimalismus in ihren Funktionen mit modernen Techniken wie Auszeichnung der Beiträge durch Schlagwörter und RSS-Feeds für jede nur denkbare Ansicht sucht, der wird mit bbPress zurzeit sehr glücklich werden. In vielen Fällen ist dieser Kern genau die gewünschte Funktionalität. Doch dieser Kern lässt sich auch durch Plugins erweitern, wenn auch zurzeit die Plugin-Entwicklung etwas darniederliegt.

Die so genannte „Integration“ bedeutet nicht, dass bbPress als Plugin in WordPress betrieben wird. Es bleibt in jedem Fall eine eigenständige Anwendung. (So wie es aussieht, wird sich das in kommenden Versionen wohl ändern.) Die Integration bedeutet vielmehr, dass bbPress…

  • …seine Benutzerdatenbank mit der Benutzerdatenbank von WordPress teilen kann, so dass viele administrative Aufgaben erleichtert werden.
  • …für eine solche, geteilte Benutzerdatenbank eine Abbildung der WordPress-Rollen auf die Rollen in bbPress ermöglicht, was wiederum eine oft gewünschte Vereinfachung administrativer Tätigkeiten ist, wenn etwa ein Autor im Blog zum Moderator im Forum werden soll.
  • …den Anmeldecookie zusammen mit WordPress verwalten kann, so dass sich ein Benutzer nur an eines der beiden Systeme anmelden muss. Diese Funktion erfordert allerdings ein spezielles Plugin für WordPress, da bbPress noch weitere Informationen in den Cookies benötigt, die WordPress in seinem Kernsystem nicht „kennt“.

Das kann sehr praktisch sein, wenn bbPress zusammen mit WordPress eingesetzt werden soll und solche Features erwünscht sind. Es kann einem viel Kopfzerbrechen bei der nahtlosen Integration des Forums ersparen.

Aber bbPress ist kein WordPress-Plugin.

bbPress muss eigens installiert werden, in ganz ähnlicher Weise wie WordPress. Die Vorgehensweise bei der Integration ist zurzeit nicht trivial und wohl die häufigste Fehlerquelle, die im offiziellen Support-Forum aufscheint. Die manchmal gewünschte, so genannte „deep integration“ ist auch für den geübten Nutzer mit Fachkenntnissen ein bisschen knifflig und sollte unbedingt vermieden werden – tatsächlich war bbPress nie dafür gedacht, innerhalb von WordPress zu laufen, und deshalb ist die „deep integration“ auch mit signifikanten Schwächen in der Ausführungsgeschwindigkeit und in der Sparsamkeit im Umgang mit Ressourcen des Webservers verbunden. Bei der normalen Integration kann nicht das Theme von WordPress verwendet werden, sondern das Design muss gegebenenfalls als bbPress-Theme „nachempfunden“ werden, was aber für einen geübten Theme-Bastler, dem die WordPress-Konzepte schon vertraut sind, kein großes Problem darstellt. Tatsächlich sind sich WordPress und bbPress sehr ähnlich.

Was die WordPress-Integration bedeutet, habe ich schon hier geschrieben, ich will es nicht alles wiederholen.

Doch diese eine Aussage muss noch in aller Deutlichkeit ergänzt werden: bbPress ist kein WordPress-Plugin, sondern eine eigenständige Anwendung. Die Integration in WordPress ist deutlich komplexer als die Installation und Konfiguration eines WordPress-Plugins. Wer keine Erfahrung hat, wird schnell entmutigt sein; und auch mit einer gewissen Erfahrung erfordert der Vorgang, dass man „ein bisschen“ in vorwiegend englischsprachigen Anleitungen* liest. Die Mühe kann sich dennoch lohnen.

Das nur als Warnung an jeden, der nach oberflächlichem Lesen glaubt, dass es sehr einfach ginge. Was einfach geht, ist der Betrieb einer integrierten bbPress-Forensite. Die Einrichtung ist ein Vorgang mit etlichen Fallstricken. Wer ein wenig Englisch kann, bekommt in einem entsprechenden Thread im Support-Forum einen Eindruck von den Schwierigkeiten, die damit verbunden sein können – und derartige Threads gibt es etliche. Zu allem Überfluss bezieht sich das darin gesammelte Erfahrungswissen auf verschiedene Versionen von bbPress und WordPress, und es ist leider nicht immer hinreichend deutlich gesagt, auf welche Versionen es sich bezieht. Nur so viel sei hier zur Ermutigung gesagt: Nahezu alle Probleme lassen sich lösen, so lange es nicht um eine „deep integration“ geht.

*Ich hatte ursprünglich vor, eine Anleitung für die WordPress-Integration in deutscher Sprache zu verfassen, habe aber angesichts der derzeitig laufenden Diskussion um eine andere Herangehensweise im bbPress-Kern – man spricht sogar davon, bbPress in einer späteren Version zum WordPress-Plugin zu machen – davon Abstand genommen. Vielleicht wird es in den kommenden Monaten etwas einfacher, ein integriertes bbPress zu betreiben. In jedem Fall wird sich der gegenwärtige Vorgang ändern, da er zuviel Support-Aufwand verursacht.

Das Theme von WordPress mitverwenden

Es ist eine völlig berechtigte und aus Nutzersicht logische Anforderung, dass es möglich sein sollte, das WordPress-Theme für ein integriertes bbPress mitzuverwenden. Folglich kommt ein solcher Wunsch auch immer wieder auf.

Im Moment ist es leider standardmäßig erforderlich, ein eigenes Design für bbPress zu erstellen. Da bbPress und WordPress viele Gemeinsamkeiten haben, ist das nicht besonders schwierig, aber „es saugt“ dennoch. Bei zukünftigen Design-Anpassungen sind zwei Designs zu bearbeiten, und das verdoppelt den Arbeits- und Testaufwand. Das ist keine erfreuliche Lösung, und von daher sollte ein besserer Weg möglich sein. (Ich selbst werde jedoch bei dieser Vorgehensweise bleiben, weil sie eben recht einfach ist.)

Wer keine Probleme damit, ein Plugin in einem sehr frühen Entwicklungsstadium zu verwenden, wird sich vielleicht über diese Ankündigung des Users ryanheller im offiziellen (englischsprachigen) Support-Forum von bbPress freuen, die ich hier schnell sinngemäß wiedergebe:

Ein Hallo an alle,

Ich habe ein WordPress-Plugin programmiert, das eine einfache Integration ihres WordPress-Themes, ihrer Widgets und vieler Plugins in ihr bbPress-Theme ermöglicht. Es handelt sich um eine Alpha-Veröffentlichung, und deshalb ist es wahrscheinlich noch fehlerhaft. Bitte geben sie ihre Fehlerberichte als Kommentare im folgenden Blogbeitrag:

http://pixopoint.com/theme-integrator-alpha-launch/

Dieses System setzt nicht voraus, dass sie eine „deep integration“ ihres bbPress vornehmen, und es führt daher auch nicht zu den damit verbundenen Nachteilen für die Performance. Es kopiert einfach ihr HTML-Markup, nachdem sie eine Reihe von Dingen in jedem Theme konfiguriert haben. Wenn sie nicht wissen, wie sie eine perfekte Integration ihres Themes in der altmodischen Weise durchführen (indem sie HTML und CSS zwischen den beiden Systemen kopieren), dann wird dieses neue System ihnen nicht helfen können, denn sie müssen es auch in solcher Weise einrichten. Allerdings: Nachdem es einmal aufgesetzt wurde, werden die Änderungen in ihrem WordPress-Theme automagisch in ihre bbPress-Forensite übernommen, zusammen mit Änderungen in den Plugins, Widgets etc.

Ich werde keinen kostenlosen Support dafür betreiben. Diese Form der Integration ist sehr zeitaufwändig und ich kann die Zeit nicht entbehren, um ihnen allen bei der Integration ihrer Themes zu helfen – das tut mir leid. Aber ich werde versuchen, die gemeldeten Fehler so schnell wie möglich zu bearbeiten.

Das System arbeitet mit einer Vielzahl unterschiedlicher Software zusammen, nicht nur mit bbPress. Sie können mein Support-Forum als eine Demonstration anschauen, hierbei verwende ich SMF.
http://pixopoint.com/forum/index.php?topic=1385.0

Sorry für meine schnelle und auch etwas schlampige Übersetzung, aber ich glaube, dass diese Information für viele Anwender interessant ist. Nähere Informationen zu dieser Lösung gibt es auf den verlinkten Seiten – leider zurzeit nur in Englisch.

In den nächsten Tagen werde ich mir das einmal näher anschauen, es kann aber noch ein wenig dauern.

Human Test für bbPress in Deutsch

Download-Link: bbPress-Plugin „Human Test“ in Deutsch

So sieht die geschützte Registrierung ausSpam-Anmeldungen an Foren sind eine Pest!

Zum Glück gehen die meisten Spam-Anmeldungen von automatisierten Skripten aus, die relativ dumm sind. Und zum Glück verfügen die meisten Menschen über eine gewisses Mindestmaß an Intelligenz. (Wer nicht darüber verfügt, wird wohl mit einer Foren-Site auch nicht so viel anfangen können.) Und daran lassen sich die Menschen von Maschinen unterscheiden.

Das bbPress-Plugin „Human Test“ fügt eine einfache Rechenaufgabe in das Registrierungsformular ein. Es handelt sich um eine Addition im kleinen Zahlenbereich, die selbst ein Kind ausführen können sollte. Diese Aufgabe wird jedoch technisch in einer Weise präsentiert, die es dem Skript eines Spammers schwer macht, diese Aufgabe zu bewältigen. Leider benötigt diese Vorgehensweise aktiviertes JavaScript.

Obwohl das Plugin nur bis zur Version 0.9 getestet ist, funktioniert es auch mit der aktuellen Version 1.0.2 von bbPress fehlerfrei, kann also eingesetzt werden.

Ich habe eine deutsche Übersetzung des Plugins angefertigt, indem ich die englischen Texte im Quelltext in die deutsche Sprache übertragen habe. In dieser Form sollte das Plugin auch auf einer deutschsprachigen Foren-Site einsetzbar sein. Diese Übersetzung stelle ich hier zum freien Download zur Verfügung.

Download-Link: bbPress-Plugin „Human Test“ in Deutsch

Installation

Einfach die Datei human-test.php in den Ordner my-plugins der bbPress-Installation kopieren und anschließend im bbPress-Dashboard das Plugin aktivieren.