Ce ar putea cauza ca un POST către wp-admin/async-upload.php să returneze JSON și HTML?
În tab-ul media, încărcarea unui fișier imagine valid are ca rezultat afișarea mesajului "HTTP error".
Reîncărcarea tab-ului media arată că imaginea s-a încărcat și redimensionat totuși.
Instrumentele de debug ale browserului arată că la încărcare, browserul face un POST către wp-admin/async-upload.php. Serverul răspunde cu o eroare 500. Conținutul răspunsului este însă suspect. Prima parte este o structură JSON. Structura JSON este urmată imediat de un document HTML cu titlul "WordPress Error" dar cu body gol.
Nu apare nimic în log-ul de erori al webserverului (apache) iar modul de debug WordPress și verbozitatea crescută a erorilor/avertismentelor PHP nu au fost de ajutor. Dezactivarea tuturor plugin-urilor nu a avut niciun efect asupra erorii. Am încercat să comut între GD și ImageMagick, de asemenea fără succes.
Versiuni software relevante:
- WordPress 4.2.2
- PHP 5.5.12-2ubuntu4.4
- Ubuntu Utopic
Aveți idei despre ce ar putea cauza ca async-upload.php să returneze atât JSON cât și un document HTML de eroare și/sau cum aș putea face debug în continuare?

Am avut aceeași problemă și nu am găsit nicio informație în ieșirea de depanare.
S-a dovedit că DOING_AJAX
nu era definit (nu știu de ce).
Modificarea începutului fișierului async-upload.php
de la
if ( isset( $_REQUEST['action'] ) && 'upload-attachment' === $_REQUEST['action'] ) {
define( 'DOING_AJAX', true );
}
la
define( 'DOING_AJAX', true );
a funcționat pentru mine. Poate voi aprofunda mai târziu și voi găsi cauza reală a problemei.

Aceasta nu este exact o problemă cauzată de WordPress, ci mai degrabă de configurațiile și/sau setările serverului. Erorile 500 sunt destul de generice și pot avea diverse origini, așa că este dificil să oferi o singură soluție care să le rezolve. Apropo, returnarea de JSON și HTML pare să fie comună când acest lucru se întâmplă, nu sunt sigur unde și cum se amestecă, poate aici. Sunt destul de sigur că acest lucru se întâmplă din cauza unei probleme de memorie.
Deși probabil are legătură cu memoria, nu pot fi sigur, deoarece nu există suficiente informații disponibile pentru a fi 100% sigur. Așadar, iată o mică listă de verificare, nu neapărat exhaustivă, pe care o poți parcurge:
- limita de memorie - memoria PHP poate fi la limita de a nu fi suficientă, mărește-o; adaugă
define( 'WP_MEMORY_LIMIT', '128MB' );
înwp-config.php
- .htaccess - corupție/probleme; verifică-l; eventual fă-i o copie de rezervă și regenerează-l
- PHP5 - unele gazde au avut probleme cu asta, deși nu am mai văzut de ceva vreme; încearcă să adaugi
AddType x-mapp-php5 .php
în.htaccess
- permisiuni fișiere - asigură-te că sunt corecte, dacă nu ești sigur, resetează-le cu cele corecte; articol din codex: schimbarea permisiunilor fișierelor
- permisiuni foldere --
- WP - verifică și dacă este necesar, corectează-le; articol din codex: schimbarea permisiunilor fișierelor
- server - uneori există probleme, de exemplu, cu permisiunile folderului temporar de încărcare
- reîncărcarea fișierelor de bază WP - deși acest lucru nu ar trebui să fie necesar dacă ultimii doi pași sunt făcuți corect, dar uneori există alte corupții, așa că ar putea fi un pas suplimentar de luat
- configurarea apache - asigură-te că apache este configurat corect pe serverul tău, conform nevoilor și cerințelor actuale; de exemplu, un vinovat comun pare a fi
mod_security
- verifică codul personalizat WP - adică ceea ce ai scris sau ai instalat prin plugin-uri; cunoști procedura, testează prin dezactivare și/sau trecere la tema implicită și așa mai departe
Toate elementele din listă sunt destul de bine cunoscute și documentate, așa că, dacă este necesar, vei găsi mai multe informații pe internet.
În cele din urmă, mult succes!

În fișierul wp-config.php (din directorul rădăcină al WordPress) trebuie să activezi depanarea.
Trebuie să setezi wp_debug la true.
Schimbă define('WP_DEBUG', false); în define('WP_DEBUG', true);
Salvează fișierul și reîmprospătează pagina în browser (recomand să folosești ctrl+f5).
Vei vedea toate erorile.

Sugerez să verifici jurnalul de erori al serverului web înainte de a încerca să rezolvi problema la întâmplare.
În cazul meu, am găsit următoarea eroare
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/"
Ceea ce înseamnă pur și simplu că valoarea client_max_body_size
din configurația nginx era prea mică. WordPress verifică doar upload_max_filesize
în configurația PHP, așa că WordPress permite încărcarea de fișiere mai mari decât client_max_body_size
dacă această valoare este mai mică decât upload_max_filesize
.

Am rezolvat această problemă prin creșterea post_max_size de la 8MB la 16MB
