content-type filtern

Hallöchen in Forum!

Also unser Downloadscript steht und funktioniert auch soweit, allerdings zerschiesst mir mein Downloadscript meine gedownloadeten Dateien. Also Wenn ich z.B. ein Word Dokument auf den Server lade und dieses dann wieder mit einem DL script runterlade fragt micosaft word nach einem konverter und ich hab nur noch leere kästchen auf dem Papier. Wenn ich die Datei direkt auf dem Server aufrufe, ist sie ganz normal lesbar-> es liegt am DL Script.. nun das problem, ich habe im Content-Type stehen gehabt...

header("Content-Type: application/octetstream ");
header("Content-Type: application/octet-stream ");
und
irgendwas mit x-type/subtype stehen gehabt oder so.

und nichts davon bringt irgenwie erfolg...

Da ich aber sowohl .xls, .ppt, .pdf als auch word nutze hab ich grade mal keinen plan, woran das liegen kann, dass mir mein dl script die datein zerschießt. Hatte jemand dieses problem schonmal?

Das einzige, was ich versuchen könnte, wäre mir den Dateinamen aus der Datenbank zu schnappen, irgendwie die Endung rauszufiltern(?) also nach .doc .xls oder .pdf und dann das mit ner if else abfrage zu lösen...

1. Mit welchem befehl filtert man die dateitypen raus und
2. Wie lauten die richtigen content-types für word excel pdf usw.`?

Gruß Magnus
 
Vermutlich gibt es neben der Ausgabe des Dateiinhalts noch weitere Ausgaben, die den Dateiinhalt schließlich korrumpieren.
 
Also hier mal der wichtige Teil meines Dl Scripts.. ich übergebe einemal die ID und dann noch den Dateinamen. Mit der ID suche ich in der Datenbank nach einer übereinstimmung, ist die gefuden, wechsel ich in den Pfad ($pfad) und dann sollte es schon losgehen.

PHP:
if($filename==$dn or $filename==$dn1) 		{
		chdir($pfad);

 		header("Content-Type: application/octet-stream"); 
 		header("Content-Length: ".filesize($filename)); 
 		header("Content-Disposition: attachment; filename=".basename($_GET['d'])); 
 		readfile($filename);
		exit();
		}
		else
		{
		echo "$filename nicht gefunden!";
		echo "<br>";
		echo "<a href='javascript:history.back()'>zur&uuml;ck</a><br>";
				die ("ID korrekt, jedoch keine Dateinamenübereinstimmung gefunden!");
		}
 
Ich glaube es fehlt noch was aber versuch es mal ;)

PHP:
<?php
if($filename==$dn or $filename==$dn1)         {
        chdir($pfad);
        
       $filetype = substr($filename, -3, 3);
       $headertype = "";
        switch($filetype) {

            case "pdf" : $headertype = 'application/pdf';
            break;
            case "doc" : $headertype = 'application/msword';
            break;
            case "xls" : $headertype = 'application/excel';
            break;
            default: $headertype = 'application/octet-stream';

        }

         header("Content-Type: $headertype"); 
         header("Content-Length: ".filesize($filename)); 
         header("Content-Disposition: attachment; filename=".basename($filename); 
         readfile(basename($filename));
        exit();
        }
        else
        {
        echo htmlspecialchars($filename).'nicht gefunden!';
        echo "<br>";
        echo "<a href='javascript:history.back()'>zur&uuml;ck</a><br>";
                die ("ID korrekt, jedoch keine Dateinamenübereinstimmung gefunden!");
        }
?>
 
Danke KD3 an das schicke script, allerdings funktioniert das auch nicht... Muss ich in der php.ini Datei irgendetwas für dateidown- bzw. uploads einrichten? Ich habe application/msword mal so dranghangen, also ohne die switch abfrage, aber immernoch das gleiche bild, er fordert mich unter office auf die Codierung einzustellen....:confused: ..mhh naja wenn es gar nicht geht, dann muss ich es halt verbotenerweise mit <a href> und dem direktlink auf die Datei machen.

Kann man soviel verkehrt machen bei einem dl script?`Anmerkung, Server ist meiner, es könnte also sein, dass es verstellt ist?(wenn man was zu Dateidownloads einstellen kann)

danke schonmal für die mühen.

Gruß

Magnus
 
Öffne die heruntergeladene Datei doch mal mit einem normalen Texteditor. Ich tippe immer noch darauf, dass es zusätzliche Ausgaben gibt, die die Daten korrumpieren.
 
So, anbei mal die Datei, ich konnte keinen fehler, der auf einen php code hinweist, finden. Ich weiß , was du suchst, da ist aber nichts.. wenn du was findest, dann bin ich blind...;-)
 

Anhänge

Also hier mal das gesamte Downloadscript

PHP:
<?
ob_start();
$idi=$_GET['id'];
$filename = $_GET['d'];  
require('./admin/db.inc');
require('checkuser.php');
$db = mysql_connect($dbserver, $dbuser, $dbpasswd) or die("Keine Verbindung möglich!"); 
$sql="SELECT AuftragID from tbl_auftrag WHERE AuftragID='$idi' ";
mysql_select_db($dbname);
$check = mysql_query($sql);
$ch=mysql_num_rows($check);
  $id=intval($_GET['id']);
	$sqlab="SELECT AuftragID, Pfad, Dateiname, Dateiname1 from tbl_auftrag WHERE AuftragID='$id' ";  
	mysql_select_db($dbname);
	$res = mysql_query($sqlab);
  $row = mysql_fetch_array($res);
	mysql_close($db);

	
	$pfad=$row['Pfad'];
	$dn=$row['Dateiname'];
	$dn1=$row['Dateiname1'];  ##dateinamen beschafft und in variablen abgelegt

if($ch <= 0 )  ##erst überprüfen wir, ob es die ID in der datenbank gibt!
{
die("ID ungültig");
}
else								 	 ##gibt es sie, dann greifen wir auf die datenbank zu, um uns die dateinamen zu beschaffen
{
	
 		if($filename==$dn or $filename==$dn1)  ##ist der dateiname gleich dem orginalen oder dem übersetzten dateinamen, dann biete den download an!
		{
		   chdir($pfad);  
       $filetype = substr($filename, -3, 3); 
       $headertype = ""; 
        switch($filetype) 
						{ 
            case "pdf" : $headertype = 'application/pdf'; 
            break; 
            case "doc" : $headertype = 'application/msword'; 
            break; 
            case "xls" : $headertype = 'application/excel'; 
            break; 
						case "ppt" : $headertype = 'application/mspowerpoint'; 
            break; 
            default: $headertype = 'application/octet-stream'; 
        		} 
				 header('Content-Transfer-Encoding: none');
         header("Content-Type: $headertype");  
         header("Content-Disposition: attachment; filename=".basename($filename).";");
				 header("Content-Length: ".filesize($filename));    
				 readfile(basename($filename));  
        } 
        else 
        { 
        echo htmlspecialchars($filename).'nicht gefunden!'; 
        echo "<br>"; 
        echo "<a href='javascript:history.back()'>zur&uuml;ck</a><br>"; 
                die ("ID korrekt, jedoch keine Dateinamenübereinstimmung gefunden!"); 
        } 
}
ob_end_flush();
?>

Falls es also an meiner Konfiguration liegen sollte, könnte man mir mal einen Hinweis zukommen lassen...:-)

Gruß Magnus
 
Zurück