Hallo onmediatv, ich habe hier den gleichen Effekt, eine Erklärung und einen Workaround
Mein System:
Ubuntu, Apache2.4.7, PHP5.5.9, WP4.0.1 Neuinstallation (die beiden einzigen Plugins 'Akismet' und 'Hello Dolly' deaktiviert).
- Nach dem Hochladen werden 4 Bilder in unterschiedlicher Größen abgelegt (Schreibrechte für user "www-data" also Ok)
- In der Preview wird versucht, das Vorschaubild per AJAX nachzuladen.
- Da PHP imagick aktiv ist, landet der call in "class-wp-image-editor-imagick.php" wo der MIME-Type und der JPEG-File-Content ausgegeben werden.
- Das File auf der Server-Platte ist da schon richtig abgespeichert.
- Im PHP output-Buffer stehen da allerdings schon 3-Byte (utf8 BOM: EF BB BF) drin.
- Der Header und das JPG-Binary werden angefügt, der Client kann mit den führenden 3 Byte nichts anfangen und gibt das Bild nicht aus.
Als Workaround analog zu:
https://wordpress.org/support/topic/…-header-problem
ist im File class-wp-image-editor-imagick.php in der letzten Funktion ganz unten der Output-Buffer zu löschen:
public function stream( $mime_type = null ) {
list( $filename, $extension, $mime_type ) = $this->get_output_format( null, $mime_type );
try {
// Temporarily change format for stream
$this->image->setImageFormat( strtoupper( $extension ) );
//-----------------------------------------------------------------------------
// quick hack to empty the output buffer if anyone has already send bytes to it
while (@ob_end_clean());
//-----------------------------------------------------------------------------
// Output stream of image content
header( "Content-Type: $mime_type" );
print $this->image->getImageBlob();
// Reset Image to original Format
$this->image->setImageFormat( $this->get_extension( $this->mime_type ) );
}
catch ( Exception $e ) {
return new WP_Error( 'image_stream_error', $e->getMessage() );
}
return true;
}
}
Alles anzeigen
Die eigentliche Ursache zu finden überlasse ich den Experten ;)