Visualizzare gli errori PHP da admin-ajax.php

26 mar 2018, 13:19:55
Visualizzazioni: 23.2K
Voti: 7

Abbiamo alcuni endpoint personalizzati che eseguono varie operazioni, accessibili tramite /wp/wp-admin/admin-ajax.php?action=some_action

Tuttavia, durante lo sviluppo, quando si verifica un errore di sintassi, logico o fatale, riceviamo semplicemente un "500 Internal Server Error"

In tutte le altre pagine del sito, quando c'è un errore, viene mostrato l'errore PHP.

Siamo costretti ad aprire il file di log PHP per vedere l'errore.

C'è qualcosa in WordPress che disabilita la visualizzazione degli errori su questi URL? E se sì, come possiamo evitarlo per consentire la visualizzazione degli errori direttamente nel browser?

5
Commenti

Se guardi la risposta nella scheda "Network" degli strumenti per sviluppatori del browser, vedrai l'errore.

Jacob Peattie Jacob Peattie
26 mar 2018 13:46:48

Questo è l'intero problema - otteniamo semplicemente un errore "500 internal server error" come risposta - indipendentemente da come ci arriviamo, anche se carichi l'URL direttamente nel browser

owenmelbz owenmelbz
26 mar 2018 15:09:35

@bueltge Scusa, l'ho letto, ma non capisco cosa sia rilevante? Non vedo da nessuna parte che stiano discutendo del perché i messaggi di errore non vengono visualizzati?

owenmelbz owenmelbz
26 mar 2018 17:21:26

Gli errori provenienti da richieste ajax non vengono mai visualizzati direttamente nel tuo browser. Se la segnalazione degli errori è attivata, puoi vedere i messaggi di errore nella console di rete. Il link di Bueltge aiuta a eseguire il debug in quel modo.

Luckyfella Luckyfella
15 dic 2018 01:50:03
Tutte le risposte alla domanda 3
5

WordPress di default nasconde gli errori per le chiamate di richiesta ajax. Questo può essere confermato dal file sorgente wp-includes/load.php#L352, qui:

if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'WP_INSTALLING' ) && WP_INSTALLING ) || wp_doing_ajax() ) {
    @ini_set( 'display_errors', 0 );
}

Vedi che la funzione wp_doing_ajax() viene utilizzata nell'istruzione condizionale, quindi display_errors viene impostato.

Per aggirare questo comportamento, è necessario attivare manualmente la segnalazione degli errori all'inizio della tua chiamata di funzione ajax, come suggerito da @Friss.

4 lug 2018 16:46:31
Commenti

GRAZIE!!! Ovviamente so che non si dovrebbe mai modificare il core, ma in un ambiente locale solo a scopo di risoluzione dei problemi, quando l'ajax viene chiamato da un plugin che non vuoi modificare o per cui non hai tempo di capire - commentare temporaneamente la riga indicata sopra in /wp-includes/load.php permetterà di visualizzare messaggi di errore più specifici e ti aiuterà a individuare da dove proviene il problema.

squarecandy squarecandy
25 set 2019 22:58:07

C'è un filtro all'inizio di load.php che lo bypassa: add_filter( 'enable_wp_debug_mode_checks', '__return_false' );

CragMonkey CragMonkey
25 apr 2020 21:48:13

@Cragmonkey Per favore potresti spiegare come si potrebbe usare quell'hook nella chiamata ajax.

Rahil Wazir Rahil Wazir
10 mag 2020 04:58:56

@Rahil Wazir ... Dovresti creare temporaneamente quell'hook in un altro punto del tuo plugin durante il debug.

CragMonkey CragMonkey
12 mag 2020 01:36:32

Per wp v6.5 è alla riga 617

Fabrice Fabiyi Fabrice Fabiyi
5 feb 2025 11:57:06
2

Puoi provare ad aggiungere queste due righe all'inizio del tuo file script

error_reporting(E_ALL); 
ini_set("display_errors", 1);

Questo comando indica a PHP di segnalare tutti i tipi di errori e sovrascrive le impostazioni predefinite per visualizzarli.

27 mar 2018 00:38:14
Commenti

Ciao, questo attiva effettivamente la segnalazione degli errori - tuttavia, stiamo cercando specificamente di capire PERCHÉ viene disattivata per il file admin-ajax.php poiché se la impostiamo ad esempio in fondo al wp-config, viene sovrascritta da qualche parte per le chiamate ajax

owenmelbz owenmelbz
27 mar 2018 11:47:21

funziona, grazie amico

Sharifur Robin Sharifur Robin
2 apr 2024 20:29:01
2
-1

Puoi provare il WP_Ajax_Response

$response = array(
   'what'=>'stuff',
   'action'=>'delete_something',
   'id'=>new WP_Error('oops','Ho avuto un incidente.'),
   'data'=>'Ops, c\'è stato un problema!'
);
$xmlResponse = new WP_Ajax_Response($response);
$xmlResponse->send();

Leggi di più https://codex.wordpress.org/Function_Reference/WP_Ajax_Response

26 mar 2018 13:29:41
Commenti

Spiacenti ma non è ciò che stiamo chiedendo - il nostro problema è che gli errori php non vengono visualizzati, quando invece ne abbiamo bisogno

owenmelbz owenmelbz
26 mar 2018 15:10:31

e se ci sono errori sql o di altro tipo?

amilaishere amilaishere
3 feb 2021 13:05:39