it-swarm.com.de

Bildauflösung beim Hochladen begrenzen

Ich habe ein Problem, bei dem ein besonders großes Image dazu führt, dass mein VPS-Server aufgrund von Speicherproblemen neu gestartet wird. Die Konfiguration liegt nicht in meiner Hand, sie ist sozusagen ausfallsicher für den Host.

Ich habe einen VPS mit 300 MB Speicher, der meiner Meinung nach für meine WordPress-Installation ausreicht, zumindest für den täglichen Betrieb.

Das Bild, das ich hochlade, ist nicht besonders groß (~ 380 KB) und meistens schwarz mit weißen Buchstaben. Die Auflösung ist jedoch 4583 * 4583. Wenn ich es über WordPress hochlade, wird im Upload-Fenster ein HTTP-Fehler angezeigt, und wenn ich die Live-Site überprüfe, ist sie einige Minuten lang inaktiv.

Ich habe mich gefragt, ob es möglich ist, eine Bildauflösung zu erkennen und das Hochladen zu verhindern. Ich bin klug genug, um ein bisschen in einem Bildprozessor herumzuspielen, aber einige meiner Autoren sind möglicherweise nicht geschickt genug, um das Bild zu verarbeiten, bevor sie etwas so Großes wie dieses hochladen.

Es wäre sogar noch besser, wenn die Beschränkung auf den Bild-Bit pro Pixel basieren könnte, aber ich habe keine Ahnung, wie hoch die Beschränkung für meinen Server ist. Ich schätze, eine Fehlermeldung besagt, dass das Bild nicht hochgeladen werden kann, weil es größer ist als sagen wir 2000 * 2000 ist genug.

5
Marc Dingena

Das Problem ist nicht so sehr das Hochladen selbst, sondern eine Netzwerkverbindung zwischen dem Client und dem Server. Es ist nicht das, was den Speicher des Servers auffrisst.

Wenn WordPress mit dem 'Crunchen' der Bilder beginnt, kommt PHP ins Spiel und fängt an, die Größe der hochgeladenen Bilder zu ändern und sie zu beschneiden. Vor diesem Moment müssen Sie einige Überprüfungen durchführen, bevor Sie PHP zulassen, dass Ihr Gedächtnis aufgebraucht wird.

Mit dem wp_handle_upload_prefilter -Filter können Sie eine Funktion einbinden, die eine beliebige Prüfung für das Image ausführt, das kurz vor dem Knacken steht:

<?php 
/* Marc Dingena Utilities
 * Test image resolution before image crunch
 */
add_filter('wp_handle_upload_prefilter','mdu_validate_image_size');
function mdu_validate_image_size( $file ) {
    $image = getimagesize($file['tmp_name']);
    $minimum = array(
        'width' => '400',
        'height' => '400'
    );
    $maximum = array(
        'width' => '2000',
        'height' => '2000'
    );
    $image_width = $image[0];
    $image_height = $image[1];

    $too_small = "Image dimensions are too small. Minimum size is {$minimum['width']} by {$minimum['height']} pixels. Uploaded image is $image_width by $image_height pixels.";
    $too_large = "Image dimensions are too large. Maximum size is {$maximum['width']} by {$maximum['height']} pixels. Uploaded image is $image_width by $image_height pixels.";

    if ( $image_width < $minimum['width'] || $image_height < $minimum['height'] ) {
        // add in the field 'error' of the $file array the message 
        $file['error'] = $too_small; 
        return $file;
    }
    elseif ( $image_width > $maximum['width'] || $image_height > $maximum['height'] ) {
        //add in the field 'error' of the $file array the message
        $file['error'] = $too_large; 
        return $file;
    }
    else
        return $file;
}
?>
10
Marc Dingena

Versuchen Sie für ein Plugin http://wordpress.org/plugins/imsanity/ , und verhindern Sie so, dass andere Website-Benutzer zu große Bilder hochladen.

Imsanity verkleinert riesige Bild-Uploads automatisch auf eine Größe, die für die Anzeige im Browser angemessener ist, aber für die typische Website-Nutzung immer noch mehr als ausreichend ist. Das Plugin ist konfigurierbar mit einer maximalen Breite, Höhe und Qualität. Wenn ein Mitwirkender ein Bild hochlädt, das größer als die konfigurierte Größe ist, wird es von Imsanity automatisch auf die konfigurierte Größe verkleinert und das Originalbild ersetzt.

2
markratledge

Möglicherweise verfügt Ihr Server über genügend Arbeitsspeicher, um die Aufgabe auszuführen, aber die Einstellung für das Speicherlimit PHP ist einfach zu niedrig, um sehr große Bilder konvertieren zu können.

Versuchen Sie, memory_limit in der php.ini höher einzustellen.

memory_limit=256M

* Hinweis: In einigen Hosting-Umgebungen ist dies möglicherweise keine geeignete Lösung.

0
squarecandy