Skip to content

WordPress - SVG-Dateien werden seit dem letzten WP-Update nicht hochgeladen

Nach unserer langen Zusammenstellung von Daten konnten wir diesen Zweifel ausräumen, den bestimmte Leser normalerweise haben. Wir bieten Ihnen die Lösung und unser Ziel ist es, Ihnen als große Unterstützung zu dienen.

Lösung:

In WordPress 4.7.1 wurde eine Änderung eingeführt, die den tatsächlichen Mime-Typ einer hochgeladenen Datei überprüft. Dadurch werden Dateitypen wie SVG oder DOCX nicht mehr hochgeladen. Es gibt bereits Tickets für dieses Problem in WordPress Core, wo man mehr darüber lesen kann:

  • Einige Nicht-Bild-Dateien können nach 4.7.1 nicht mehr hochgeladen werden (https://core.trac.wordpress.org/ticket/39550)
  • SVG-Upload-Unterstützung in 4.7.1 gebrochen (https://core.trac.wordpress.org/ticket/39552)

A vorübergehend und empfohlene Abhilfe (für die Zeit, bis dieses Problem behoben ist) ist das folgende Plugin:
Real MIME Check deaktivieren

Wenn Sie dieses Plugin nicht verwenden möchten, finden Sie hier die gleiche Funktionalität:

add_filter( 'wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
    global $wp_version;

    if ( '4.7.2' !== $wp_version ) {
       return $data;
    }

    $filetype = wp_check_filetype( $filename, $mimes );

    return [
        'ext'             => $filetype['ext'],
        'type'            => $filetype['type'],
        'proper_filename' => $data['proper_filename']
    ];

}, 10, 4 );

Beachten Sie, dass dieser Ausschnitt eine Versionsprüfung enthält, um die Korrektur zu deaktivieren, sobald WordPress aktualisiert wird.

bearbeiten.

Das Problem sollte ursprünglich in 4.7.2 behoben werden. Da es sich bei 4.7.2 aber um eine dringende Sicherheitsversion handelte, wurde der Fix nicht in diese Version übernommen. Es soll nun in 4.7.3 behoben werden.

Es sieht so aus, als ob dies mit diesem Ticket https://core.trac.wordpress.org/ticket/39552 zusammenhängen könnte, es sieht so aus, als ob etwas in 4.7.1 kaputt gegangen ist.

Niemand scheint nur mit dem zu arbeiten, was ist, und das ist schade, also habe ich es so gemacht...

Geschichte / Hintergrund

Ich habe 2015 einen SVG-Uploader erstellt, basierend auf einem CSS-Tricks-Artikel, der sich mit dem beschäftigte, was war. Ich habe auch das Raster für die Bildvorschau zum Laufen gebracht und ein paar andere Korrekturen vorgenommen. Einfaches Plugin (IMO sollten Plugins für Dateitypen einfach sein)

Lösung .

Es gab ein paar Änderungen für 4.7. Die wirkliche PITA war, dass für image/ Mime-Typen verwendet WP jetzt GD für die Bilder. Um dies zu umgehen, setzte ich die svg Erweiterung auf die Verwendung von application/svg+xml gesetzt, damit GD die Datei nicht durcheinanderbringt.

Aktualisieren: Ab 4.7.2 hat irgendein kluger Kopf auch das in manchen Fällen kaputt gemacht.

Später haben wir es dann per Hook zurückgeschaltet auf image/svg+xml. Es ist das Gleiche wie in anderen Antworten, aber wir sperren es zunächst auf unseren speziellen Fall, um Effekte zu eliminieren (ist es eine SVG-Datei); wir können uns auf das Lesen von $data['ext'] (sollte billiger sein als die Funktion zum Abrufen von Dateiinformationen, da nur ein Vergleich und ein Array/Hash-Zugriff erforderlich sind).

Aktualisieren: ab 4.7.2 $data['ext'] ist nicht immer gesetzt, daher extrahieren wir jetzt, wenn die Länge <1>ist, die (potentiell unsichere) Erweiterung aus dem Dateinamen mit
strtolower(end(explode('.', $filename))). Der Grund, warum ich wirklich gegen die Verwendung von FileInfo kämpfe, ist, dass es im Grunde zu undurchsichtig ist, sich auf eine PHP-Erweiterung zu verlassen, und dass es nicht immer für jeden funktioniert (insbesondere nicht für diejenigen, die ohne Kompilierung oder ohne Zugriff auf die Aktivierung von Erweiterungen arbeiten, wenn diese nicht vorhanden sind). Ich hätte gerne etwas, das anstelle einer Erweiterung funktioniert. Es geht nicht mehr darum, die richtigen Informationen zu haben, also für diejenigen, die auf die Ausgabe von FileInfo vertrauen und die Erweiterung haben (ich glaube, es ist Standard in 5.6+), sollte es funktionieren. Da es sich um ein Plugin handelt, das den Kern nicht verändert, können Sie diesen Code deaktivieren oder die Registrierung des Hooks aufheben.

https://github.com/Lewiscowles1986/WordPressSVGPlugin

Siehe

  • https://github.com/Lewiscowles1986/WordPressSVGPlugin/blob/master/wp-content/plugins/lc-wp-svg/index.php#L38
  • https://github.com/Lewiscowles1986/WordPressSVGPlugin/blob/master/wp-content/plugins/lc-wp-svg/index.php#L74
  • https://github.com/Lewiscowles1986/WordPressSVGPlugin/blob/master/wp-content/plugins/lc-wp-svg/index.php#L23
  • https://github.com/Lewiscowles1986/WordPressSVGPlugin/blob/master/wp-content/plugins/lc-wp-svg/index.php#L79

Andere Umgehungsmöglichkeiten

Ungefilterte Uploads zuzulassen ist eine schreckliche Lösung, weil, wie andere in diesem Thread gesagt haben, die Leute php-Dateien über den Media Uploader hochladen könnten (das ist schlecht und wenn man es tut, sollte man innehalten und nachdenken!)

Erzwingen Sie jede Datei durch jede Funktion ohne Prüfungen (Ironischerweise, wenn Sie haben image/ im Mime-Typ hat, kann man nicht einfach eine einfache ext-Prüfung durchführen). Dies hat das Potenzial, weitreichende Auswirkungen zu schaffen, um ein relativ Nischenproblem zu lösen und führt insgesamt mehr Arbeit ein (caveat mein Plugin führt auch mehr Arbeit für Admin-Benutzer ein, um Admin Media UI zum Laufen zu bringen)

Wenn wir das Mime als application/svg+xml belassen und einfach die Mime-Typen filtern würden, würde das Bild zwar hochgeladen werden, aber AFAIK würde es Korrekturen erfordern, um als Featured Image etc. verwendet zu werden. Es muss noch mehr getan werden, um eine universelle SVG-Erfahrung zu gewährleisten, daher habe ich mich entschieden, die Schlachten sorgfältig zu wählen.

Hoffentlich hilft das.

Sie können unsere Informationen aufwerten, indem Sie Ihr Dienstalter bei Interpretationen angeben.


Tags : /

Nutzen Sie unsere Suchmaschine

Suche
Generic filters

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.