Noadsplease: Die Internetseite konnte nicht geöffnet werden

Hallo,

ich habe ein Problem mit einem Downloadskript.

Auf meiner Homepage liegen Attachments in einem Verzeichnis. Diese Attachments sind wiederum in der MySQL-Datenbank eingetragen. Damit man diese herunterladen kann, wird eine PHP-Datei verwendet, die über eine solche URL aufgerufen wird:

http://meinedomain.de/dl.php?id=3

Mit dem Firefox funktioniert das ganz prima, nur der Internetexplorer verweigert den Download mit der Meldung:

"dl.php?id=3 von meinedomain.de kann nicht übertragen werden.

Die Internetseite konnte nicht geöffnet werden. Sie ist entweder nicht verfügbar oder konnte nicht gefunden werden. Versuchen Sie es später erneut."

Der Code der Datei dl.php lautet wie folgt:

<?php  
ob_start();  
$er = error_reporting(0); # some ppl have warnings on  
if ($_SERVER["ConfigFile"] && is_file($_SERVER["ConfigFile"])) {  
  print '<!-- using '.$_SERVER["ConfigFile"].'-->'."\n";  
  include $_SERVER["ConfigFile"];  
} elseif ($_ENV["CONFIG"] && is_file($_ENV["CONFIG"])) {  
  print '<!-- using '.$_ENV["CONFIG"].'-->'."\n";  
  include $_ENV["CONFIG"];  
} elseif (is_file("config/config.php")) {  
  print '<!-- using config/config.php -->'."\n";  
  include "config/config.php";  
} else {  
  print "Error, cannot find config file\n";  
  exit;  
}  
error_reporting($er);  
require_once dirname(__FILE__).'/admin/init.php';  
require_once dirname(__FILE__).'/admin/'.$GLOBALS["database_module"];  
require_once dirname(__FILE__)."/texts/english.inc";  
include_once dirname(__FILE__)."/texts/".$GLOBALS["language_module"];  
require_once dirname(__FILE__)."/admin/defaultconfig.inc";  
require_once dirname(__FILE__).'/admin/connect.php';  
include_once dirname(__FILE__)."/admin/languages.php";  
  
$id = sprintf('%d',$_GET["id"]);  
  
$data = Sql_Fetch_Row_Query("select filename,mimetype,remotefile,description,size from {$tables["attachment"]} where id = $id");  
if (is_file($attachment_repository. "/".$data[0])) {  
  $file = $attachment_repository. "/".$data[0];  
} elseif (is_file($data[2]) && filesize($data[2])) {  
  $file = $data[2];  
} else {  
  $file = "";  
}  
  
if ($file && is_file($file)) {  
  ob_end_clean();  
  if ($data[1]) {  
    header("Content-type: $data[1]");  
  } else {  
    header("Content-type: application/octetstream");  
  }  
  
  list($fname,$ext) = explode(".",basename($data[2]));  
  header ('Content-Disposition: attachment; filename="'.basename($data[2]).'"');  
  if ($data[4])  
    $size = $data[4];  
  else  
    $size = filesize($file);  
  
  if ($size) {  
    header ("Content-Length: " . $size);  
    $fsize = $size;  
  }  
  else  
    $fsize = 4096;  
  $fp = fopen($file,"r");  
  while ($buffer = fread($fp,$fsize)) {  
    print $buffer;  
  flush();  
  }  
  fclose ($fp);  
  exit;  
} else {  
  FileNotFound();  
}  
?>

Ich würde mich freuen, wenn mal jemand drüberschauen und mir vielleicht sagen könnte, wo das Problem liegt. Vor allem verstehe ich nicht, warum nur der Internet Explorer damit ein Problem hat.

Vielen Dank,

Na

  1. Hallo,

    verweise bitte auf das entsprechende Script, damit man sich die HTTP-Header, die tatsächlich gesendet werden, ansehen kann. Aus dem Quellcode, außer daß neun Dateiaufrufe für ein simples Ausliefern einer Resource bei diesem Script benötigt werden, ergeben sich ersteinmal keine Anhaltspunkte für die Fehlschläge.

    Gruß aus Berlin!
    eddi

    1. Hallo,

      verweise bitte auf das entsprechende Script, damit man sich die HTTP-Header, die tatsächlich gesendet werden, ansehen kann. Aus dem Quellcode, außer daß neun Dateiaufrufe für ein simples Ausliefern einer Resource bei diesem Script benötigt werden, ergeben sich ersteinmal keine Anhaltspunkte für die Fehlschläge.

      Vielen Dank für Deine Antwort, hier ist die Script-URL:

      [url]http://dialogik-expert.de/de/list/dl.php?id=8[/url]

      Grüße,

      Na

      1. Hi,

        Vielen Dank für Deine Antwort, hier ist die Script-URL:
        http://dialogik-expert.de/de/list/dl.php?id=8

        Na dann ...
        Erster Versuch mit dem IE (aus Gewohnheit):
        Der Internet Explorer fragt mich, ob ich die Datei speichern möchte. Nachdem ich das bejaht und das Zielverzeichnis bestätigt habe, sagt er mir, die Ressource sei nicht erreichbar. Genau das, was du auch schon beschrieben hast.

        Nun zum Firefox:
        Hier kann ich mit der LiveHTTP-Extension mitverfolgen, was Client und Server so untereinander aushandeln. Irgendwo im Hintergrund werden ein paar Daten übertragen, das Browserfenster bleibt aber leer. Und das hier gibt dein Server als Antwort auf die Anforderung:

        HTTP/1.x 200 OK
         Date: Tue, 30 May 2006 12:36:00 GMT
         Server: Apache/1.3.33 (Unix)
         Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
         Content-Disposition: attachment; filename="Newsletter_D_2006-1.pdf"
         Expires: Thu, 19 Nov 1981 08:52:00 GMT
         Pragma: no-cache
         X-Powered-By: PHP/4.4.2
         Set-Cookie: PHPSESSID=11fec99572879646440cb68cbc49e59b; path=/
         Content-Length: 281640
         Keep-Alive: timeout=2, max=200
         Connection: Keep-Alive
         Content-Type: application/pdf

        Aha, da soll also eine PDF-Datei von knapp 280k heruntergeladen werden. Gut. Der Server hat die Anforderung auch verstanden und findet sie richtig (Status 200). Warum er mir ein Cookie unterschieben will, leuchtet mir nicht ein, aber das ist eine andere Geschichte.
        Die Header sehen insgesamt korrekt aus, aber offensichtlich werden keine Nutzdaten mehr übertragen, denn außer der Header-Anzeige finden keine weiteren Browser-Aktivitäten statt. Das ist vermutlich auch der Grund, warum der IE protestiert: Der besteht darauf, dass noch 281640 Bytes Nutzdaten folgen sollten - da aber die Übertragung schon vorher endet, meldet der einen Fehler, was ich völlig richtig finde. Warum der Firefox hier nicht mault, sondern das alles einfach ignoriert, verstehe ich nicht.

        Fazit: Es sieht alles danach aus, als hätte dein Script noch einen schweren Fehler, der dazu führt, dass zwar die Header gesendet werden, nicht aber der eigentliche Nutzinhalt.

        So long,
         Martin

        --
        Die beste Informationsquelle sind Leute, die jemand anderem versprochen haben, nichts weiterzuerzählen.
          (alte Journalistenweisheit)
  2. hi,

    angesichts Martins Analyse würde ich sagen:

    $er = error_reporting(0); # some ppl have warnings on

    and sometimes that's a pretty good idea, if you don't just want to ignore errors

    Also, das error_reporting mal nicht kastrieren, und dann schauen, welche Fehler das Script im weiteren Verlauf evtl. meldet.
    Dazu vielleicht auch die header() mal auskommentieren, um solche Meldungen direkt zu sehen zu bekommen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      angesichts Martins Analyse würde ich sagen:

      die Analyse ist nicht zutreffend. Die Nutzdaten werden ausgeliefert. Ein Grund der Totalverweigerung des IEs ist mir nicht ersichtlich.

      Gruß aus Berlin!
      eddi

      1. Hi eddi,

        angesichts Martins Analyse würde ich sagen:
        die Analyse ist nicht zutreffend. Die Nutzdaten werden ausgeliefert.

        Jetzt bin ich verblüfft. Ich kann es zwar nicht nachweisen, aber das nur sehr kurze Aufblinken der DATA-LED an meinem Router lässt es nahezu unmöglich erscheinen, dass da knapp 280k übertragen wurden - das müssten bei meinem DSL1000-Anschluss ja rund 2½s Volldampf sein. Das findet bei mir definitiv nicht statt. Weder im IE, noch im Firefox. Ich habe in beiden Browsern den Cache gelöscht und den Abruf wiederholt, dabei aufmerksam auf die Router-LEDs geachtet. Auch die Anzeige der Windows-Netzwerkverbindung zählt in beiden Fällen nur einige hundert Bytes.

        Ein Grund der Totalverweigerung des IEs ist mir nicht ersichtlich.

        Für die Verweigerung des Firefox auch nicht, nehme ich an?

        Ciao,
         Martin

        --
        F: Was ist schneller: Das Licht oder der Schall?
        A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.
        1. Für die Verweigerung des Firefox auch nicht, nehme ich an?

          Äh, im Firefox sollte es doch eigentlich prima funktionieren. Bei Dir nicht?

          1. Hi,

            Äh, im Firefox sollte es doch eigentlich prima funktionieren. Bei Dir nicht?

            nö, das sagte ich doch schon. Korrekte HTTP-Header, jedoch kein Download, nicht mal ansatzweise - aber auch keine Fehlermeldung. Deswegen hatte ich ja den Fehler auf deiner Seite vermutet.

            So long,
             Martin

            --
            Time's an illusion. Lunchtime doubly so.
              Douglas Adams, "The Hitchhiker's Guide To The Galaxy"
            1. nö, das sagte ich doch schon. Korrekte HTTP-Header, jedoch kein Download, nicht mal ansatzweise - aber auch keine Fehlermeldung. Deswegen hatte ich ja den Fehler auf deiner Seite vermutet.

              Ach so, da hatte ich Deine Ausführungen einfach falsch verstanden. Auf allen Rechnern, auf denen ich es probiert habe, funktionierte der Download lediglich beim Internet Explorer nicht, in ALLEN anderen Browsern jedoch schon. Wäre interessant, was an Deinem System nun so besonders bzw. anders ist, dass der Download gar nicht klappt.

        2. Hallo,

          die im HTTP-Header angegeben Größe von 281640 byte stimmt exakt mir der des Anhangs überhein.

          Ein Grund der Totalverweigerung des IEs ist mir nicht ersichtlich.

          Für die Verweigerung des Firefox auch nicht, nehme ich an?

          Weder weigert sich mein Mozilla 1.7.13, noch mein Opera 8.54 oder der Konqueror 3.5.2. Es ist daher zu vermuten, daß bei Euren Windowskisten irgendwo anders der Wurm dring ist. Möglicherweise spinnt die Firewall.

          Gruß aus Berlin!
          eddi

          1. Weder weigert sich mein Mozilla 1.7.13, noch mein Opera 8.54 oder der Konqueror 3.5.2. Es ist daher zu vermuten, daß bei Euren Windowskisten irgendwo anders der Wurm dring ist. Möglicherweise spinnt die Firewall.

            Nein, die Firewall kann es nicht sein, denn die habe ich abgeschaltet bzw. den Dienst komplett deaktiviert. Zudem besteht das Problem auch auf Systemen, auf denen keine Firewall existiert.

            Ich habe auch sämtliche Einstellungen beim Internet Explorer durchprobiert, aber nichts half.

            1. hi,

              Es ist daher zu vermuten, daß bei Euren Windowskisten irgendwo anders der Wurm dring ist. Möglicherweise spinnt die Firewall.

              Nein, die Firewall kann es nicht sein, denn die habe ich abgeschaltet bzw. den Dienst komplett deaktiviert. Zudem besteht das Problem auch auf Systemen, auf denen keine Firewall existiert.

              Ich habe auch sämtliche Einstellungen beim Internet Explorer durchprobiert, aber nichts half.

              Du möchtest da ein PDF zum Download anbieten.
              Hast du das Acrobat Reader-Plugin installiert?
              Wenn ja, deaktivere das mal, bzw. versuche zunächst mal einen anderen Dateityp als Download an den Client zu schicken.

              Funktioniert das?

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Du möchtest da ein PDF zum Download anbieten.
                Hast du das Acrobat Reader-Plugin installiert?
                Wenn ja, deaktivere das mal, bzw. versuche zunächst mal einen anderen Dateityp als Download an den Client zu schicken.

                Funktioniert das?

                Danke für Deine Vorschläge.

                1. PDF-Plugin: daran liegt es nicht. Ich habe es mit Aktivieren und Deaktivieren des Plugins versucht und in beiden Fällen ist mit dem IE kein Zugriff möglich.

                2. Anderer Dateityp: auch daran hängt es nicht. Ich habe mehrere Dateitypen versucht, und in allen Fällen kommt mit dem IE der beschriebene Fehler, in allen anderen Browsern funktioniert es hingegen problemlos mit dem Download.

            2. Re:

              Ich habe auch sämtliche Einstellungen beim Internet Explorer durchprobiert, aber nichts half.

              Suchen: Schlate die Header Set-Cookie, Pragma, Expires und Cache-Control ab, entferne die Quots '"' beim Dateinamen:

              Content-Disposition: attachment; filename="Newsletter_D_2006-1.pdf"

              also, daß dabei herauskommt:
              Content-Disposition: attachment; filename=Newsletter_D_2006-1.pdf

              Gruß aus Berlin!
              eddi

              1. entferne die Quots '"' beim Dateinamen:

                Content-Disposition: attachment; filename="Newsletter_D_2006-1.pdf"
                also, daß dabei herauskommt:
                Content-Disposition: attachment; filename=Newsletter_D_2006-1.pdf

                Ähm, ich bekomme es leider nicht so richtig hin, und würde mich freuen, wenn ihr mir weiterhelfen könntet.

                Kurz, es geht um diese Zeile:

                [code=php]header ('Content-Disposition: attachment; filename="'.basename($data[2]).'"');[/code]

                So langsam habe ich die Vermutung, dass hier der Fehler liegen KÖNNTE. Im Firefox wird zum Beispiel schon vor dem Download der richtige Dateiname im Downloaddialog angezeigt, beim Internet Explorer wird hingegen der Skriptaufruf im Dateinamen angezeigt:

                http://img71.imageshack.us/img71/9930/iexploreexe0029kx.jpg

                Wie ändere ich denn die obige Zeile, dass dem IE der richtige Dateiname übergeben wird? Oder bin ich hier auf dem Holzweg?

                1. header ('Content-Disposition: attachment; filename='.basename($data[2]));

                  Gruß aus Berlin!
                  eddi

                  1. header ('Content-Disposition: attachment; filename='.basename($data[2]));

                    Vielen Dank,

                    ich habe es nun abgeändert, aber der Fehler bleibt:

                    http://dialogik-expert.de/de/list/dl.php?id=8

                    Auch wird weiterhin im IE vor dem Download als Dateiname "dl_php?id=8" angezeigt.

      2. Hallo,

        angesichts Martins Analyse würde ich sagen:

        die Analyse ist nicht zutreffend. Die Nutzdaten werden ausgeliefert. Ein Grund der Totalverweigerung des IEs ist mir nicht ersichtlich.

        Vielen Dank,

        aber Du konntest sie ebenfalls reproduzieren?

        Seltsam.

        Wenn noch jemand eine Idee hat, würde ich mich freuen!