Skip to main content

WordPress – Catchable fatal error: Object of class WP_Error could not be converted to string – Come risolvere

L’11 giugno 2017 questo sito ha subito un downtime di diverse ore a causa di un errore piuttosto strano verificatosi all’interno del database di WordPress. Se vi siete imbattuti in questo articolo è molto probabile che il vostro sito sia stato colpito dalla medesima problematica. Se le cose stanno così, siete finiti nel posto giusto: farò del nostro meglio per aiutarvi a risolvere raccontandovi la mia esperienza.

Dal punto di vista dell’utente, l’anomalia si presentava come un classico errore HTTP 500 – Application Error che bloccava tutte le pagine non servite tramite cache. Come sempre in questi casi la prima cosa che ho fatto è stata abilitare gli appositi switch WP_DEBUG e WP_DEBUG_LOG presenti all’interno del file wp-config.php, che – come probabilmente sanno molti lettori – si trova nella cartella principale di WordPress contiene tutti i parametri di configurazione principali dell’installazione in uso.

Come si può facilmente evincere dai commenti, il primo switch inserisce l’errore all’interno del HTTP response così da consentire all’utente di visualizzarlo on-screen, mentre il secondo – più sicuro – si limita a scriverlo all’interno di un file debug.log dedicato, anch’esso presente nella cartella principale di WordPress.

Questo era l’errore riportato:

Catchable fatal error: Object of class WP_Error could not be converted to string in /var/www/ryadel.com\wp-includes\rewrite.php on line 326

Sfortunatamente questa informazione non era sufficiente a comprendere cosa fosse davvero successo, ma se non altro puntava in una direzione chiara: ho quindi dato un’occhiata al codice sorgente del rewrite.php, fino a imbattermi nella seguente funzione (la linea 326 è quella evidenziata):

Approfondisci

Come aumentare il limite di 2 GB di memoria delle applicazioni a 32-bit (x86) nelle versioni di Windows a 64-bit (x64)

Se vi siete imbattuti in questo articolo è molto probabile che vi siate imbattuti in una classica problematica che incontrano molti power-user e amministratori di sistema lavorando con sistemi Windows a 64 bit di qualsivoglia tipo (Windows 2008 Server, Windows 2012 Server, Windows 7, Windows 10 e così via) e vecchi applicativi o eseguibili a 32-bit (x86): la cronica mancanza di memoria utilizzabile da questi ultimi, che si traduce in errori come il seguente:

Memoria insufficiente

La cosa più frustrante è che l’errore in questione si verifica anche quando il sistema è dotato di un grande quantitativo di memoria RAM libera, cosa che induce molti a pensare che il problema sia di tutt’altro avviso. La verità, come spesso accade, sta nel mezzo: pur trattandosi senza dubbio di un problema di memoria, le cause non sono da ricercare nella mancanza di RAM libera nel sistema quanto piuttosto nelle modalità di funzionamento dei processi a 32-bit all’interno del sistema operativo Windows: a prescindere dalla memoria globale, nessun processo a 32-bit ha la possibilità di utilizzare più di 2 Gigabytes di memoria complessiva. Le ragioni legate a questa problematica, ben documentate in questa pagina di Wikipedia (e relativi riferimenti), sono strettamente legate all’architettura x86 e, se il sistema è a 32-bit, possono essere aggirate soltanto con dei workaround che prevedano modalità di memory-paging (PAE) da implementare all’interno dell’applicazione stessa.

Fortunatamente, se la macchina dove vogliamo eseguire l’applicativo è dotata di un sistema operativo a 64 bit, abbiamo la possibilità di aggirare questo “tetto” in almeno due modi:

 

Approfondisci

Ubuntu Download ISO – Zesty Zapsus (17.04), Xenial Xerus (16.04.3), Trusty Tahr (14.04.5), Precise Pangolin (12.04.5)

In questo articolo presentiamo un elenco di tutte le URL ufficiali per il download delle ISO delle principali versioni di Ubuntu (desktop & server, i386 or AMD64).

E’ importante tenere in considerazione che le release AMD64 dovrebbero essere utilizzate solo sulle macchine basate sull’architettura AMD64 or EM64T (e.g., Athlon64, Opteron, EM64T Xeon, Core 2). Se non avete un processore a 64-bit, o se prevedete di lavorare quasi esclusivamente con programmi e applicazioni a 32-bit, è consigliabile installare la release i386 corrispondente.

Approfondisci

PHP – Come disabilitare la visualizzazione e il log degli errori da codice

Ogni sviluppatore, amministratore di sistema o webmaster che lavori o abbia lavorato con PHP conosce perfettamente che il metodo migliore per effettuare un debug rapido su uno script o pagina realizzata con il popolare Hypertext Preprocessor  è quello di impostare i valori opportuni delle direttive error_reportingdisplay_errors e/o log_errors contenute all’interno del file PHP.INI.

Ecco un tipico esempio di configurazione per un web server di produzione:

Approfondisci

PHP – Come risolvere l’errore “Warning: preg_replace(): The /e modifier is no longer supported” in PHP 7

In questo articolo parleremo di uno dei classici errori che si verificano quando si tenta l’upgrade da PHP5.x a PHP7:

Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead

Nonostante il problema in questione sia ben documentato nella documentazione ufficiale di PHP (l’utilizzo del modificatore /e  è deprecato fin dalla release 5.5 e non più supportato dalla 7.0.0 in poi), il warning di cui sopra resta uno dei più complessi da affrontare, principalmente perché non esiste un workaround valido per tutte le situazioni: il modo migliore di procedere è, ovviamente, quello suggerito dalla documentazione: procedere a una re-implementazione del codice, utilizzando la funzione preg_replace_callback in luogo del modificatore /e: sfortunatamente nella maggior parte dei casi non si tratta di un lavoro semplice, perché la funzione preg_replace è presente in numerosissimi script PHP di terze parti che è particolarmente scomodo modificare.

In questo articolo proveremo a documentare tre diversi metodi che sono stati messi a punto dalla community internazionale per risolvere il problema in modo soddisfacente: sentitevi liberi di scegliere quello che meglio si presta al vostro scenario specifico.

Approfondisci

Close