Output di error_log() per print_r() che appare sulla pagina
Sto cercando di fare il debug di un plugin e sto usando error_log()
in vari punti per vedere diversi elementi. Sto utilizzando quanto segue:
error_log( print_r( $variable ) );
Quando guardo il file debug.log
, vedo solo 1
e l'output effettivo della funzione error_log()
viene inviato al browser.
So che non è un altro plugin a causare questo problema poiché sono tutti disabilitati ad eccezione di quello che sto scrivendo. Nel mio wp-config.php
, ho definito WP_DEBUG_DISPLAY
come false
.
La stessa cosa accade se uso var_dump()
e var_export()
. Altre funzioni come gettype()
funzionano perfettamente.
C'è un modo per ottenere l'output nel file debug.log
?

La funzione print_r accetta un secondo parametro per return
in modo che restituisca la variabile invece di stamparla.
print_r($expression, $return)
Quindi puoi fare
error_log( print_r( $variable, true ) );

Sebbene la risposta accettata sia corretta, ho voluto includere una spiegazione più dettagliata per maggiore chiarezza.
print_r()
accetta due argomenti (vedi la documentazione di questa funzione), il secondo dei quali è opzionale e hai omesso. Il primo argomento è l'espressione da stampare. Il secondo specifica se il valore deve essere restituito o stampato.
Quando il secondo argomento viene omesso, il suo valore predefinito è false
e quindi stampa il risultato immediatamente. Se questo argomento è false, print_r()
restituirà true
(che viene visualizzato come "1" nel log degli errori).
$result = print_r( $variable );
Il risultato restituito qui è true
(visualizzato come "1").
Stai passando il risultato restituito da print_r()
a error_log()
. Per il motivo descritto sopra, questo risultato è "1" ed è per questo che ottieni 1 come voce nel log.
Per ottenere un risultato che contenga l'espressione in $variable
e passarla alla funzione error_log()
, hai bisogno che print_r()
restituisca l'espressione come risultato. Puoi farlo specificando il secondo argomento come TRUE.
$result = print_r( $variable, true );
Ora il risultato restituito da print_r()
è l'espressione contenuta in $variable
e puoi passarla a error_log()
:
$result = print_r( $variable, true );
error_log( $result );
OPPURE:
error_log( print_r( $variable, true ) );
Se vuoi fare un passo avanti, potresti scrivere una funzione di utilità per scrivere nel log che gestisca la determinazione se $variable
è un array o un oggetto e quindi richieda print_r()
, o se possa essere semplicemente passata come stringa. Questo rende più semplice gestire il logging di debug poiché non devi preoccuparti del tipo di variabile per poterla passare al logging. Ho scritto una funzione di utilità di questo tipo con una spiegazione dettagliata qui.
Nota a margine sulle funzioni PHP menzionate: Non importa quanto sei esperto, è sempre utile rivedere la documentazione delle funzioni che stai utilizzando per assicurarti di sapere cosa fanno effettivamente. Ho linkato sopra la documentazione di print_r()
, che descrive esattamente quanto discusso sia in questa risposta che in quella accettata. Ma sono state menzionate anche altre funzioni PHP che hanno funzionato o meno. Consideriamole:
var_dump()
: La documentazione indica che questa funzione non restituisce un risultato. Per poter passare qualcosa a error_log()
per includerlo nel log degli errori, deve essere un'espressione contenuta in una variabile. Questa funzione non restituisce nulla, stampa solo a schermo. Quindi non puoi usarla per passare qualcosa a error_log()
.
var_export()
: Simile a print_r()
in quanto hai un secondo argomento opzionale per restituire un risultato o stamparlo a schermo. Definisci il secondo argomento come true
per poter restituire un risultato per error_log()
.
gettype()
restituisce sempre il tipo della variabile. Quindi hai qualcosa che puoi passare a error_log()
di default. Ecco perché ha funzionato.
