1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

WP 6.x add_filter upload_mime

Dieses Thema im Forum "Allgemeines" wurde erstellt von n.k, 1. April 2024.

  1. n.k

    n.k Member

    Registriert seit:
    1. Januar 2024
    Beiträge:
    12
    Zustimmungen:
    0
    Moin Leute

    in einem Plugin soll der der Upload von TXT-Dateien ermöglcht werden, damit diese dann verarbeitet und in Tabellenform angezeigt bzw. als CSV zum Download bereitgestellt werden.

    Da WP per Core TXT-Files nicht zulässt, würde ich dieses gerne im Plugin erlauben.

    Hierzu gibt es ja add_filter um die Mime-Types zu verwalten.

    Leider komme ich an der Stelle nicht richtig weiter:

    wenn ich das Plugin aktiviere und im Browser anschliessend direkt auf Upload gehe, funktioniert es. Die TXT-Datei wird ins .../wp-content/uploads/... übernommen

    wenn ich den Browser aber schliesse und wieder starte und dann den Upload erneut versuche, dann funktioniert er nicht "Sorry, you are not allowed to upload this file type." **

    verstehe die Logik nicht. Prinzipiell scheint es ja zu funktionieren (nach Aktivierung vom Plugin und solange der Browser dann nicht geschlossen wird)

    wieso dann nach erneutem Browserstart dann wieder Filetype nicht erlaubt ?

    zentrale Plugin-Steuerungsdatei :

    ...

    // //actions
    add_shortcode('nkt2c', 'nkt2c_forms');
    add_filter( 'nkt2c_mimes', 'nkt2c_mime_types' );
    add_action( 'wp_enqueue_scripts', 'add_nkt2c_css' );
    add_action( 'wp_enqueue_scripts', 'add_nkt2c_js' );
    add_action( 'admin_menu', 'nkt2c_menu');

    ...

    dann in der functions-Datei vom Plugin :

    function nkt2c_mime_types( $nkt2c_mimes ) {

    // $nkt2c_mimes = array(
    // 'txt' => 'text/plain'
    // );
    // return $nkt2c_mimes;

    // First we unregister the old key
    unset( $mime_types['txt'] );

    // Then we add a new one
    ! isset( $mime_types['txt'] ) AND $mime_types['txt'] = 'text/plain';

    return $mime_types;

    }

    function add_nkt2c_css() {

    wp_register_style( 'nkt2c-css', '/wp-content/plugins/nkTxt2Csv/css/nkt2c-style.css' );
    wp_enqueue_style( 'nkt2c-css', );

    }

    function add_nkt2c_js() {
    wp_enqueue_script( 'nkt2c-js' , '/wp-content/plugins/' . NKT2C . '/js/nkt2c-script.js' );
    }

    function nkt2c_forms($atts, $content) {

    $content = do_shortcode($content);

    $nkt2c_tmp = apply_filters( 'nkt2c_mimes', 'txt' );

    $nkt2c_ret = '
    <form id="nkt2c_form_upload" class="nkt2c_form_upload" enctype="multipart/form-data" action="" method="POST">
    ';

    $nkt2c_ret .= wp_nonce_field( 'nkt2c_file_upload', 'nkt2c_fileup_nonce' );

    $nkt2c_ret .= '
    <input name="nkt2c_file_upload" type="file" />
    <input type="submit" value="Upload file" id="nkt2c_btn_upload" />
    <div id="nkt2c_src">keine Daten vorhanden</div>
    <div id="nkt2c_dst">keine Daten vorhanden</div>
    <div id="nkt2c_download"></div>
    </form>
    ';

    if( wp_verify_nonce( $_POST['nkt2c_fileup_nonce'], 'nkt2c_file_upload' ) ){

    if ( ! function_exists( 'wp_handle_upload' ) ) {
    require_once ABSPATH . 'wp-admin/includes/file.php';
    }

    $nkt2c_file = & $_FILES['nkt2c_file_upload'];

    $nkt2c_overrides = [ 'test_form' => false ];

    $nkt2c_movefile = wp_handle_upload( $nkt2c_file, $nkt2c_overrides );

    if ( $nkt2c_movefile && empty( $nkt2c_movefile['error'] ) ) {
    echo "The file was successfully uploaded.";
    //print_r( $nkt2c_movefile );
    $nkt2c_txtfile = $nkt2c_movefile["file"];
    print_r($nkt2c_txtfile);
    }
    else {
    echo $nkt2c_movefile['error'];
    }
    }

    //remove_filter('nkt2c_mimes', 'txt');

    return $nkt2c_ret;

    }
    Vielen Dank im voraus für eure Unterstützung

    VG

    Norbert
     
  2. r23

    r23 Well-Known Member

    Registriert seit:
    9. Dezember 2006
    Beiträge:
    7.353
    Zustimmungen:
    588
    Was soll das werden, wenn es fertig ist?

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    https://developer.wordpress.org/reference/functions/wp_ext2type/
    https://developer.wordpress.org/reference/hooks/upload_mimes/
    https://developer.wordpress.org/reference/functions/wp_check_filetype_and_ext/

    Maskiere php Scipte als CODE, dann sind diese etwas lesbarer und verzichte auf auskommentieren Code..
    0> das ist ein zumutung und frechheit
    f ( $nkt2c_movefile && empty( $nkt2c_movefile['error'] ) ) {
    echo "The file was successfully uploaded.";
    //print_r( $nkt2c_movefile );
    $nkt2c_txtfile = $nkt2c_movefile["file"];
    print_r($nkt2c_txtfile);
    }
    else {
    echo $nkt2c_movefile['error'];
    }
     
  3. n.k

    n.k Member

    Registriert seit:
    1. Januar 2024
    Beiträge:
    12
    Zustimmungen:
    0
    bin schon sehr über den Ton irritiert ...

    die Online Meetings sind da wesentlich freundlicher.

    davon abgesehen, habe ich das mal nach der Reference von upload_mimes angepasst

    das Verhalten ist das Gleiche:

    nach Aktivierung des Plugins funktioniert der Upload von TXT-Files
    schliesse ich den Browser und rufe die Seite wieder auf, kommt wieder der Hinweis : mime type nicht erlaubt

    in manchen Quellen findet man einen Hinweis auf die functions.php des Themes ...
    aber das wäre doch unlogisch sie darein zu packen
    grade add_filter sollte doch von überall lt. Doku aufrufbar sein ...

    wo ist mein Denkfehler ?
     
    #3 n.k, 1. April 2024
    Zuletzt bearbeitet: 1. April 2024
  4. threadi

    threadi Well-Known Member

    Registriert seit:
    9. Oktober 2020
    Beiträge:
    2.007
    Zustimmungen:
    402
    Die Berechtigung für den Dateityp musst Du über https://developer.wordpress.org/reference/hooks/upload_mimes/ setzen. Den Hook verwendest Du aber gar nicht. Stattdessen baust du dir deinen eigenen (mit "nkt2c_mimes") der aber für die Speicherung durch WordPress keinerlei Bedeutung hat.

    Du solltest vor wp_handle_upload() diesen Hook ergänzen um Textdateien zuzulassen.
     
  5. n.k

    n.k Member

    Registriert seit:
    1. Januar 2024
    Beiträge:
    12
    Zustimmungen:
    0
    Moin

    danke für Deine Rückmeldung und den Link.
    Den hatte ich auch schon gesehen.
    habe auch neben dem Wordpress Plugin Buch von F. Simeth weitere Bücher zum Thema Plugins mit Wordpress hier liegen
    und bin die durchgegangen

    habe jetzt folgenden Code:

    Startdatei Plugin

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    nach meinem Verständnis wird mit add_filter erstmal nur die Function in WP registriert (bekannt gegeben)

    in der Functions-Datei ist u.a. dann folgendes :

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    damit das nun aber getriggert wird müsste ich vor wp_handle_upload einfügen ?

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    weil mit apply_filters die Funktion ausgeführt wird,
    so mein Verständnis der Bücher und Beschreibungen

    sicherlich mache ich noch irgendwo einen Denkfehler ... ?
    die Parameter $t und $user müssen sicherlich mit entsprechenden Werten gesetzt werden aber welchen machen hier Sinn ?
     
    #5 n.k, 1. April 2024
    Zuletzt bearbeitet: 1. April 2024
  6. threadi

    threadi Well-Known Member

    Registriert seit:
    9. Oktober 2020
    Beiträge:
    2.007
    Zustimmungen:
    402
    Nein, die apply_filters() brauchst Du nicht. Der Hook upload_mimes wird innerhalb der Upload-Speicherung von WordPress ausgeführt. Das übernimmt der Core schon für dich. Deine restlichen Angaben sollten schon passen.
     
  7. n.k

    n.k Member

    Registriert seit:
    1. Januar 2024
    Beiträge:
    12
    Zustimmungen:
    0
    apply_filters aus dem Code gelöscht

    die Funktion für den Shortcode sieht so aus:

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    ergänzend sei noch erwähnt:
    in der wp-config.php ist folgende Zeile eingefügt:
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Ergebnis: alles wie gehabt, mime-type nicht erlaubt, es funktioniert nicht

    habe mal das Plugin als ZIP beigefügt,
    lt. habt ihr das Gleiche Phänomen oder noch einen Tipp ...

    VG
    Norbert
     

    Anhänge:

  8. threadi

    threadi Well-Known Member

    Registriert seit:
    9. Oktober 2020
    Beiträge:
    2.007
    Zustimmungen:
    402
    Ich lade mir keine ZIPs aus fremden Quellen runter. Wenn Du das Plugin komplett zeigen willst, lade es bei github oder einem anderen Tool hoch.

    Deinen bisherigen Code kann ich bei mir jedoch ausführen und auch eine txt-Datei darüber hochladen. Probleme gibt es an anderen Stellen. Z.B. prüfst Du gar nicht, ob die Daten per POST abgeschickt wurden - du verarbeitest sie direkt. Das führt im aktivieren WordPress-Debug-Modus sofort zu einer entsprechenden Fehlermeldung.

    Übrigens sind txt-Dateien bereits in WordPress zugelassen. Sie stehen in der Mime-Liste als

    Siehe: https://github.com/WordPress/WordPress/blob/3fa06d8fbd127b16af6e031bd9d0848d3078ad1c/wp-includes/functions.php#L3432

    Ich habe das in einem WordPress ohne jegliche Plugins getestet. Wenn das bei dir weiterhin scheitert, könnte es an anderen Plugins oder individuellen Anpassungen liegen.
     
  9. n.k

    n.k Member

    Registriert seit:
    1. Januar 2024
    Beiträge:
    12
    Zustimmungen:
    0
    ok, danke für die Infos
    deaktiviere mal die anderen Plugins und auch den Mime-Code
     
  10. n.k

    n.k Member

    Registriert seit:
    1. Januar 2024
    Beiträge:
    12
    Zustimmungen:
    0
    hab's gelöst:

    wp_upload_handler ist eigentlich nur fürs System gedacht und kann auch nur mit angemeldeten Admin-User ausgeführt werden

    für das Frontend eignet sich
    wp_upload_bits ()

    habe das damit nun umgesetzt und läuft einwandfrei
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden