Dokumentation · Systemanforderungen

PHP- und Datenbank-Anforderungen

Einführung

ADP Car Market Hub ist ein modernes PHP 8-Plugin, das Namespaces, strikte Typisierung an vielen Stellen und die WordPress-Datenbankabstraktionsschicht ($wpdb, dbDelta()) verwendet. Es läuft auf demselben PHP- und Datenbank-Stack wie WordPress selbst, fügt jedoch eigene benutzerdefinierte Tabellen für Fahrzeuge, Analytics-Ereignisse und Suchaufträge sowie dateibasierte Protokolle hinzu.

Dieses Dokument beschreibt die PHP-Sprachversion und -Erweiterungen, die Datenbank-Engine und Speicherüberlegungen sowie die betrieblichen Auswirkungen von Importen, Protokollen, Leads und Analytics.

Wann dieses Dokument zu verwenden ist

Verwenden Sie dieses Dokument, wenn Sie:

  • Die PHP-Laufzeitumgebung für einen neuen WordPress-Host konfigurieren.
  • Eine bestehende PHP-Umgebung im Hinblick auf die Anforderungen des Plugins überprüfen.
  • Den Datenbankspeicher und das Wachstum für die Website einer Garage planen.
  • Performance- oder Speicherprobleme während Importen oder der KI-Generierung untersuchen.
  • Die Datenbankgrösse für die Aufbewahrung von Analytics-Daten und das Lead-Management dimensionieren müssen.

Übersicht

Das Plugin verwendet den Standard-WordPress-Laufzeit-Stack:

  • PHP-Sprache: Erfordert PHP 8.1+ (festgelegt im Plugin-Header, readme.txt und composer.json).
  • PHP-Erweiterungen: Basiert auf openssl, curl, mbstring, json und entweder gd / imagick für die Bildverarbeitung. Der Tab «System & Hilfe» zeigt zudem ZipArchive für Export-Bundles an.
  • Datenbankzugriff: Erfolgt ausschliesslich über $wpdb mit Prepared Statements. Keine direkte Verwendung von PDO oder mysqli.
  • Benutzerdefinierte Tabellen: Werden bei der Aktivierung über dbDelta() erstellt; eine für Fahrzeugdatensätze ({prefix}as24_vehicles), eine für Analytics-Ereignisse, eine für Suchauftrags-Abonnenten.
  • WordPress-Tabellen: Die Standardtabellen posts, postmeta, term_*, options und users werden für den as24ci_car CPT, Fahrzeug-Taxonomien, Plugin-Einstellungen, Leads (ein separater CPT) und Berechtigungen verwendet.
  • Dateibasierte Protokolle: Werden in wp-content/uploads/as24ci-logs/ geschrieben, nicht in die Datenbank. Rotation bei 10 MB mit einer Aufbewahrungsfrist von 7 Tagen.

Anforderungen

PHP-Version

  • Minimum (vom Plugin erzwungen): PHP 8.1.
  • Empfohlen: Ein aktuell unterstützter PHP 8.x-Zweig (8.2 oder 8.3) für die beste langfristige Performance und Sicherheitslage.
  • Nicht unterstützt: PHP 8.0 oder älter. Die Metadaten des Plugins deklarieren 8.1 als Minimum und die Codebasis verwendet die 8.1-Syntax.

Erforderliche PHP-Funktionen

Die Umgebungsprüfung des Plugins erzwingt zur Laufzeit Folgendes und zeigt das Ergebnis im Tab «System & Hilfe» an:

  • openssl-Erweiterung – ausgehende HTTPS-Verbindungen (AutoScout24-API, verwalteter Gemini-Endpunkt).
  • curl-Erweiterung – wird von der WordPress-HTTP-API für ausgehende Anfragen verwendet.
  • mbstring-Erweiterung – Multibyte-String-Verarbeitung (mb_strtolower etc.).
  • json-Erweiterung – Kodierung/Dekodierung von API-Payloads und Option-Blobs.
  • gd oder imagick-Erweiterung – Verarbeitung von Bildanhängen und optionale WebP-Konvertierung.
  • ZipArchive-Klasse – empfohlen (verwendet für Export-/Download-Bundles).
  • Ein beschreibbares wp-content/uploads/-Verzeichnis für Bilder und Protokolle.

Empfohlene PHP-Laufzeiteinstellungen

Diese werden nicht im Code erzwungen, entsprechen jedoch den Schwellenwerten im Tab «System & Hilfe» des Plugins:

EinstellungMinimumEmpfohlenHinweise
memory_limit128 MB256 MB+< 128 MB wird als «zu niedrig» markiert; 256 MB+ ist «gut».
max_execution_time30 s120 s+ (oder 0 = unbegrenzt)< 30 s wird als «zu niedrig» markiert; 30–60 s «akzeptabel».
upload_max_filesize8 MB16 MB+Muss ein Fahrzeugbild problemlos abdecken können.
post_max_size16 MB32 MB+Sollte ≥ upload_max_filesize sein.
max_input_vars10003000+Die Tabs «Mapping» und «Filter» senden viele Felder gleichzeitig.

Für WP-Cron- und CLI-Ausführungen gelten dieselben Limits für den PHP-CLI- / FPM-Pool, der den Cronjob verarbeitet.

OPcache und realpath_cache

OPcache wird in Produktionsumgebungen empfohlen. Das Plugin enthält viele kleine Klassen; OPcache reduziert den Overhead pro Anfrage erheblich. Verwenden Sie die von WordPress empfohlene OPcache-Konfiguration; es sind keine speziellen Einstellungen erforderlich.

Datenbank-Engine

  • Erforderlich: Eine von WordPress unterstützte Datenbank – MySQL 5.7+ oder MariaDB 10.4+ gemäss der WordPress-Empfehlung. Das Plugin erzwingt keine strengere Version, daher ist dies eine Empfehlung und keine harte Anforderung.
  • Empfohlen für die Produktion: MySQL 8.0 oder MariaDB 10.6+ für eine bessere JSON-Verarbeitung, standardmässig vollständiges UTF-8 (utf8mb4) und verbesserte Performance bei grossen Tabellen.
  • Storage-Engine: InnoDB. Die CREATE TABLE-Anweisungen des Plugins basieren auf dbDelta() und erben den Zeichensatz/die Kollation von WordPress (normalerweise utf8mb4).
  • Verbindung: Standard-WordPress-Zugangsdaten in wp-config.php. Das Plugin verwendet keine separate Datenbankverbindung.

Datenbankspeicher

Das Plugin erstellt und verwaltet die folgenden Daten:

  • Custom Post Type as24ci_car – ein WordPress-Beitrag pro Fahrzeug in posts / postmeta, plus Taxonomie-Begriffe in term_*.
  • Custom Post Type für Leads – Kontaktformular-, Probefahrt- und Suchauftrags-Leads, die als Beiträge mit Metadaten gespeichert werden.
  • {prefix}as24_vehicles – schnelle Lookup-Tabelle mit wichtigen Fahrzeugattributen (Preis, Währung, Hashes für die Änderungserkennung usw.).
  • Analytics-Ereignistabelle – Seitenaufrufe, Filter-Interaktionen, Kontakt-Öffnungen und Lead-Ereignisse mit täglicher Aggregation.
  • Suchauftrags-Tabelle – gespeicherte Suchen und Double-Opt-in-Abonnentendatensätze für Smart Stock Alerts.
  • Optionen (wp_options) – Plugin-Einstellungen unter dem Präfix as24ci_*, plus Transients, die für die Importsperre und die Bildwarteschlange verwendet werden.

Praktische Richtlinien zur Dimensionierung:

  • Pro Fahrzeug: Einige KB in posts + postmeta + as24_vehicles, plus Bildanhänge (Beitrag + Anhang-Metadaten). Die binäre Bildspeicherung erfolgt auf der Festplatte, nicht in der Datenbank.
  • Pro Analytics-Tag: Hunderte kleine Zeilen auf einer ruhigen Website, Zehntausende auf einer stark besuchten. Planen Sie eine regelmässige Bereinigung ein, wenn Sie Analytics-Daten nur kurzfristig benötigen.
  • Pro Lead: Eine Handvoll Zeilen (ein CPT-Beitrag + Metadaten).

Importe

  • Importe werden in Batches aufgeteilt. Der Batch-Wizard passt die Batch-Grösse zwischen 1 und 5 Fahrzeugen pro Schritt an; Cron-Ausführungen verwenden eine konfigurierbare maximale Anzahl von Fahrzeugen pro Durchlauf.
  • Bild-Downloads werden in eine Warteschlange eingereiht und asynchron verarbeitet, wenn der «Bild-Warteschlangen-Modus» aktiviert ist, sodass ein einzelner PHP-Request nie Dutzende von Bildern gleichzeitig herunterladen muss.
  • Eine Importsperre (Transient mit einer TTL von 40 Minuten) verhindert, dass sich zwei Cron-Ausführungen überschneiden.
  • Re-Importe verwenden Inhalts- und Bild-Hashes zur Änderungserkennung, sodass unveränderte Fahrzeuge fast keine Schreibvorgänge in der Datenbank verursachen.
  • Der Full Sync löscht lokale Fahrzeuge (und deren Anhänge), die nicht mehr im Remote-Bestand erscheinen – dies ist ein destruktiver Vorgang, weshalb Backups vorhanden sein müssen.

Protokolle

  • Plugin-Protokolle befinden sich in wp-content/uploads/as24ci-logs/adp-car-market-hub.log.
  • Das aktive Protokoll wird rotiert, sobald es 10 MB überschreitet (Logger::MAX_SIZE_BYTES).
  • Rotierte Archive, die älter als 7 Tage sind, werden automatisch gelöscht.
  • Protokollschreibvorgänge belasten die Datenbank nicht; die reine Festplattenprotokollierung hält Importe schnell und verhindert ein Aufblähen von MySQL.

Leads

  • Leads werden als dedizierter WordPress Custom Post Type mit Metadaten für die Quelle (Kontaktformular, Probefahrt, Suchauftrag), den Einwilligungsstatus und Zeitstempel gespeichert.
  • Das Lead-Volumen ist im Vergleich zu den Fahrzeugen normalerweise gering, aber jeder Lead enthält personenbezogene Daten – Richtlinien zur Aufbewahrung finden Sie im Abschnitt «Datenschutz, Sicherheit und Compliance».
  • Ein CSV-Export wird bereitgestellt, damit Leads in ein externes CRM verschoben und regelmässig aus WordPress gelöscht werden können.

Analytics

  • Analytics-Ereignisse werden während der normalen Website-Nutzung (Seitenaufrufe, Filter-Klicks, Kontakt-Öffnungen, Lead-Konvertierungen) in eine dedizierte Tabelle geschrieben.
  • Aggregationsabfragen speisen das Dashboard-Widget und den Tab «Analytics»; sie lesen ausschliesslich aus dieser Tabelle.
  • Bei Websites mit langer Laufzeit sorgt eine regelmässige Bereinigung der Ereignistabelle (z. B. Aufbewahrung nur der letzten 12 Monate) dafür, dass die Abfragezeiten im Rahmen bleiben. Führen Sie dies über ein Datenbank-Backup- und anschliessendes Truncate-Verfahren oder über einen eigenen geplanten Task durch; das Plugin bereinigt Ereignisse nicht automatisch.

Betriebliche Skalierung

  • Das Plugin skaliert linear mit der Grösse des Fahrzeugbestands. Die dominierenden Faktoren sind Bild-Downloads (Netzwerk + Festplatte + CPU der Bildbibliothek) und Analytics-Schreibvorgänge (Datenbank-I/O).
  • Für grosse Garagen (1000+ Fahrzeuge) wird Folgendes empfohlen:
  • PHP 8.2/8.3 mit aktiviertem OPcache.
  • 512 MB+ PHP memory_limit.
  • Externer Cron, der /as24ci/v1/cron-import alle 5–10 Minuten auslöst.
  • Object Cache (Redis oder Memcached) für WordPress.
  • MySQL 8 / MariaDB 10.6+ auf dedizierten Ressourcen.
  • Für kleine Garagen (< 100 Fahrzeuge) ist die WordPress-Basislinie (256 MB Speicher, 120 s Ausführungszeit) mehr als ausreichend.

Empfohlenes Produktions-Setup

  • PHP 8.2 oder 8.3 (PHP-FPM) mit aktiviertem OPcache.
  • memory_limit = 256M (oder 512M für grosse Bestände), max_execution_time = 300, max_input_vars = 3000.
  • Alle erforderlichen Erweiterungen installiert: openssl, curl, mbstring, json, gd oder imagick, plus ZipArchive.
  • MySQL 8.0 oder MariaDB 10.6+ mit utf8mb4-Zeichensatz und InnoDB-Speicher.
  • Tägliche Datenbank-Backups einschliesslich der benutzerdefinierten Tabellen des Plugins.
  • Regelmässige Bereinigung von Analytics-Ereignissen und exportierten Leads, falls Bedenken hinsichtlich einer mehrjährigen Aufbewahrung bestehen.
  • Object Cache (Redis oder Memcached) auf stark frequentierten Websites.

Betriebliche Hinweise

  • Jeder Datenbankzugriff erfolgt über $wpdb mit prepare(), sodass das Plugin die Prepared-Statement-Schutzmechanismen von WordPress erbt.
  • Die benutzerdefinierten Tabellen werden bei der Plugin-Aktivierung und bei Upgrades der Berechtigungsversion über dbDelta() erstellt und migriert. Manuelle Schema-Anpassungen sind nicht erforderlich.
  • Das Plugin speichert das AutoScout24 Client Secret nicht in Quelldateien; es wird als WordPress-Option gespeichert. Behandeln Sie Datenbank-Backups so, als ob sie sensible Daten enthalten. Der vom KI-Assistenten verwendete verwaltete Gemini-API-Schlüssel wird von AD Promotion in AS24CI\Ai_Config (einer PHP-Konstante) konfiguriert und nicht als WordPress-Option gespeichert.
  • Der Tab «System & Hilfe» im WordPress-Adminbereich bildet jede oben aufgeführte PHP- und Erweiterungsprüfung mit Live-Werten der laufenden Website ab.
  • Ein Wechsel der PHP-Versionen oder -Erweiterungen auf dem Host erfordert keine Neukonfiguration des Plugins – prüfen Sie den Tab «System & Hilfe» nach der Änderung einfach erneut.

Fehlerbehebung

  • «Anforderungen nicht erfüllt» im Tab «System & Hilfe»: Identifizieren Sie das fehlende Element (PHP-Version, fehlende Erweiterung, zu wenig Speicher) und passen Sie die PHP-Laufzeitumgebung entsprechend an.
  • Allowed memory size of … bytes exhausted während des Imports: Erhöhen Sie memory_limit auf 256 MB oder 512 MB und verringern Sie die Fahrzeug-Batch-Grösse pro Cron-Durchlauf.
  • Importe bleiben bei «Bildverarbeitung» hängen: Stellen Sie sicher, dass GD oder Imagick installiert ist und das Uploads-Verzeichnis beschreibbar ist; prüfen Sie die Plugin-Protokolldatei auf bildspezifische Fehler.
  • Maximum execution time of … seconds exceeded: Erhöhen Sie max_execution_time für den vom Cron verwendeten FPM-Pool und bevorzugen Sie die Bildwarteschlange gegenüber Inline-Bild-Downloads.
  • Benutzerdefinierte Tabellen fehlen nach einer manuellen Datenbank-Wiederherstellung: Deaktivieren Sie das Plugin und aktivieren Sie es erneut, um die dbDelta()-Upgrade-Routine erneut auszuführen.
  • Plugin-Protokollverzeichnis wächst unerwartet schnell: Möglicherweise ist die ausführliche Protokollierung aktiviert; deaktivieren Sie diese im Tab «Automatisierung/Protokolle», sobald das Problem diagnostiziert wurde. Die Rotation greift zwar weiterhin, aber der ausführliche Modus erzeugt sehr viele Einträge pro Fahrzeug.
  • Analytics-Abfragen sind auf sehr grossen Websites langsam: Bereinigen Sie ältere Ereignisse (nach der Erstellung eines Backups) und stellen Sie sicher, dass der Datenbankserver über genügend Buffer Pool / RAM verfügt.

Verwandte Dokumente