Windows command line Fenster mit einer Fehlermeldung beim Start von PHP 8.2 mit einer veralteten Version der APCu Extension

APCu 5.1.22 für PHP 8.2 unter Windows

Download der php_apcu.dll Binaries

Um eine möglichst hohe Kompatibilität zu gewährleisten, testen wir die von uns entwickelten WordPress-Plugins auch mit älteren WordPress-Versionen, sowie auf unterschiedlichen PHP-Versionen. Dabei kommt auch ein Entwicklungsserver mit Apache unter Windows zum Einsatz. Als wir kürzlich die aktuellste PHP-Version 8.2.x mit ins Repartoire aufnehmen wollten, stießen wir auf ein Problem mit der beliebten Caching-Erweiterung APCu.

Was ist APCu?

APCu, kurz für APC User Cache, ist eine freie PHP-Erweiterung, die einen Zwischenspeicher für Daten bietet, um die Performance von PHP-Anwendungen zu verbessern. Sie speichert Datenfragmente im Arbeitsspeicher, sodass sie bei wiederholten Anfragen schneller abgerufen werden können. Das reduziert die Notwendigkeit, Datenbanken oder externe Datenquellen erneut abzufragen und beschleunigt so die Ladezeiten von Webseiten erheblich. Die Daten sind dabei nur so lange Persistent, wie der Prozess läuft. Es eignet sich also nicht unbedingt für Nutzerdaten, sondern eben explizit für Caching, bei dem es nicht all zu schlimm ist, wenn dieser Cache von Zeit zu Zeit (zum Beispiel nach einem Server-Neustart) erneut aufgebaut werden muss.

Das Problem

Nach dem Update erhielten wir folgende Fehlermeldung beim Starten von PHP:

Teilen

Warning: PHP Startup: apcu: Unable to initialize module
Module compiled with module API=20210902
PHP    compiled with module API=20220829
These options need to match

Ein Blick auf die offizielle PECL Download-Seite von APCu 5.1.22, ab der die Kompatibilität zu PHP 8.2 gegeben ist, war ernüchternd: Im gegensatz zur Vorgängerversion 5.1.21 waren keine Downloads der benötigten DLL-Datei verfügbar. Unsere Recherche führte uns zu zahlreichen Forenbeiträgen und GitHub-Issues, darunter dieser Issue im offiziellen Repository und dieser StackOverflow-Beitrag mit dem Titel Missing php_apcu.dll for PHP 8.2 / APCu 5.1.22. Leider waren die dort enthaltenen Links zu aktuelleren Dev-Versionen der php_apcu.dll mittlerweile nicht mehr gültig.

Der Release 5.1.22 bietet darüber hinaus noch weitere Neuerungen, die auch für Systeme mit PHP-Versionen vor 8.2 interessant sein könnten. Hier eine Übersetzung des Changelogs:

  • PHP 8.2-Kompatibilität
  • PHP 8.1-Kompatibilität in apc.php
  • Fix für die Option --enable-apcu-rwlocks
  • Transparent Huge Pages (THP) für mmap-Speicher aktivieren
  • Logische Uhr für Gültigkeitsdauern (Time to live) verwenden

Unsere Lösung

Da wir keine andere Lösung finden konnten, haben wir kurzerhand die DLLs für APCu 5.1.22 Stable unter Windows selbst compilieren lassen und möchten diese mit der Community teilen. Für alle, die vor dem gleichen Problem stehen, bieten wir die DLLs hier zum Download an. Es handelt sich nicht um einen unfertigen Entwicklungsstand der Version 5.1.23, sondern um den Stand des Repositories der 5.1.22 Stable.

Sie möchten sich bei uns bedanken? Spendieren Sie uns einen Kaffee (oder zwei)!

Wichtiger Hinweis: Obwohl wir die DLLs auf Basis des offiziellen Repositories compiliert haben, möchten wir darauf hinweisen, dass wir für die Funktionalität und Sicherheit der Dateien nicht haften können. Wir nutzen sie selbst in unserem Entwicklungssystem, aber wie bei jeder Software sollten sie in einer sicheren Umgebung getestet werden, bevor sie in einer Produktionsumgebung eingesetzt werden.

PHP 8.2

PHP 8.1

PHP 8.0

PHP 7.4

PHP 7.3

Archiv