Documentazione · Requisiti di sistema

Requisiti di PHP e database

Introduzione

ADP Car Market Hub è un moderno plugin PHP 8 che utilizza namespace, tipizzazione forte in molti punti e lo strato di astrazione del database di WordPress ($wpdb, dbDelta()). Funziona sullo stesso stack PHP e database di WordPress stesso, ma aggiunge le proprie tabelle personalizzate per veicoli, eventi di analisi e avvisi di ricerca, oltre a log basati su file.

Questo documento descrive la versione e le estensioni del linguaggio PHP, il motore di database e le considerazioni sullo storage, nonché le implicazioni operative di importazioni, log, lead e analisi.

Quando utilizzare questo documento

Utilizza questo documento quando:

  • Configuri il runtime PHP per un nuovo host WordPress.
  • Esegui un audit di un ambiente PHP esistente rispetto ai requisiti del plugin.
  • Pianifichi lo storage e la crescita del database per il sito di una concessionaria.
  • Analizzi problemi di prestazioni o memoria durante le importazioni o la generazione tramite IA.
  • Hai bisogno di dimensionare il database per la conservazione dei dati di analisi e la gestione dei lead.

Panoramica

Il plugin utilizza lo stack di runtime standard di WordPress:

  • Linguaggio PHP: Richiede PHP 8.1+ (impostato nell'intestazione del plugin, readme.txt e composer.json).
  • Estensioni PHP: Si affida a openssl, curl, mbstring, json e a una tra gd / imagick per l'elaborazione delle immagini. La scheda Sistema e Aiuto mostra anche ZipArchive per i pacchetti di esportazione.
  • Accesso al database: Avviene esclusivamente tramite $wpdb con prepared statement. Nessun utilizzo diretto di PDO o mysqli.
  • Tabelle personalizzate: Create all'attivazione tramite dbDelta(); una per i record dei veicoli ({prefix}as24_vehicles), una per gli eventi di analisi, una per gli iscritti agli avvisi di ricerca.
  • Tabelle di WordPress: Le tabelle standard posts, postmeta, term_*, options e users vengono utilizzate per il CPT as24ci_car, le tassonomie dei veicoli, le impostazioni del plugin, i lead (un CPT separato) e le capability.
  • Log basati su file: Scritti in wp-content/uploads/as24ci-logs/, non nel database. Ruotati a 10 MB con una conservazione di 7 giorni.

Requisiti

Versione PHP

  • Minima (imposta dal plugin): PHP 8.1.
  • Consigliata: Un ramo PHP 8.x attualmente supportato (8.2 o 8.3) per garantire le migliori prestazioni a lungo termine e una postura di sicurezza ottimale.
  • Non supportata: PHP 8.0 o versioni precedenti. I metadati del plugin dichiarano 8.1 come versione minima e la base di codice utilizza la sintassi di PHP 8.1.

Funzionalità PHP richieste

Il controllo dell'ambiente del plugin impone quanto segue a runtime e mostra il risultato nella scheda Sistema e Aiuto:

  • Estensione openssl — HTTPS in uscita (API di AutoScout24, endpoint Gemini gestito).
  • Estensione curl — utilizzata dall'API HTTP di WordPress per le richieste in uscita.
  • Estensione mbstring — gestione delle stringhe multi-byte (mb_strtolower ecc.).
  • Estensione json — codifica/decodifica dei payload API e dei blob di opzioni.
  • Estensione gd o imagick — elaborazione degli allegati immagine e conversione WebP opzionale.
  • Classe ZipArchive — consigliata (utilizzata per i pacchetti di esportazione/download).
  • Una directory wp-content/uploads/ scrivibile per immagini e log.

Impostazioni di runtime PHP consigliate

Queste non sono imposte nel codice ma corrispondono alle soglie presenti nella scheda Sistema e Aiuto del plugin:

ImpostazioneMinimoConsigliatoNote
memory_limit128 MB256 MB+< 128 MB viene segnalato come "troppo basso"; 256 MB+ è "buono".
max_execution_time30 s120 s+ (o 0 = illimitato)< 30 s viene segnalato come "troppo basso"; 30–60 s "accettabile".
upload_max_filesize8 MB16 MB+Deve coprire comodamente una singola immagine del veicolo.
post_max_size16 MB32 MB+Dovrebbe essere ≥ upload_max_filesize.
max_input_vars10003000+Le schede di mappatura e dei filtri inviano molti campi contemporaneamente.

Per le esecuzioni di WP-Cron e CLI, gli stessi limiti si applicano alla CLI PHP / al pool FPM che gestisce il cron job.

OPcache e realpath cache

OPcache è consigliato in produzione. Il plugin contiene molte classi di piccole dimensioni; OPcache riduce sostanzialmente l'overhead per richiesta. Utilizza la configurazione OPcache consigliata da WordPress; non sono richieste impostazioni speciali.

Motore di database

  • Richiesto: Un database supportato da WordPress — MySQL 5.7+ o MariaDB 10.4+ in linea con la raccomandazione di WordPress. Il plugin non impone una versione più restrittiva, pertanto questa è una raccomandazione piuttosto che un requisito rigido.
  • Consigliato per la produzione: MySQL 8.0 o MariaDB 10.6+ per una migliore gestione del formato JSON, UTF-8 completo (utf8mb4) per impostazione predefinita e prestazioni migliorate su tabelle di grandi dimensioni.
  • Motore di storage: InnoDB. Le istruzioni CREATE TABLE del plugin si affidano a dbDelta() ed ereditano il set di caratteri/collation di WordPress (tipicamente utf8mb4).
  • Connessione: Credenziali standard di WordPress in wp-config.php. Il plugin non utilizza una connessione al database separata.

Storage del database

Il plugin crea e mantiene i seguenti dati:

  • Custom post type as24ci_car — un post WordPress per veicolo in posts / postmeta, oltre ai termini di tassonomia in term_*.
  • Custom post type per i lead — lead da moduli di contatto, richieste di test drive e avvisi di ricerca memorizzati come post con metadati.
  • {prefix}as24_vehicles — tabella di ricerca rapida con gli attributi chiave del veicolo (prezzo, valuta, hash utilizzati per il rilevamento delle modifiche, ecc.).
  • Tabella degli eventi di analisi — visualizzazioni di pagina, interazioni con i filtri, eventi di apertura dei contatti ed eventi dei lead con aggregazione giornaliera.
  • Tabella degli avvisi di ricerca — ricerche salvate e record degli iscritti con double opt-in per gli Smart Stock Alerts.
  • Opzioni (wp_options) — impostazioni del plugin sotto il prefisso as24ci_*, oltre ai transient utilizzati per il blocco dell'importazione e la coda delle immagini.

Guida pratica al dimensionamento:

  • Per veicolo: Pochi KB in posts + postmeta + as24_vehicles, oltre agli allegati immagine (post + metadati dell'allegato). Lo storage binario delle immagini avviene su disco, non nel database.
  • Per giorno di analisi: Centinaia di righe di piccole dimensioni su un sito poco trafficato, decine di migliaia su uno molto attivo. Pianifica un'epurazione periodica se hai bisogno solo di analisi a breve termine.
  • Per lead: Una manciata di righe (un post CPT + metadati).

Importazioni

  • Le importazioni sono suddivise in lotti. Il Batch-Wizard adatta la dimensione del lotto tra 1 e 5 veicoli per passaggio; le esecuzioni cron utilizzano un'impostazione configurabile per il numero massimo di veicoli per esecuzione.
  • I download delle immagini vengono inseriti in coda ed elaborati in modo asincrono quando è abilitata la "modalità coda immagini", in modo che una singola richiesta PHP non debba mai scaricare decine di immagini contemporaneamente.
  • Un blocco di importazione (transient con un TTL di 40 minuti) impedisce la sovrapposizione di due esecuzioni cron.
  • Le re-importazioni utilizzano hash dei contenuti e delle immagini per il rilevamento delle modifiche, in modo che i veicoli non modificati non comportino quasi nessuna scrittura nel database.
  • La sincronizzazione completa (Full Sync) elimina i veicoli locali (e i relativi allegati) che non compaiono più nell'elenco remoto — si tratta di un'operazione distruttiva, pertanto è necessario disporre di backup.

Log

  • I log del plugin risiedono in wp-content/uploads/as24ci-logs/adp-car-market-hub.log.
  • Il log attivo viene ruotato quando supera i 10 MB (Logger::MAX_SIZE_BYTES).
  • Gli archivi ruotati più vecchi di 7 giorni vengono eliminati automaticamente.
  • Le scritture dei log non influiscono sul database; la registrazione solo su disco mantiene rapide le importazioni ed evita di gonfiare MySQL.

Lead

  • I lead sono memorizzati come un custom post type dedicato WordPress con metadati relativi alla sorgente (modulo di contatto, test drive, avviso di ricerca), allo stato del consenso e ai timestamp.
  • Il volume dei lead è normalmente ridotto rispetto a quello dei veicoli, ma ogni lead rappresenta dati personali — consulta la sezione Privacy, sicurezza e conformità per indicazioni sulla conservazione.
  • Viene fornita un'esportazione CSV in modo che i lead possano essere trasferiti a un CRM esterno ed eliminati periodicamente da WordPress.

Analisi

  • Gli eventi di analisi vengono inseriti in una tabella dedicata durante il normale utilizzo del sito (visualizzazioni di pagina, clic sui filtri, aperture dei contatti, conversioni dei lead).
  • Le query di aggregazione alimentano il widget della bacheca e la scheda Analisi; leggono esclusivamente da questa tabella.
  • Per i siti attivi da molto tempo, l'epurazione periodica della tabella degli eventi (ad esempio, conservando solo gli ultimi 12 mesi) mantiene limitati i tempi di esecuzione delle query. Esegui questa operazione tramite una procedura di backup e successivo svuotamento (truncate) del database o tramite un tuo job pianificato; il plugin non elimina automaticamente gli eventi.

Scalabilità operativa

  • Il plugin scala linearmente con le dimensioni dell'inventario. I costi dominanti sono i download delle immagini (rete + disco + CPU della libreria di immagini) e le scritture di analisi (I/O del database).
  • Per i grandi rivenditori (oltre 1000 veicoli), preferisci:
  • PHP 8.2/8.3 con OPcache abilitato.
  • memory_limit PHP di almeno 512 MB.
  • Cron esterno che attiva /as24ci/v1/cron-import ogni 5–10 minuti.
  • Cache degli oggetti (Redis o Memcached) per WordPress.
  • MySQL 8 / MariaDB 10.6+ su risorse dedicate.
  • Per i piccoli rivenditori (< 100 veicoli), la configurazione di base di WordPress (256 MB di memoria, 120 s di tempo di esecuzione) è più che sufficiente.

Configurazione consigliata per la produzione

  • PHP 8.2 o 8.3 (PHP-FPM) con OPcache abilitato.
  • memory_limit = 256M (o 512M per inventari di grandi dimensioni), max_execution_time = 300, max_input_vars = 3000.
  • Tutte le estensioni richieste installate: openssl, curl, mbstring, json, gd o imagick, oltre a ZipArchive.
  • MySQL 8.0 o MariaDB 10.6+ con set di caratteri utf8mb4 e storage InnoDB.
  • Backup giornalieri del database, incluse le tabelle personalizzate del plugin.
  • Epurazione periodica degli eventi di analisi e dei lead esportati in caso di requisiti di conservazione pluriennale.
  • Cache degli oggetti (Redis o Memcached) sui siti molto trafficati.

Note operative

  • Tutti gli accessi al database passano attraverso $wpdb con prepare(), pertanto il plugin eredita le protezioni contro le SQL injection tramite prepared statement di WordPress.
  • Le tabelle personalizzate vengono create e migrate tramite dbDelta() all'attivazione del plugin e agli aggiornamenti di versione delle capability. Non sono necessarie modifiche manuali dello schema.
  • Il plugin non memorizza il client secret di AutoScout24 nei file sorgente; viene salvato come opzione di WordPress. Tratta i backup del database come contenenti dati sensibili. La chiave API Gemini gestita utilizzata dall'assistente IA è configurata da AD Promotion in AS24CI\Ai_Config (una costante PHP) e non viene memorizzata come opzione di WordPress.
  • La scheda Sistema e Aiuto nell'amministrazione di WordPress riproduce ogni controllo di PHP e delle estensioni sopra elencato con i valori in tempo reale del sito in esecuzione.
  • Il passaggio a versioni di PHP o estensioni diverse sull'host non richiede alcuna riconfigurazione del plugin — ricontrolla semplicemente la scheda Sistema e Aiuto dopo la modifica.

Risoluzione dei problemi

  • "Requisiti non soddisfatti" nella scheda Sistema e Aiuto: Identifica l'elemento mancante (versione PHP, estensione mancante, memoria insufficiente) e adegua il runtime PHP di conseguenza.
  • Allowed memory size of … bytes exhausted durante le importazioni: Aumenta memory_limit a 256 MB o 512 MB e riduci la dimensione del lotto di veicoli per singola esecuzione cron.
  • Le importazioni si bloccano su "elaborazione immagini": Verifica che GD o Imagick sia installato e che la directory degli upload sia scrivibile; controlla il file di log del plugin per errori specifici relativi alle immagini.
  • Maximum execution time of … seconds exceeded: Aumenta max_execution_time per il pool FPM utilizzato dal cron e preferisci la coda delle immagini rispetto ai download in linea delle immagini.
  • Tabelle personalizzate mancanti dopo un ripristino manuale del database: Disattiva e riattiva il plugin per eseguire nuovamente la routine di aggiornamento di dbDelta().
  • La directory dei log del plugin cresce in modo imprevisto: Potrebbe essere abilitata la registrazione dettagliata (verbose); disabilitala nella scheda Automazione/Log una volta diagnosticato il problema. La rotazione si applica comunque, ma la modalità dettagliata produce molte voci per singolo veicolo.
  • Query di analisi lente su siti molto grandi: Elimina gli eventi più vecchi (dopo aver effettuato un backup) e assicurati che il server del database disponga di sufficiente buffer pool / RAM.

Documenti correlati