Download.php Probleme! Wer kann helfen?

bluemirko

Grünschnabel
Hallo Leute,

ich such jetzt schon ne ganze Weile im Forum rum, bin aber nicht wirklich fündig geworden. Ich hab mir eine simple download.php geschrieben die mir meine Sound- und Pdf-Dateien ohne Rechtsklick "Speichern unter..." laden kann. Klappt auch alles wunderbar, nur hab ich noch zwei kleine Probleme die ich gern noch behoben hätte:

- Der Dateiname ändert sich beim downloaden von download/datei.mp3 nach download - datei.mp3. Wie bekomme ich nur datei.mp3 hin?

- Die Größe wird vom Download-Manager (ich verwende den handelsüblichen von Firefox) nicht geladen/ angezeigt. Dadurch gibt es keine Statusanzeige. Wie kann ich das Problem beheben?

Hier nun noch der Quellcode:

PHP:
<?

if (isset($_GET["id"])) $id = $_GET["id"]; else die();

$conn = mysql_connect("localhost", "xxxxxxxxx", "xxxxxxxxxx");
if (!$conn) { die("die datenbank wurde nicht gefunden."); }
mysql_select_db("xxxxxxxxxx",$conn);

$res = mysql_query("SELECT * FROM mirko_download WHERE id = '$id'");
$row = mysql_fetch_array($res);
$filename = $row["filename"];
$mime = $row["mime"];

header("Content-Disposition: attachment; filename=$filename");
header("Content-Lenght: ".filesize($filename));
header("Content-Type: ".$mime);

readfile($filename);


?>

Bitte helft :-)

Liebe Grüße Mirko
 
Versuch mal folgendes:
PHP:
<?php
  if( isset($_GET["id"]) ) $id = $_GET["id"]; else die();

  if( !$conn = mysql_connect("localhost", "xxxxxxxxx", "xxxxxxxxxx") ) {
    echo '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'</p>';
    exit;
  }
  mysql_select_db("xxxxxxxxxx",$conn);

  $query = "
	SELECT
	        `filename`,
	        `mime`
	  FROM
	        `mirko_download`
	  WHERE
	        `id` = '".$id."'
	";
  if( !$res = mysql_query($query) ) {
    echo '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'<pre>'.$query.'</pre></p>';
    exit;
  }
  $row = mysql_fetch_array($res, MYSQL_ASSOC);

  header('Content-Type: '.$row['mime'].'; name="'.$row['filename'].'";');
  header('Content-Disposition: attachment; filename="'.$row['filename'].'";');
  header('Content-Lenght: '.filesize($row['filename']).' bytes');

  readfile($row['filename']);
?>
 
Hab ich ausprobiert, aber trotzdem das gleiche Ergebnis. Ich denke auch nicht dass es ein MySQL Fehler ist, das wird alles richtig übergeben... Und das mit "name=..." zeigt auch keine Wirkung. Es wird weiterhin "download-misty.mp3" angezeigt und ne Länge wird immernoch nicht erkannt.

Kann es mit dem Namen vielleicht daran liegen dass die Datei misty.mp3 im Verzeichnis download liegt? In der Tabelle steht als Filename download/misty.mp3

Liebe Grüße
 
Okay, *lach*, ich hab das Problem gelöst. Für die die es nochmal brauchen:

Das mit dem Filename habe ich mit der Funktionen "basename" gelöst:

PHP:
header("Content-Disposition: attachment; filename=".basename($row["filename"]));

Und das mit der Dateigröße die er nicht erkannt hat beruhte auf einem Schreibfehler. Ich habe dummerweise "Content-Lenght" anstatt "Content-Length" geschrieben....

Trotzdem nochmal danke für die Mühe.

Liebe Grüße Mirko
 
Zurück