snoot: Mit PHP gezippte Downloads funktionieren nicht in DL-Manager

Hi,

auf meiner Seite gibt's mehrere PDF-Dateien zum Download; mit Checkboxen kann man auswählen, welche PDFs man haben möchte. Die Dateien werden dann beim Abschicken des Formulars automatisch gezippt und zum Download angeboten.

Wenn man das ganze direkt im Browser macht - ohne Downloadmanager - dann funktioniert das auch problemlos. Hat man jedoch ein entsprechendes Programm, das Downloads abfängt (bspw. GetRight), dann kann dieses Programm die Zip-Datei nicht runterladen sondern läd eine INDEX.HTM runter. Das ist dann einfach die Downloadseite als Htm-Datei.

Kann man das irgendwie ändern? Hier mal das Script, was bemi Abschicken des Formular aufgerufen wird:

  
<?php  
  
  $datei = $_POST['datei'];  
  
  ##Zip-Script  
  
  // Startet den Buffer, sodass keine Header-Fehlermeldungen entstehen.  
  ob_start();  
  
  // Läd die Zip-Library  
  require("zip.lib.php"); ## http://www.halbleiter.org/zip.lib.php.txt  
  
  // Erstellt eine neue Zipdatei  
  $zipfile = new zipfile("dateiname.zip");  
  $zipfile->addFileAndRead($datei);  
  
  // Gibt die Zip-Datei aus.  
  echo $zipfile->file();  
  
?>  

Liegt das daran, dass die Datei einfach mit echo zurückgegeben wird? Evtl. könnte man auch einfach einen Link zu dieser Datei auf einer Seite ausgeben?

  1. Grüße,

    Liegt das daran, dass die Datei einfach mit echo zurückgegeben wird? Evtl. könnte man auch einfach einen Link zu dieser Datei auf einer Seite ausgeben?

    ja, ja

    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
  2. Hi,

    Wenn man das ganze direkt im Browser macht - ohne Downloadmanager - dann funktioniert das auch problemlos. Hat man jedoch ein entsprechendes Programm, das Downloads abfängt (bspw. GetRight), dann kann dieses Programm die Zip-Datei nicht runterladen sondern läd eine INDEX.HTM runter. Das ist dann einfach die Downloadseite als Htm-Datei.

    Dann müsstest du mal analysieren, in wie fern sich der Request, der "wenn man das ganze direkt im Browser macht" deinen Server erreicht, und der, der bei Nutzung eines Download-Managers hereinkommt, unterscheiden.

    
    > <?php  
    >   
    >   $datei = $_POST['datei'];
    
    

    Nutzt der Downloadmanager überhaupt POST zum Abruf der Ressource?
    Übergibt er dabei auch einen Parameter namens datei mit dem gewünschten Inhalt?

    Das wären die ersten beiden Dinge, die ich hinsichtlich des Problems untersuchen würde.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Nutzt der Downloadmanager überhaupt POST zum Abruf der Ressource?
      Übergibt er dabei auch einen Parameter namens datei mit dem gewünschten Inhalt?

      Wie kann ich das denn überprüfen?

      1. Hi,

        Nutzt der Downloadmanager überhaupt POST zum Abruf der Ressource?
        Übergibt er dabei auch einen Parameter namens datei mit dem gewünschten Inhalt?

        Wie kann ich das denn überprüfen?

        Durch ein paar simple Debugausgaben. (Die Inhalte von $_SERVER['REQUEST_METHOD'] und $_POST['datei'] wären da erst mal am interessantesten.)

        Solltest du die nicht direkt sehen können in dem, was der Downloadmanager abspeichert - dann schreibe sie vom Script aus in eine Datei auf dem Server, und kontrolliere anschliessend deren Inhalt.

        error_reporting auf E_ALL sollte ja wohl selbstverständlich sein; ggf. dessen Ausgaben auch noch per error_log-Direktive in der PHP-Konfiguration in eine Datei schreiben lassen.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.