it-swarm.com.de

Maximale Beschränkung der Upload-Größe für Höhe und Breite des Bildes

Die Clients haben riesige Bilder hochgeladen und sich dann beschwert, dass auf dem Server nicht mehr genügend Arbeitsspeicher vorhanden ist.

Natürlich könnte man die Menge des Gedächtnisses erhöhen, aber dies führt nur zu einem Wettrüsten.

Welche Haken kann ich hinzufügen, um eine maximale Bildgröße (Abmessungen, nicht Dateigröße) für hochgeladene Dateien festzulegen, z. Nein, Sie können diese 8-Megapixel-Aufnahme nicht hochladen. Ändern Sie die Größe zuerst auf <2 Megapixel.

Um es klar auszudrücken, ich spreche von Bildgröße, nicht Dateigröße, aka Bildhöhe und Bildbreite

3
Tom J Nowell

Grundsätzlich rufen Sie die Informationen einfach über getimagesize() ab, eine grundlegende PHP -Funktion, und behandeln dann Ihre Fehler mit Notizen.

Das Plugin

Ein einfaches Plugin als Ausgangspunkt:

<?php
/** Plugin Name: (#67107) »kaiser« Restrict file upload via image dimensions */

function wpse67107_restrict_upload( $file )
{
    $file_data = getimagesize( $file );
    // Handle cases where we can't get any info:
    if ( ! $file_data )
        return $file;

    list( $width, $height, $type, $hwstring, $mime, $rgb_r_cmyk, $bit ) = $file_data;

    // Add conditions when to abort
    if ( 3200728 < $width * $height )
    {
        // I added 100k as sometimes, there are more rows/columns 
        // than visible pixels, depending on the format
        $file['error'] = 'This image is too large, resize it prior to uploading, ideally below 3.2MP or 2048x1536 px.';
    }

    return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'wpse67107_restrict_upload' );
6
kaiser

Hier ist meine Meinung dazu

<?php
/**
 * Plugin Name: Deny Giant Image Uploads
 * Description: Prevents Uploads of images greater than 3.2MP
 */

function tomjn_deny_giant_images($file){
    $type = explode('/',$file['type']);

    if($type[0] == 'image'){
        list( $width, $height, $imagetype, $hwstring, $mime, $rgb_r_cmyk, $bit ) = getimagesize( $file['tmp_name'] );
        if($width * $height > 3200728){ // I added 100,000 as sometimes there are more rows/columns than visible pixels depending on the format
            $file['error'] = 'This image is too large, resize it prior to uploading, ideally below 3.2MP or 2048x1536';
        }
    }
    return $file;
}
add_filter('wp_handle_upload_prefilter','tomjn_deny_giant_images');
2
Tom J Nowell

Ich verstehe, dass Sie Uploads basierend auf Image Dimension nur ablehnen müssen. Aber ich möchte nur eine Anmerkung hinzufügen, dies wird Ihren Server nicht daran hindern, nicht genügend Speicher zu bekommen. Image dimensions ist verfügbar, sobald die Daten vollständig auf den Server hochgeladen wurden (wie Apache) und daher der Serverspeicher belegt ist.

Sie sollten in Betracht ziehen, die Upload-Größe auf Apache- und PHP -Ebene zu beschränken. Wenn Sie möchten, können Sie sie auch auf Wordpress-Ebene für Image Dimension beschränken. So legen Sie die maximale Upload-Größe in Apache fest:

<Directory "/var/www/wordpress-site/wp-uploads">
    LimitRequestBody 10485760
</Directory>

In der php.ini setze:

memory_limit = 64M
upload_max_filesize = 10M
post_max_size = 20M
0
Ravi Kumar