Errore 500 durante l'aggiornamento a PHP 8

 
Errore 500 durante l'aggiornamento a PHP 8

Nel novembre dello scorso anno pHP 8 è atterrato. Ho annunciato alcuni miglioramenti in termini di prestazioni, velocità e sicurezza.

Come ogni buon armeggiatore, ho eseguito l'aggiornamento da 7.4, in particolare da 7.4.16, la versione attualmente in esecuzione sul server.

plof! Un bel errore 500 mi accoglie e interrompe l'intero sito. Nessun URL si risolve.

Ho fatto il test tipico per disabilitare tutti i plugin e utilizzare il modello predefinito. L'errore 500 non scompare.

Sono rimasta scioccata, ma ho superato la questione convinta che fosse ancora troppo presto per aggiornare e, come mi hanno consigliato, la cosa migliore da fare era aspettare che tutti gli autori di plugin e template aggiornassero il loro codice per renderlo compatibile con PHP 8

Quasi sette mesi dopo ho riprovato e l'errore 500 era ancora presente.

Il primo indizio che l'origine dell'errore è solo in questo blog è che nelle altre due installazioni di WordPress che ho nello stesso server tutto funziona correttamente.

L'errore 500 può comparire per molte ragioni. Il passo logico successivo è quello di estrarre i registri degli errori per cercare di capire cosa c'è che non va. Appare una serie di avvisi come questo:

Avvertenza PHP: uso della costante non definita minor - si presume 'minor' (questo causerà un errore in una versione futura di PHP) in /home/xxxxxx/public_html/blog/wp-config.php sulla linea 11

Avviso PHP: Utilizzo della costante indefinita minor - assunta come 'minor' (questo darà luogo a un errore in una versione futura di PHP).

Cioè, la costante dovrebbe avere delle virgolette intorno. Vado in wp-config.php e in effetti, minor appare senza virgolette su quella linea

define (‘WP_AUTO_UPDATE_CORE’, minor);

Cercando nel forum di WordPress ho scoperto che molte persone hanno avuto lo stesso problema aggiornando alle versioni precedenti di PHP a causa di conflitti con un plugin o un modello.

Non si può nemmeno escludere che il problema sia legato all'installazione di WordPress, che ho qualcosa di rotto, come mi è stato detto in un ticket che ho inviato a LucusHost.

In alcune risposte ricevute, si dice che per risolvere il problema basta aggiungere le virgolette a 'minore', quindi lo provi ed è quello che ho fatto

define (‘WP_AUTO_UPDATE_CORE’, ‘minor’);

WP_AUTO_UPDATE_CORE le permette di controllare gli aggiornamenti del nucleo di WordPress per le versioni minori, maggiori e di sviluppo. Questa costante può essere definita in diversi modi. Rimuovere questa linea non è una buona idea.

#Disables all core updates:

define( ‘WP_AUTO_UPDATE_CORE’, false );

# Enable all updates, including minor and major updates:

define( ‘WP_AUTO_UPDATE_CORE’, true );

# Enables minor updates:

define( ‘WP_AUTO_UPDATE_CORE’, ‘minor’ );

Una notizia buona e una cattiva.

La buona notizia è che ora, con PHP 8, l'errore 500 è sparito.

Tutto sembra funzionare bene a prima vista, sia i plugin che i post.

La cattiva notizia è che l'indice è rotto e si presenta così.

Errore 500 durante l'aggiornamento a PHP 8 1

Ho deciso di attaccare prima il modello di postlinea, realizzata con Elementor Pronel caso in cui il costruttore avesse lasciato qualche schifezza nascosta, ma dopo averla esaminata e rifatta completamente, ho escluso che l'errore provenisse da lì.

Ora sto ancora espurgando il modello (GeneratePress Premium) in un ambiente di prova e almeno so dove si rompe, ma per lo più sto cercando in WordPress, che è dove penso si trovi il nocciolo della questione, qualche codice obsoleto trascinato, qualche filtro intasato di grasso o altro.

Lascio questa nota qui nel caso in cui qualcuno abbia avuto un problema simile e sia utile per lui o lei, oppure se conosce molto bene WP e può dare qualche indizio in più per risolverlo.

Non appena troverò la soluzione definitiva e la possibile spiegazione, aggiornerò questo post.

Aggiornamento

Il registro degli errori, dopo aver attivato il DEBUG, fornisce indizi che GeneratePress si sta bloccando da qualche parte, forse a causa di qualche gancio o filtro che ho inserito nel suo modulo Elements (o altro)

Dato che ho un modello figlio di GeneratePress mi sono perso e non so dove andare da qui, ma dato che ho un paio di sospetti non considero la missione fallita.

Errore fatale: Uncaught TypeError: Tipi di operando non supportati: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169 Stack trace: #0

/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(419): generate_do_post_meta_item() #1

/home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php(538): generate_posted_on() #2

/home/ public_html/blog/wp-includes/class-wp-hook.php(292): generate_post_meta() #3

/home/ public_html/blog/wp-includes/class-wp-hook.php(316): WP_Hook->apply_filters() #4

/blog/wp-includes/plugin.php(484): WP_Hook->do_action() #5

/blog/wp-content/themes/generatepress/content.php(48): do_action() #6

/blog/wp-includes/template.php(732): require('/home/ ...') #7

/blog/wp-includes/template.php(676): load_template() #8

/blog/wp-includes/general-template.php(204): locate_template() #9

/blog/wp-content/themes/generatepress/inc/theme-functions.php(587): get_template_part() #10

/blog/wp-content/themes/generatepress/index.php(37): generate_do_template_part() #11

/blog/wp-includes/template-loader.php(106): include('/home/ ...') #12

/blog/wp-blog-header.php(19): require_once('/home/ ...') #13

/blog/index.php(17): require('/home/ ...') #14

{main} lanciato in /blog/wp-content/themes/generatepress/inc/structure/post-meta.php sulla linea 169

l'ho sistemato! Beh, quasi

Fortunatamente la prima riga era la chiave, è lì che si sono verificati tutti gli errori di quel lungo elenco:

Fatal error: Uncaught TypeError: Unsupported operand types: string + int in /home/ public_html/blog/wp-content/themes/generatepress/inc/structure/post-meta.php:169

Errore 500 durante l'aggiornamento a PHP 8 2

Il mistero dell'errore era in qualche operazione non supportata del maledetto get_the_time

Collegando il tutto, i sospetti vengono confermati. L'errore era causato da questo snippet di funzione che ho utilizzato per visualizzare il giorno e l'ora dell'aggiornamento come estensione della meta data.

Come se non bastasse, non so come, ma è rimasto residente dopo aver disabilitato Snippet di codice e cancellare la cache.

Errore 500 durante l'aggiornamento a PHP 8 3

Morale della favola, non utilizzi funzioni che funzionano bene per altri, perché ogni pagina ha la sua storia particolare ed è molto probabile che finiscano per rovinare qualcosa se le dimentica, aggiorna WP, PHP, un modello o un plugin e non sono più compatibili.

Eliminando questo snippet, tutto funziona bene e la homepage riappare sana e salva.

Non c'è due senza tre, un altro errore . Ora Feedzy

Ma non se ne vada ancora, perché ora il plugin Feedzy (credo) o qualcosa di correlato interrompe la pagina delle notizie.

Errore 500 durante l'aggiornamento a PHP 8 4

Devo aprire un ticket di assistenza, dato che si tratta di una versione a pagamento, per far sapere agli sviluppatori del plugin se è compatibile al 100% con PHP 8 (e se si rompe perché non lo è) o per avere un'indicazione.

02/07/2021 - Feedly ha replicato l'errore fatale utilizzando PHP 8 e ha trasferito il problema ai suoi sviluppatori, ora dobbiamo aspettare che rilascino una nuova versione del plugin che risolva il problema.

05/07/2021- La descrizione del bug è qui può trovarlo nel loro Github.

06/07/2021 - Sebbene non abbiano ancora risposto o rilasciato una nuova versione con la correzione, in questo commit sono già le linee di codice che lo risolvono. L'ho testato e, in assenza di un test valido e approfondito, sembra che PHP 8 non rompa più nulla.

Per ricapitolare

Non male. Dall'avere un errore 500 che rompeva l'intero blog, all'averlo solo nella home page e infine in una singola pagina"secondaria" , per finire con il trovare una soluzione, è sufficiente per essere soddisfatti delle ore investite nella riparazione.

La chiave di tutto sta nella ricerca, dedichi tutto il suo tempo a cercare l'origine e ciò che provoca in altre parti del suo blog. Non si butti a tentare soluzioni rapide senza sufficienti indizi, perché sprecherebbe il suo tempo o, in modo negativo, romperebbe qualcos'altro.

Aggiornerò di nuovo quando riuscirò a sconfiggere il nuovo bug con Feedzy o qualsiasi altra cosa sia questa volta.

Abbonamento via e-mail

Ricevi gratuitamente nella tua casella di posta elettronica articoli completi senza pubblicità non appena vengono pubblicati. Il contenuto completo del feed viene inviato senza pubblicità tramite un servizio esterno.