webentwicklung-frage-antwort-db.com.de

Hochgeladene Bilder mit den integrierten Funktionen von WordPress validieren?

Ich habe ein Formular, mit dem Benutzer ein Bild hochladen können. Ich verwende den folgenden Code (der derzeit nicht funktioniert), um sicherzustellen, dass das, was ein Benutzer hochlädt, gültig ist.

Kann mir jemand helfen und entweder meinen Code aktualisieren oder mich in die richtige Richtung lenken, wie ich so viele der integrierten WordPress-Funktionen (wp_check_filetype_and_ext ()) oder alles andere verwenden kann, was gut geeignet wäre, um damit umzugehen die Validierung wie möglich? Es muss auch sicher sein, um schädliche Dateien, Angriffe usw. zu verhindern.

if ( $_FILES ) {
  foreach ($_FILES as $file => $array) {
    //Check if the $_FILES is set and if the size is > 0 (if =0 it's empty)
    if ( isset( $_FILES[$file]) && ($_FILES[$file]['size'] > 0 ) ) {
      $tmpName = $_FILES[$file]['tmp_name'];
      list($width, $height, $type, $attr) = @getimagesize($tmpName);

      if ($width != 500 || $height != 500) {
        $error .= "Image is to small<br />";
        unlink($_FILES[$file]['tmp_name']);
      }

      // Get the type of the uploaded file. This is returned as "type/extension"
      $arr_file_type = wp_check_filetype(basename($_FILES[$file]['name']));
      $uploaded_file_type = $arr_file_type['type'];

      // Set an array containing a list of acceptable formats
      $allowed_file_types = array('image/jpg','image/jpeg','image/gif','image/png');

      // If the uploaded file is the right format
      if (in_array($uploaded_file_type, $allowed_file_types)) {
      } else { // wrong file type
        $error .= "Please upload a JPG, GIF, or PNG file<br />";
      }
    }
  }
}
1
user1462

Der gesamte Code in Ihrer Frage kann ersetzt werden durch:

require_once( ABSPATH . 'wp-admin/includes/image.php' );
require_once( ABSPATH . 'wp-admin/includes/file.php' );
require_once( ABSPATH . 'wp-admin/includes/media.php' );
if ( $_FILES ) {
  foreach ($_FILES as $file => $array) {
    $image_post_id = media_handler_upload( $file );
    if ( is_wp_error( $image_post_id ) ) {
      $error .= $image_post_id->get_error_message();
    } else {
      // $image_post_id now holds the post ID of an attachment that is your uploaded file
    }
  }
}

Die Macht von media_handle_upload bedeutet, dass Sie jetzt Ihre Sicherheit, Überprüfung und das Hochladen auf WordPress Core vollständig ausgelagert haben. media_handle_upload wird lange nach Abschluss Ihres Projekts von Personen, die weitaus schlauer als wir sind, und anderen Personen, die ein berechtigtes Interesse daran haben, WordPress sicher zu halten, beibehalten.

media_handle_upload führt alle Überprüfungen durch, die Sie beim Hochladen von Dingen über das Dashboard erhalten, und erstellt Anhangposts, um diese hochgeladenen Dateien in der Datenbank darzustellen. Darüber hinaus werden die Erstellung unterschiedlicher Bildgrößen sowie die Kompatibilität mit Plug-ins behandelt und die im Dashboard angegebenen Sicherheitseinstellungen eingehalten.

Bei Erfolg wird die ID des erstellten Anhangposts zurückgegeben. Wenn dies nicht erfolgreich ist, wird ein WP_Error-Objekt mit einer Fehlermeldung zurückgegeben.

Sie können dann wp_get_attachment_url verwenden, wenn Sie die vollständige URL des Anhangs benötigen, oder wp_get_attachment_image_src , wenn Sie eine bestimmte Größe für das Bild benötigen, z.

$image = wp_get_attachment_image_src( $image_post_id, 'thumbnail' );
if ( $image != false ) {
    echo $image[0];
}
3
Tom J Nowell