Problem mit Download-Script

damike

Grünschnabel
Hallo,

ich habe folgendes Script um Dateidownloads zu realisieren und die Originaldatei auf dem Server zu verbergen. In der Variable $file ist der absolute Pfad zur Datei inkl Dateinamen (Bsp.: $file = "/dir/subdir/datei.rar";)

Soweit geht der Script auch, der Download-Dialog vom Browser öffnet sich und ich klicke auf Speichern und dann hängt sich der Browser auf und dafür suche ich eine Erklärung.

*edit*: Der Browser reagiert nicht mehr und ich kann diesen nur noch mit dem Task-Manager schließen.

Kann mir da jemand helfen und mir mitteilen, warum dieses so ist ?

Freundliche Grüße daMike

Anhang: Script



PHP:
// Datei einlesen
if(is_file($file)) {
  $pfile = fopen($file,"r");
  while(!feof($pfile)) { 
    $temp_file .= fgets($pfile,4500); 
  }
        
  // Header setzen und datei ausgeben
  $mime_type = 'application/x-zip'; // Wird immer runtergeladen, da kein Browser ein ZIP-Plugin hat
  header('Content-Type: ' . $mime_type);
  header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  if (getenv("HTTP_USER_AGENT") == 'IE') {
    header('Content-Disposition: inline; filename="' . $file_name . '"');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
  } else {
    header('Content-Disposition: attachment; filename="' . $file_name . '"');
    header('Pragma: no-cache');
  }
  echo $temp_file;
}
 
Zuletzt bearbeitet:
Probier mal an Stelle deines Scripts die von mir angehängt Modulation mit readfile().
PHP:
if(is_file($file)) {

  ## Hier muss noch $file_name definiert werden ##

  // Header setzen und datei ausgeben
  $mime_type = 'application/x-zip'; // Wird immer runtergeladen, da kein Browser ein ZIP-Plugin hat
  header('Content-Type: ' . $mime_type);
  header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  if (getenv("HTTP_USER_AGENT") == 'IE') {
    header('Content-Disposition: inline; filename="' . $file_name . '"');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
  } else {
    header('Content-Disposition: attachment; filename="' . $file_name . '"');
    header('Pragma: no-cache');
  }
  readfile($file);
}
 
Danke für die Hilfe.

Ich habe ein paar neue Erkenntnisse, weis leider nur noch nichts damit anzufangen.

Der Sachverhalt ist wie folgt:

Der Browser hängt sich nicht auf, sonder rödelt 5 Minuten lang und die Datei die er dann runterläd ist 100kb. Dann habe ich ein wenig experimentiert und folgendes rausgefunden:

Wenn ich den Script so aufrufe: download.php?start=download&file=abc.rar
dann ist mein Problem das alte, aber rufe ich den Script so auf: download.php?file=abc.rar&start=download
dann funktionert alles wunderbar.

Nur warum ist das so ?

Mit der readfile($file) modifikation ist es das selbe...... (?)

Hier nochmal der aktuelle Script:

PHP:
	if($start=='download') {
		$download_datei		= $base_dir.'downstream/downloads'.$dlfile;
		$download_name		= basename($download_datei);
		$download_mimetype	= 'application/x-rar-compressed';
		$user_browser		= extract_agent(getenv("HTTP_USER_AGENT"));

		// Datei einlesen
		unset($download_datei_inhalt);
		$download_datei_inhalt = "";
		// Datei einlesen
		$download_read	= fopen($download_datei,"r");
		while(!feof($download_read)) { 
			$download_datei_inhalt .= fgets($download_read,4500); 
		}

		// Header setzen und datei ausgeben
		header("HTTP/1.1 200 OK");
		header('Content-Type: ' . $download_mimetype);
		header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
		if ($user_browser[0]=='IE') {
			header('Content-Disposition: inline; filename="' . $download_name . '"');
			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
			header('Pragma: public');
		} else {
			header('Content-Disposition: attachment; filename="' . $download_name . '"');
			header('Pragma: no-cache');
		}
		echo $download_datei_inhalt;
	}
 
Zuletzt bearbeitet:
Zurück