MediaWiki upgrade, van PHP 7 naar PHP 8

Ingediend door Dirk Hornstra op 12-jan-2026 19:31

Op één van mijn domeinen had ik op een subdomein een WIKI draaien. Handig voor als je even wat informatie wilt "dumpen". Voor mezelf: lees ik iets over een boek, dan gooi ik het in een lijst, zodat ik later bij de bibliotheek kan kijken of dat boek daar ook is. Geldt ook voor mijn moeder, van een schrijfster heeft ze redelijk veel boeken gelezen, dus als ik een boek mee neem, dan moet ze die natuurlijk nog niet gelezen hebben.

Dat draait allemaal op MediaWiki. Alleen... dat was een oude versie. Een hele oude versie. Op het hoofddomein kreeg ik een waarschuwing dat de boel nog steeds op "PHP 7" draaide. Dat kan inderdaad niet meer, dus dat heb ik omgezet naar PHP 8. De site op mijn hoofddomein draaide nog prima. Maar mijn wiki niet meer, styling zag er niet meer uit, het aanpassen van een pagina wilde niet meer. Dus in een andere map de meest recente versie van MediaWiki geplaatst, gekoppeld aan de database en dan bijwerken. Dat ging helaas niet goed, tijdens het update-script wat SQL-foutmeldingen. Zelf zaken herstellen en dan het script opnieuw draaien, maar het lukt niet.

Voordat ik dit had gedaan, had ik natuurlijk eerst een back-up van de database gemaakt. En ook een kopie van de PHP-7 code van MediaWiki gedownload.
Tijd om eerst op mijn computer een Docker-container op te zetten, daar de boel in te laden en daar ook de "shit te fixen".

De info die ik hier plaats is ook handig voor mezelf, mocht ik dit in de toekomst nogmaals doen;

Zo heb ik 2 standaard scripts:



#site.sh
docker network create --subnet 172.28.0.0/16 --ip-range 172.28.5.0/24 developmentnetwork
docker run --detach --name 'NAAM'  --network=developmentnetwork -p 80:80 -v ./wiki/:/opt/website/ mattrayner/lamp:latest-1804-php7

#mariadb.sh

docker run --detach --name NAAM -v ./data-db:/var/lib/mysql:Z --network=developmentnetwork -p 3306:3306 --ip 172.28.5.95 --env MYSQL_ROOT_PASSWORD=WACHTWOORD mariadb:10.11

Met bovenstaande 2 bash-scripts maak ik een Docker Container aan voor MariaDB en een Docker Container voor LAMP, PHP 7.

Je ziet dat ik bepaalde mappen deel met de container. 
Zo kan ik eerst een back-up van de database restoren in MariaDB:
 



create database [databasenaam];
create user '[database-user]' IDENTIFIED BY '[user-password]';
GRANT ALL PRIVILEGES ON *.* TO '[tabelnaam]' WITH GRANT OPTION;
FLUSH PRIVILEGES;

mariadb --user root --password [databasenaam] < /var/lib/mysql/db-restore/bestand.sql
-- je wordt gevraagd om het wachtwoord in te voeren, daarna staat dit in je database
 

Database klaar, nu is het tijd voor de website.

Ik maak in de container in /var/www een map met de naam wiki aan. Hier kopieer ik alle bestanden naartoe: cp -R /opt/website ./

Hierna wijzigig ik in  /etc/apache2/sites-enabled/000-default.conf de waarde van DocumentRoot, die pas ik aan van /var/www/html naar /var/wiki

Na een service apache2 restart krijg ik mijn oude wiki te zien! Oh ja, en niet vergeten om je database-gegevens in LocalSettings.php aan te passen, zoals je bovenin kunt lezen geef ik de container met MariaDB het fixed IP-adres 172.28.5.95

 

Ik had gekeken of ik mijn data uit de database kon kopiëren naar de nieuwe database, maar die poging mislukte. Een aantal pagina's werden goed getoond, maar de rest kon niet getoond worden (pagina bestaat niet), of de koppeling was niet goed gegaan, waardoor ik de tekst van een andere WIKI-pagina op een pagina te zien kreeg. Omdat ik vermoedde dat dit "heel veel tijd ging kosten" heb ik op zaterdagavond maar even "met het handje" op de nieuwe omgeving de pagina's aangemaakt en de inhoud stuk-voor-stuk gekopieerd. Die had ik in een ander browser-venster open, met de data van de versie die in mijn Docker-container draaide.

Misschien anderhalf uur mee bezig geweest, maar daarna wel "klaar". En ook de "overbodige" revisies kwijt, want ik heb nu maar 1x wat aangepast: vullen met het uiteindelijke resultaat.

 

Mocht je ook een MediaWiki site hebben en een update/upgrade gaan doorvoeren (of een nieuwe omgeving gaan opzetten), misschien heb je wat aan mijn tips voor de configuratie;

1. security voor installatie

Na het uploaden van de bestanden en het starten van de installatie komt er een waarschuwing in beeld dat de map /images misbruikt kan worden. Zet iemand er een .php bestand in, dan kan dat uitgevoerd worden en ellende veroorzaken. Bij de waarschuwing staat een link naar een pagina waar je meer informatie kunt vinden. Ik heb in de .htaccess in de map /images het volgende toegevoegd wat het probleem verhelpt:


# Serve HTML as plaintext, don't execute SHTML
AddType text/plain .html .htm .shtml .phtml .php .php3 .php4 .php5 .php7

# Old way of registering php with AddHandler
RemoveHandler .php

# Recent way of registering php with SetHandler
<FilesMatch "\.ph(p[3457]?s?|tml)$">
   SetHandler None
</FilesMatch>

2. read-only instellen

De installatie uitgevoerd, daarna eerst de configuratie "goed ingesteld". Ik gebruik deze WIKI als een vergaarbak van informatie, die alleen ik erop kan zetten. Het is wat dat betreft een "read-only" WIKI. Standaard is een WIKI bedoeld dat iedereen een bijdrage kan toevoegen, dus dat moet je dan eerst uitschakelen. 
Dat doe je door in LocalSettings.php de volgende regel op te nemen:


$wgGroupPermissions['*']['createaccount'] = false; 

3. logo instellen

Ik wil mijn eigen logo plaatsen. Dat doe je door onderaan in je LocalSettings.php de volgende regels op te nemen (de standaard configuratie die bovenin LocalSettings.php uitgevoerd wordt pas ik niet aan):
 


$wgLogos['1x'] = "$wgResourceBasePath/images/hansolo.png";
$wgLogos['icon'] = "$wgResourceBasePath/images/hansolo.png";

4. activeer uploads

Ik had een aantal afbeeldingen geüpload, alleen lukte me dat hier niet. In de oude versie stond het waarschijnlijk al goed ( of was 10 jaar geleden door mij aangepast ;) ), je moet het onderstaande in je LocalSettings.php opnemen om uploads actief te maken:


$wgEnableUploads = true; 

5. fatsoenlijke weergave op mobiel

In het verleden had ik zelf een skin toegevoegd, met de naam "wptouch". Dat was volgens mij een soort mobiele weergave skin voor Wordpress. Want op mobiel krijg je een soort desktop-versie, de letters zijn veel te klein, het ziet er niet uit. Een WpTouch.php bestand waar een paar globale configuratie-zaken ingesteld worden, voor de rest alleen wat CSS en JavaScript. Je werkt nu echter met skin.json, waarin je bepaalde zaken configureert. Ik had niet zoveel zin om daar nu allemaal zaken voor uit te moeten zoeken. Maar op de Wiki-pagina over skin Vector kwam ik 2 configuratie-zaken tegen die zorgen dat ik een prima weergave op mobiel krijg. Als je onderstaande 2 regels in LocalSettings.php toevoegt ben je klaar:


$wgDefaultSkin = 'vector-2022';
$wgVectorResponsive = true;