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

Download mittels readfile() funktioniert nicht zuverlässig

Dieses Thema im Forum "Plugins und Widgets" wurde erstellt von ASenna, 26. November 2020.

  1. ASenna

    ASenna Well-Known Member

    Registriert seit:
    20. Januar 2017
    Beiträge:
    133
    Zustimmungen:
    0
    Ich habe ein problem auf der Schnittstelle zwischen WordPress und PHP. Und ich denke inzwischen, dass WordPress der "Schuldige" ist. Ich habe ein PHP-Skript, dass (nach Kennworteingabe) einen Download anbietet.

    header('Content-Description: File Transfer');
    header('Content-Type: ' . $mimetype);
    header('Content-Disposition: attachment; filename="' . basename($downloaddatei) . '"');
    //header('Expires: 0');
    //header('Cache-Control: must-revalidate');
    //header('Pragma: public');
    //header('Content-Length: ' . filesize($ordner . $downloaddatei));
    /*while (ob_get_level()) {
    ob_end_clean();
    ob_clean();
    flush();
    } */
    readfile($ordner . $downloaddatei);
    exit;

    Das aber funktioniert nicht zuverlässig. Je nachdem, wie ich mit dem Löschen des Buffers vorgehe kommt der Hinweis

    Warning: Cannot modify header information - headers already sent by ...

    Was schickt das WP vorher raus? Kann mir da jemand helfen, wo ich genauer nachsuchen muss?
     
  2. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.636
    Zustimmungen:
    1.778
    Kommt darauf an wann/wo/wie genau der genannte Code aufgerufen wird. Diese Information fehlt leider.
     
  3. ASenna

    ASenna Well-Known Member

    Registriert seit:
    20. Januar 2017
    Beiträge:
    133
    Zustimmungen:
    0
    Stimmt. Es läuft über <form action="https://www.example.com/download" method="get"> und dann einem Input-Befehl. Der action-Wert verweist auf eine Seite, auf der nur ein Shortcode steht, der das oben im Auszug wiedergegebene PHP-Skript startet. In dem Skript selber gibt es keine echo- oder return-Anweisungen.
    Ich vermute mal, dass bereits mit dem Aufruf der Download-Seite ein header übergeben wird, obwohl der Browser auf der Ausgangsseite verbleibt.
     
  4. ASenna

    ASenna Well-Known Member

    Registriert seit:
    20. Januar 2017
    Beiträge:
    133
    Zustimmungen:
    0
    Sollte das Kennwort falsch sein, wird über dieses Shortcode und eine Return-Anweisung eine Fehlermeldung auf der Download-Seite ausgegeben. Ist das Kennwort, geht das PHP-Skript in den Part mit readfile(), allerdings mit der benannten Fehlermeldung. Experimentiert man mit den Buffer udn löscht ihn, flused ihr etc., verschwindet wzar der Hinweis auf den bereits gesendeten Header, allerdings erscheint die herunterzuladende Datei dann im Browser, wird also auf den Bildschirm geschickt. Ein Download erfolgt aber nicht.
     
  5. b3317133

    b3317133 Well-Known Member

    Registriert seit:
    21. November 2014
    Beiträge:
    11.636
    Zustimmungen:
    1.778
    In einem Shortcode läuft der Code zu spät, Cookies und alle WordPress Header für die Seite sind dann schon gesendet, versuche es in einer init oder wp_loaded o.ä. Action, mehr zur Abfolge von Actions in WordPress siehe auch hier.
     
  6. ASenna

    ASenna Well-Known Member

    Registriert seit:
    20. Januar 2017
    Beiträge:
    133
    Zustimmungen:
    0
    Danke für den Hinweis, ich arbeite mich da mal ein.
     
  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