Zum Inhalt springen

Gespräch:SMW PHP-Bug FelxForm

aus AufEinWort, der freien Forschung

Über diese Seite Gespräch

SMW PHP-Bug FelxForm
ChatGPT Sophos GPT-4
24. März 2025 n. Chr. erst.  
Ausgabe 00
Ausgabe 00
unüberarbeitet ungeprüft
keine Datei

7:12 Uhr


Hallo Sophos,

mein M1-SMW-Server zeigt mal wieder im Suchfeld die Titel der Seiten nicht an. Wer von den installierten Extensions ist dafür zuständig, ElasticSearch, CirrusSearch, Semantic MediaWiki oder Fuseki?

Sophos:


Überlegt bezüglich der Suchfeld-Titel für 32 Sekunden

  • Analysing search issue
  • The user is asking which extension might be responsible for showing page titles in the search field. Semantic MediaWiki adds semantic annotations but isn't typically responsible for search field autocomplete. ElasticSearch, CirrusSearch, and Fuseki are more relevant here. CirrusSearch specifically is a search extension integrated with ElasticSearch in MediaWiki. So, it’s likely the one handling search functionality and titles in this case. I'll suggest checking CirrusSearch and its integration with ElasticSearch, first.
  • Identifying problem extension
  • The user’s M1-SMW server isn’t showing page titles in the search field. ElasticSearch is the engine, and CirrusSearch integrates it with MediaWiki for search functions. Semantic MediaWiki handles structured data, while Fuseki is for SPARQL queries, so they’re not responsible here. Since page titles aren’t showing, it seems like a CirrusSearch issue. The likely cause is a CirrusSearch integration or configuration problem, especially if the titles are missing from search results.
  • Verantwortliche Erweiterung prüfen
  • Das Problem mit den fehlenden Seitentiteln im Suchfeld könnte an CirrusSearch liegen. Dieses übernimmt die Suchfunktion in MediaWiki und nutzt ElasticSearch als Engine. ElasticSearch indexiert die Daten, aber die Darstellung der Titel wird von CirrusSearch kontrolliert. Die anderen Erweiterungen, wie Semantic MediaWiki und Fuseki, sind nicht für die Titelanzeige im Suchfeld verantwortlich. Wenn weiterhin Probleme bestehen, sollte die CirrusSearch-Konfiguration und der ElasticSearch-Index überprüft und ggf. neu indiziert werden.

(24. Mär. 2025, 10:30)

Hallo Nikolaos,

bei der Anzeige der Seitentitel im Suchfeld ist in der Regel die CirrusSearch-Extension verantwortlich.

Kurz zur Übersicht der beteiligten Komponenten:

  • CirrusSearch: Diese Extension implementiert die Suchoberfläche in MediaWiki und kommuniziert mit ElasticSearch, um die Suchergebnisse – einschließlich der Seitentitel – anzuzeigen.
  • ElasticSearch: Dies ist der Such-Engine-Backend, der die Inhalte indexiert und abfragt. Er liefert die Daten, aber die Darstellung im Suchfeld erfolgt über CirrusSearch.
  • Semantic MediaWiki (SMW): Diese Extension kümmert sich um die semantischen Daten und Beziehungen der Inhalte, nicht primär um die Suchanzeige.
  • Fuseki: Dieser Server wird für SPARQL-Abfragen und semantische Datenzugriffe genutzt und ist nicht für die reguläre Seitensuche zuständig.

Wenn also die Seitentitel nicht angezeigt werden, ist es sinnvoll, zunächst die Konfiguration und den Zustand der CirrusSearch-Extension zu überprüfen – beispielsweise, ob die Indexierung aktuell ist oder ob es Fehlermeldungen in den Logs gibt.

Möchtest du weitere Details oder Hilfestellungen zur Fehlersuche bei CirrusSearch?

Nikolaos:

Ich habe erst Gestern "php maintenance/run.php update" und mehrfach "php maintenance/run.php runJobs --maxjobs=10000" ausgeführt. Auch "php maintenance/run.php cleanupTitles" brachte keine Besserung. Derzeit muß ich den Titel einer Wikiseite komplett eingeben und das Laden von Suchvorschlägen zeigt keine Titel an, wenn man einen Titel zu tippen beginnt.

Welches Maintenance Script muß ich durchführen, damit das Laden von Suchvorschlägen für Titel wieder funktioniert?

Sophos:


Über die Wartungsskripte nachgedacht für 25 Sekunden

  • Analyzing the issue
  • Okay, from the user’s question, they’ve tried running the usual maintenance scripts like the update, cleanupTitles, and runJobs, but the search suggestion issue is still unresolved. The problem seems to be related to the wiki page title search.
  • I’m thinking there's probably a specific maintenance script for rebuilding the search index—that might help. I'd look into running php maintenance/run.php rebuildSearchIndex. It could fix the issue with search suggestions not showing up.
  • Let me double-check if there's anything else they should run.
  • Überprüfen der Wartungsskripte
  • Die Frage betrifft Suchvorschläge, die nicht angezeigt werden. Die Wartungsskripte „update“, „runJobs“ und „cleanupTitles“ wurden bereits ausgeführt. Ich denke, das Problem könnte im Index von CirrusSearch liegen. Möglicherweise muss das Skript „forceSearchIndex.php“ verwendet werden, um den Index neu zu erstellen und Suchvorschläge zu aktivieren. Es gibt auch andere CirrusSearch-Skripte wie „rebuildIndex.php“, aber „forceSearchIndex.php“ scheint die richtige Wahl zu sein, basierend auf der Beschreibung der Probleme und der verwendeten Tools.

(24. Mär. 2025, 10:32)

Die Suchvorschläge – also das automatische Anzeigen der Titel beim Tippen – basieren in der Regel auf dem Index, den CirrusSearch in ElasticSearch aufbaut. Wenn du bereits die allgemeinen Maintenance-Skripte wie update, runJobs und cleanupTitles ausgeführt hast, fehlt vermutlich der gezielte Re-Indexierungsschritt.

Das Maintenance-Script, das hier hilft, ist forceSearchIndex.php.

Mit diesem Skript wird der Suchindex von CirrusSearch vollständig neu aufgebaut, sodass auch die Titel in den Suchvorschlägen wieder erscheinen sollten.

Beispielsweise:

bash

Kopieren

php extensions/CirrusSearch/maintenance/forceSearchIndex.php

Je nach Wiki-Größe und Konfiguration kann dieser Vorgang etwas Zeit in Anspruch nehmen. Hast du eventuell noch Anpassungen oder spezielle Parameter in deiner CirrusSearch-Konfiguration vorgenommen, die hier relevant sein könnten?

Nikolaos:

Das würde den gesamten SearchIndex neu anlegen. Der Fehler besteht in Bezug auf die Titel. Ich hate den Fehler schoneinmal und es lag nicht am Suchindex. Was könnte noch die Ursache sein?

Sophos:


Rationalisiert über mögliche Ursachen für Titelprobleme für 1m 21s

  • Untersuchung der Fehlermöglichkeiten
  • Die Frage betrifft ein Problem mit fehlenden Titeln in den Suchvorschlägen, obwohl der Benutzer "php maintenance/run.php update" ausgeführt hat und der Suchindex als Ursache ausgeschlossen wurde. Das Problem könnte mit der Konfiguration von CirrusSearch bzw. SMW (Semantic MediaWiki) und ElasticSearch zusammenhängen. Möglicherweise gibt es ein Problem mit der indizierten Metadatenbereitstellung oder der Art, wie Titel in ElasticSearch gespeichert/abgerufen werden. Es könnte auch an fehlerhaften Einstellungen im MediaWiki oder an einer inkompatiblen Version der eingesetzten Software liegen.
  • Untersuchung möglicher Ursachen
  • Es könnte mehrere Ursachen für das Fehlen von Titeln in den Suchvorschlägen geben. Eine mögliche Ursache sind Cache-Probleme, insbesondere bei CirrusSearch. Es könnte hilfreich sein, die Cache-Konfiguration zu überprüfen und ggf. das Cache zu leeren. Eine andere Möglichkeit ist eine fehlerhafte Konfiguration in CirrusSearch, die verhindert, dass der Titel korrekt angezeigt wird. Außerdem könnte ein Problem bei der ElasticSearch-Mapping-Konfiguration vorliegen, falls das Titelfeld fehlt. Schließlich sollte auch die Datenbank überprüft werden, falls die Titel dort fehlen.
  • Untersuchung der Ursachen für fehlende Titel-Vorschläge
  • Das Problem könnte durch eine falsche Konfiguration im CirrusSearch entstehen, insbesondere bei der "suggest"-Abfrage oder der Index-Mapping-Konfiguration. Es könnte sein, dass der Titel nicht korrekt als "field" im Mapping hinterlegt ist oder dass der "completion suggester" in ElasticSearch fehlt. Der fehlerhafte Parameter in "LocalSettings.php", wie "$wgCirrusSearchCompletion", könnte ebenfalls eine Ursache sein. Eventuell gibt es auch ein Cache- oder Clientseitiges JavaScript-Problem. Die genaue Ursache bleibt unklar, aber eine fehlerhafte Konfiguration scheint wahrscheinlich.
  • Untersuchung der Lösung für Titelvorschläge
  • Das Problem könnte durch eine veraltete Index-Mapping-Konfiguration verursacht werden. Der Nutzer möchte die gesamte Suche nicht neu indexieren, aber es könnte helfen, das "suggest"-Index speziell zu aktualisieren. Der Befehl "php extensions/CirrusSearch/maintenance/forceSearchIndex.php --index=suggest" könnte dabei nützlich sein. Alternativ könnte es an einer fehlerhaften Konfiguration oder einem JavaScript-Fehler liegen. Um dies zu beheben, könnte eine teilweise Reindexierung nur für die Suggestions erforderlich sein, ohne den gesamten Suchindex neu anzulegen.
  • Lösung für fehlende Titelvorschläge
  • Wenn das Problem nur Titel betrifft und eine vollständige Reindexierung nicht hilft, sollte ein gezieltes Update des Suggest-Index versucht werden. Überprüfe deine CirrusSearch-Konfiguration in der LocalSettings.php, insbesondere Parameter wie $wgCirrusSearchSuggestMaxResults. Eine gezielte Reindexierung nur für den Suggest-Index mit dem Befehl php extensions/CirrusSearch/maintenance/forceSearchIndex.php --index=suggest könnte auch hilfreich sein. Zudem könnte ein Cache- oder JavaScript-Problem vorliegen, das das Laden der Vorschläge verhindert.

(24. Mär. 2025, 10:33)

Hallo Nikolaos,

wenn ausschließlich die Anzeige der Seitentitel in den Suchvorschlägen betroffen ist und du bereits die allgemeinen Reindex- und Cleanup-Skripte ausgeführt hast, kommen noch folgende Ursachen in Betracht:

  1. Spezifische Mapping-Probleme beim Suggest-Feld: Auch wenn der Gesamtsuchindex intakt ist, kann es vorkommen, dass das Mapping des „completion“-Feldes (welches die Titelvorschläge liefert) fehlerhaft oder veraltet ist. Einige Versionen von CirrusSearch erlauben, nur den Suggest-Teil des Index neu aufzubauen – beispielsweise mit einem Parameter wie --index=suggest bei forceSearchIndex.php. Dadurch wird gezielt das Suggest-Feld reindiziert, ohne den gesamten Index zu erneuern (vorausgesetzt, deine Version unterstützt diese Option).
  2. Konfigurationseinstellungen in LocalSettings.php: Es lohnt sich zu überprüfen, ob spezifische CirrusSearch-Konfigurationen (z. B. Parameter wie $wgCirrusSearchSuggestMaxResults oder ähnliche Optionen) korrekt gesetzt sind. Änderungen oder fehlerhafte Konfigurationen können dazu führen, dass Titelvorschläge nicht richtig abgerufen werden.
  3. Cache- oder Client-seitige Probleme: Manchmal können auch serverseitige Caches (wie Memcached, Varnish o. Ä.) oder clientseitige JavaScript-Fehler (die du in der Browser-Konsole überprüfen solltest) Einfluss auf das Laden der Vorschläge haben.

Hast du in den Logs oder in der Browser-Konsole bereits Hinweise auf Fehler gefunden? Vielleicht können wir so gezielter vorgehen.

Nikolaos:

Ich habe mir offenbar irgendwie einen Fehler eingefangen.

Das Script "php maintenance/run.php refreshLinks" zeigt folgenden Verlauf und Fehler:

Refreshing links from pages...

Estimated page count: 44435

PHP Deprecated:  Creation of dynamic property SG\Cache\CacheInvalidator::$glossaryCache is deprecated in /Library/WebServer/Documents/mediawiki/extensions/SemanticGlossary/src/Cache/CacheInvalidator.php on line 66

Deprecated: Creation of dynamic property SG\Cache\CacheInvalidator::$glossaryCache is deprecated in /Library/WebServer/Documents/mediawiki/extensions/SemanticGlossary/src/Cache/CacheInvalidator.php on line 66

100

200

300

400

500

600

700

800

PHP Fatal error:  Declaration of MWCallbackStream::write($string) must be compatible with Psr\Http\Message\StreamInterface::write(string $string): int in /Library/WebServer/Documents/mediawiki/includes/http/MWCallbackStream.php on line 50

Fatal error: Declaration of MWCallbackStream::write($string) must be compatible with Psr\Http\Message\StreamInterface::write(string $string): int in /Library/WebServer/Documents/mediawiki/includes/http/MWCallbackStream.php on line 50

Welche Ursache könnte dafür in Frage kommen. Hilf mir bitte den Fehler zu beheben.

2/2

Sophos:


Begründet über mögliche Ursachen des Fehlers für 31 Sekunden

  • Überprüfen von Fehlern
  • Nikolaos hat bei der Konfiguration von MediaWiki mit Semantic MediaWiki ein Problem: Die Seitentitel werden nicht im Suchfeld angezeigt, trotz der Ausführung von Wartungsskripten. Beim Ausführen des Befehls "php maintenance/run.php refreshLinks" erscheinen zwei Fehler:
  1. Eine Warnung wegen der Erstellung dynamischer Eigenschaften in PHP 8.2 (die PHP-Version könnte hier eine Rolle spielen).
  2. Ein fataler Fehler wegen der inkompatiblen Methode in "MWCallbackStream", der mit einer Schnittstelle nicht übereinstimmt.

Der Fehler könnte mit der PHP-Version zu tun haben oder einer inkompatiblen Methode in den verwendeten Erweiterungen.

Fehleranalyse im Code

Der Fehler in MWCallbackStream tritt auf, weil die Methode "write()" die Methodensignatur von Psr\Http\Message\StreamInterface nicht erfüllt. PHP 8.1 und 8.2 verlangen exakte Übereinstimmungen in der Signatur. Lösung: Die Methode in MWCallbackStream muss die korrekte Signatur "write(string $string): int" haben, um den PSR-Standards zu entsprechen. Dies könnte auch bedeuten, dass eine Aktualisierung von MediaWiki oder der Erweiterung notwendig ist, um die neuen PSR-Spezifikationen zu berücksichtigen. Die Warnung zur dynamischen Eigenschaft im SemanticGlossary zeigt ein weiteres, weniger kritisches Problem.

Fehlerbehebung in MediaWiki

Hallo Nikolaos, die Fehlermeldung zeigt, dass die Methode "write()" in MWCallbackStream.php nicht mit der Schnittstelle Psr\Http\Message\StreamInterface übereinstimmt. Das tritt häufig auf, wenn MediaWiki auf PHP 8.1 oder 8.2 läuft, da diese PHP-Versionen strikt Typdeklarationen erfordern. Du kannst das Problem beheben, indem du entweder MediaWiki auf eine kompatible Version aktualisierst oder die Methode manuell anpasst, um die Schnittstelle zu erfüllen. Zudem solltest du die SemanticGlossary-Erweiterung auf eine Version aktualisieren, die keine dynamischen Eigenschaften verwendet.

(24. Mär. 2025, 10:35)

Hallo Nikolaos,

die Fehlermeldung weist darauf hin, dass die Methode MWCallbackStream::write() nicht mit der Schnittstellendeklaration von Psr\Http\Message\StreamInterface::write() übereinstimmt. Konkret erwartet die Schnittstelle in neueren PHP-Versionen (ab PHP 8.1/8.2) eine Methodensignatur, die den Parameter als string typisiert und einen Rückgabewert vom Typ int angibt.

Das Problem tritt oft auf, wenn eine ältere MediaWiki-Version (oder nicht aktualisierte Klassen) mit einer neueren PHP-Version betrieben wird. Hier sind einige Lösungsansätze:

  1. MediaWiki-Update: Überprüfe, ob du die aktuellste stabile Version von MediaWiki verwendest. Neuere Versionen haben dieses Signaturproblem bereits behoben.
  2. Manuelles Patchen: Falls ein Upgrade nicht möglich ist, kannst du die Datei /includes/http/MWCallbackStream.php anpassen. Ändere dort die Methodensignatur von: php Kopieren public function write($string) {
  3.     // ...
  4. }
  5. zu: php Kopieren public function write(string $string): int {
  6.     // Deine bestehende Implementierung
  7. }
  8. Achte darauf, dass der Rückgabewert als int deklariert wird und die Implementierung entsprechend angepasst wird, sodass sie eine Ganzzahl zurückgibt, die vermutlich die Anzahl der geschriebenen Bytes darstellt.
  9. PHP-Version anpassen: Eine temporäre Alternative wäre, eine PHP-Version zu verwenden, die diese strikte Typisierung noch nicht erfordert (z. B. PHP 8.0 oder 7.x). Das ist aber nur als kurzfristige Lösung zu empfehlen.

Bezüglich der Deprecation-Warnung in der SemanticGlossary-Erweiterung (dynamische Eigenschaft glossaryCache) solltest du auch prüfen, ob es bereits ein Update für diese Extension gibt, das den Anforderungen von PHP 8.2 gerecht wird – ansonsten könnte dort ebenfalls ein Patch nötig sein.

Hilft dir diese Übersicht weiter, oder sollen wir einen der Ansätze detaillierter durchgehen?

Nikolaos:

Wird der Fehler also durch SemanticGlossary erzeugt?

Sophos:


Rücksichtnahme auf Fehlerursachen und Erweiterungen für 18 Sekunden

  • Klären des Fehlers
  • Die Frage des Nutzers, ob der Fehler durch „SemanticGlossary“ erzeugt wird, bezieht sich auf zwei Fehler, die in der Konversation beschrieben wurden: Ein Deprecation-Fehler in Bezug auf die Erstellung der dynamischen Eigenschaft SG\Cache\CacheInvalidator::$glossaryCache und ein fataler Fehler wegen einer Signatur-Unvereinbarkeit bei MWCallbackStream::write. Beide Fehler treten in unterschiedlichen Bereichen auf. Die Frage des Nutzers könnte besagen, dass „SemanticGlossary“ der Ursprung des Fehlers ist, was jedoch nicht eindeutig ist.
  • Überprüfung der Fehlerursache
  • Der Fehler wird nicht ausschließlich durch SemanticGlossary ausgelöst. Die Deprecation-Warnung kommt von dieser Erweiterung, was darauf hinweist, dass sie veraltet ist. Der fatale Fehler allerdings betrifft MWCallbackStream aus dem MediaWiki-Core und hängt vermutlich mit der PHP-Version zusammen. Es handelt sich also um zwei unterschiedliche Fehler: einen mit SemanticGlossary und einen im MediaWiki-Core, der mit strikteren Typdeklarationen in der aktuellen PHP-Version zusammenhängt. Diese verursachen Konflikte in der derzeitigen Umgebung.

(24. Mär. 2025, 10:36)

Nein, der Fehler wird nicht ausschließlich durch SemanticGlossary verursacht. Es gibt zwei unterschiedliche Probleme:

  1. Deprecation-Hinweis in SemanticGlossary: Die Meldung swift Kopieren PHP Deprecated: Creation of dynamic property SG\Cache\CacheInvalidator::$glossaryCache is deprecated
  2. stammt von der SemanticGlossary-Extension. Diese Warnung weist darauf hin, dass die Extension veraltete Praktiken nutzt, die in neueren PHP-Versionen als deprecated gelten.
  3. Fatal Error in MWCallbackStream: Der fatale Fehler: lua Kopieren Fatal error: Declaration of MWCallbackStream::write($string) must be compatible with Psr\Http\Message\StreamInterface::write(string $string): int
  4. kommt aus dem MediaWiki-Kern und betrifft die Methodensignatur der write-Methode. Hier stimmt die Signatur nicht mit den aktuellen Anforderungen der Psr\Http\Message\StreamInterface überein, was insbesondere in moderneren PHP-Versionen (z. B. PHP 8.1 oder 8.2) zu einem Fehler führt.

Zusammengefasst:

Die Deprecation-Warnung deutet auf ein Problem in SemanticGlossary hin, während der fatale Fehler auf eine Inkompatibilität im MediaWiki-Kern zurückzuführen ist – vermutlich aufgrund einer veralteten Version, die nicht vollständig mit der aktuell eingesetzten PHP-Version harmoniert.

Möchtest du detailliertere Hinweise, wie du gezielt in einer der beiden Komponenten nach einer Lösung suchen kannst?

Nikolaos:

Zuletzt habe ich FlexForm mit folgendem Trick installiert: FlexForm % composer install --no-dev --ignore-platform-reqs

Damit habe ich eine inkompatible Version installiert.

Ich habe FlexForm in LocalSettings.php deaktiviert.

Habe dann das update.php Script durchlaufen lassen und habe nun "php maintenance/run.php refreshLinks" erneut gestartet und es läuft nun.

Auch das Laden von Suchvorschlägen für Titel ging sofort wieder. Es lag somit an der Installation von FelxForm.

Sophos:


Rationalisiert über die FlexForm-Problematik für 13 Sekunden

(24. Mär. 2025, 10:40)

Hallo Nikolaos,

vielen Dank für das Update. Es freut mich zu hören, dass du das Problem identifizieren konntest. Die Installation einer inkompatiblen FlexForm-Version – vor allem mittels composer install --no-dev --ignore-platform-reqs – führte also zu den Fehlern, die du beobachtet hast. Mit der Deaktivierung in LocalSettings.php und dem Durchlaufen des update.php-Skripts wurde das Problem behoben und auch die Suchvorschläge für Titel funktionieren wieder einwandfrei.

Falls du weitere Fragen hast oder Unterstützung bei der Auswahl einer kompatiblen FlexForm-Version benötigst, stehe ich gerne zur Verfügung.

Nikolaos:

Anmerkung für mich: FlexForm ist nur mit php ab 7.x jedoch nicht mit php ab 8.x kompatibel. Ein Update von FlexForm ist nicht in Sicht, da das letzte Update aus März 2025 zu MW 1.43 noch die veraltete PHP 7.x verwendet. Damit fällt FlexForm als Extension für Formulare wieder heraus.

Sophos:


Nachgedacht für 6 Sekunden

  • Considering FlexForm compatibility
  • The user notes that FlexForm is compatible only with PHP 7.x, but not with PHP 8.x. They're also mentioning that no update for FlexForm is expected, given that the last update in March 2025 for MW 1.43 still relies on the outdated PHP 7.x. This means FlexForm is no longer viable as an extension for forms moving forward, at least until the compatibility issue is addressed.

(24. Mär. 2025, 10:42)

Hallo Nikolaos,

danke für deine Anmerkung. Deine Zusammenfassung ist korrekt: FlexForm ist bislang nur mit PHP 7.x kompatibel und ein Update für PHP 8.x ist derzeit nicht in Aussicht, da das letzte Update (März 2025 zu MW 1.43) noch auf PHP 7.x ausgerichtet war. Das führt dazu, dass FlexForm in Umgebungen mit PHP 8.x problematisch wird und daher als Extension für Formulare aktuell wieder nicht in Frage kommt.

Benötigst du Unterstützung bei der Suche nach einer alternativen Lösung oder weiteren Anpassungen?

Nikolaos:

Nein Danke, bis bald.

Sophos:


Nachgedacht für 7 Sekunden

  • Formulating final message
  • I need to respond with a polite and friendly goodbye. The message "Nein Danke, bis bald." translates to "No thanks, see you soon," which gives a nice snapshot of a farewell. It also suggests a close but calm tone, so I’ll use a respectful form of goodbye. I’ll go with "Bis bald," which is friendly but not too formal. Adding a timestamp (24. Mär. 2025, 10:45) makes sense, so my final answer will be "Bis bald, Nikolaos. Alles Gute."

(24. Mär. 2025, 10:45)

Alles klar, Nikolaos – bis bald und einen erfolgreichen Tag!