Problem mit Urlhiding bei Download

El_Banana

Grünschnabel
Hallo!

Also vorab ich sitze nun seit 2 Tagen an dem Script, habe alle Foren die ich gefunden habe durchgesehen, nach allem Erdenklichen gesucht und alle Tutorials und Free-Codes die ich finden konnte durchgeschaut und ausprobiert, inzwischen glaub ich das ich den Wald vor lauter Bäumen nicht sehe.

Ich lasse per Link ein neues Fenster öffnen, in diesem Fenster wird ein Script ausgeführt das die DL-Kategorie und die Datei-ID aus der Url liest. Mit Hilfe dieser Angaben sucht er in einer DB nach dem Filenamen und dem wahren Link zu der Datei.

Danach sollte er eigentlich die Datei runterladen und als Quell-URL http://www.domain.de/?content=download&cat=1&id=1 anzeigen und halt nicht die korrekte URL zur Datei.

Hier mein Code:

Code:
<?php  session_start(); 
require 'server.php';
$subcat=$HTTP_GET_VARS["cat"];
switch ($subcat) 
{  			
case "1" : $cata='http://dl.domain.org/files/large/demos/';				  				break;  				case "2" : $cata='http://dl.domain.org/files/large/patches/';	
break;
} 
$fileid=$HTTP_GET_VARS["file"];  
$dlfile=mysql_query ("Select * from `filebase_$subcat` WHERE file_id='$fileid'");  
while($f = mysql_fetch_array($dlfile)) 
{ 
$filename=$f["file_name"]; 
header("Content-Disposition: attachment; filename=".$filename);  
header("Content-Type: application/octet-stream"); 
header("Cache-Control: no-store, no-cache, must-revalidate");   
header("Cache-Control: post-check=0, pre-check=0", false);  
header("Pragma: no-cache");  
header("Expires: 0");  
readfile($cata .$filename);   
} 
?>

Die Probleme die ich nicht lösen kann sind, das er 1. die Dateigröße nicht anzeigt, was wiederrum dafür sorgt das kein Browser die Restzeit anzeigen kann.
Und 2. und das ist das schlimmste an diesem Code, daß er nur mit Opera und FF funktioniert.
Der IE will die Url "runterladen"
Änderung des Content-Type hat nix gebracht.
Ich habe es mal versucht mit:

Code:
header("Location: ".$cata .$filename);

Das funktioniert mit allen Browsern einwandfrei, jedoch zeigt er beim Download die wahre Url an.
Kann es ein Problem sein, das die Dateien nicht auf dem gleichen Server wie das Script liegen?

Ich bin für jede Hilfe und Hilfe zur Selbsthilfe dankbar.

Banane
 
Zuletzt bearbeitet:
Wenn es sich um einen serverexternen URL handelt, ist es nicht sehr ratsam, die Daten erst über den Server laufen zu lassen, sondern den Benutzer direkt an den URL zu verweisen.
PHP:
<?php

	session_start();
	require 'server.php';

	switch( $_GET['cat'] ) {

		case '1':
			$cata = 'http://dl.domain.org/files/large/demos/';
		break;

		case '2':
			$cata = 'http://dl.domain.org/files/large/patches/';
		break;

	}

	$query = "
		SELECT
		        `file_name`
		  FROM
		        `filebase_".mysql_ecape_string($_GET['cat'])."`
		  WHERE
		        `file_id` = '".mysql_escape_string($_GET['file'])."'
		  LIMIT
		        1
		";
	$result = mysql_query($query);
	while( $f = mysql_fetch_array($result) ) {
		header('Location: ' . $cata.$f['file_name']);
	}
?>
 
Die mir einzig bekannte Lösung wäre, den Inhalt der entferten Datei vom Server auszulesen und an den Benutzer zu schicken; allerdings halte ich das für sehr ineffizient.
 
Zurück