Cosa potrebbe causare un POST a wp-admin/async-upload.php che restituisce sia JSON che HTML?
Nella scheda media, il caricamento di un file immagine valido risulta nella visualizzazione di "Errore HTTP".
Ricaricando la scheda media si vede che l'immagine è stata caricata e ridimensionata.
Gli strumenti di debug del browser mostrano che durante l'upload, il browser sta effettuando una richiesta POST a wp-admin/async-upload.php. Il server risponde con un errore 500. Il corpo della risposta, tuttavia, è sospetto. La prima parte è una struttura JSON. La struttura JSON è immediatamente seguita da un documento HTML con il titolo "Errore WordPress" ma con il corpo vuoto.
Non ci sono registrazioni nel log degli errori del webserver (apache) e la modalità debug di WP e l'aumento della verbosità degli errori/warning PHP non sono stati d'aiuto. La disattivazione di tutti i plugin non ha avuto effetto sull'errore. Ho provato anche a passare da GD a ImageMagick senza successo.
Versioni software rilevanti:
- WordPress 4.2.2
- PHP 5.5.12-2ubuntu4.4
- Ubuntu Utopic
Qualche idea su cosa potrebbe causare async-upload.php a restituire sia JSON che un documento di errore HTML e/o come potrei eseguire ulteriori debug di questo problema?

Ho avuto lo stesso problema e non ho trovato alcuna informazione nel mio output di debug.
Si è scoperto che DOING_AJAX
non era definito (non so il motivo).
Modificando l'inizio di async-upload.php
da
if ( isset( $_REQUEST['action'] ) && 'upload-attachment' === $_REQUEST['action'] ) {
define( 'DOING_AJAX', true );
}
a
define( 'DOING_AJAX', true );
ha funzionato per me. Forse approfondirò e troverò la vera causa radice.

Questo probabilmente non è esattamente un problema causato da WordPress, ma da configurazioni e/o impostazioni del server. Gli errori 500 sono piuttosto generici e possono avere varie origini, quindi è difficile fornire la direttiva unica che li risolverà. Tra l'altro, la restituzione di JSON e HTML sembra essere comune quando ciò accade, non sono sicuro dove e si mescola, potrebbe essere qui. Sono abbastanza sicuro che ciò accada a causa di qualche problema di memoria.
Sebbene probabilmente abbia a che fare con la memoria, non posso esserne certo, perché non ci sono abbastanza informazioni disponibili per esserne sicuri al 100%. Quindi ecco una piccola lista di controllo, non necessariamente esaustiva, da seguire:
- limite di memoria - la memoria PHP potrebbe essere appena al limite di non essere sufficiente, aumentala; inserisci
define( 'WP_MEMORY_LIMIT', '128MB' );
inwp-config.php
- .htaccess - corruzione/problema; controllalo; possibilmente esegui un backup e rigeneralo
- PHP5 - alcuni host hanno avuto problemi con questo, anche se non li ho visti da un po'; prova a inserire
AddType x-mapp-php5 .php
nel tuo.htaccess
- permessi dei file - assicurati che siano corretti, se non sei sicuro, reimpostali con quelli corretti; articolo del codex: modifica dei permessi dei file
- permessi delle cartelle --
- WP - controlla e se necessario correggili; articolo del codex: modifica dei permessi dei file
- server - a volte ci sono ad esempio problemi con i permessi della cartella temporanea per gli upload
- ricaricare i file core di WP - anche se non dovrebbe essere necessario se i due passaggi precedenti sono stati eseguiti correttamente, ma a volte ci sono altre corruzioni, quindi potrebbe essere un ulteriore passo da compiere
- configurazione di apache - assicurati che apache sia configurato correttamente sul tuo server, in base alle tue esigenze e ai requisiti effettivi; ad esempio, un colpevole comune sembra essere
mod_security
- controlla il codice personalizzato di WP - ciò che hai scritto o installato tramite plugin; conosci la procedura, testa disattivando e/o passando al tema predefinito e così via
Tutti gli elementi della lista sono piuttosto noti e documentati, quindi, se necessario, troverai maggiori informazioni là fuori.
Ultimo ma non meno importante, buona fortuna!

Nel file wp-config.php (nella cartella principale di WordPress) devi abilitare il debug.
Devi impostare wp_debug su true.
Modifica define('WP_DEBUG', false); in define('WP_DEBUG', true);
Salva il file e aggiorna il browser (ti consiglio di usare ctrl+f5).
Vedrai tutti gli errori.

Consiglio di controllare il log degli errori del webserver prima di procedere alla cieca.
Nel mio caso ho trovato il seguente messaggio di errore
2020/01/16 15:30:24 [error] 24844#24844: *206729 client intended to send too large body: 33962282 bytes, client: xxx.xxxx.xxx.xxx, server: example.com, request: "POST /wp-admin/async-upload.php HTTP/2.0", host: "example.com", referrer: "https://example.com/"
Il che semplicemente significa che il valore client_max_body_size
di nginx era troppo basso. WordPress controlla solo upload_max_filesize
nella configurazione PHP, quindi WordPress permette di caricare file più grandi di client_max_body_size
se quel valore è inferiore a upload_max_filesize
.

Ho risolto questo problema aumentando post_max_size da 8MB a 16MB
