Download mittels readfile() funktioniert nicht zuverlässig

  • 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.

    [PLAIN] 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;[/PLAIN]

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

    [PLAIN]Warning: Cannot modify header information - headers already sent by ...[/PLAIN]

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

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • 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.

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • 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.

    Mühsam ernährt sich das (Nichtinformatiker-)Eichhörnchen.

  • 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 [FONT=Courier New]init[/FONT] oder [FONT=Courier New]wp_loaded[/FONT] o.ä. Action, mehr zur Abfolge von Actions in WordPress siehe auch hier.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!