Download über .php

Sperrfeuer

Software-Overclocker(in)
Download über .php

Hallo, ich habe folgendes Problem:

Ich schaffe es eine Datei aus einer Datenbank zu erzeugen, jedoch ist es nicht möglich diese zu downloaden.

könnte mir jemand netterweise sagen, wo der Fehler im Code liegt?

Code:
<?php
include 'dbconnect.php' ;

$abfrage = "SELECT projekt.id as pid, name, nachname, vorname FROM projekt INNER JOIN schueler WHERE projekt.id=schueler.id ORDER BY projekt.id";
$ergebnis = mysql_query ($abfrage);


$datei_handle=fopen("Projektliste.csv","w");
if (!$datei_handle)
    die ("Datei konnte nicht geöffnet werden");    
while($row = mysql_fetch_object ($ergebnis))
{
fwrite($datei_handle,"'$row->pid';'$row->name';'$row->nachname';'$row->vorname';\n");

}
fclose($datei_handle);

echo "Die Datei wurde gespeichert";

header ('Content-Disposition: attachment; filename="Projektliste.csv"');

?>
 
Zuletzt bearbeitet von einem Moderator:
AW: Download über .php

Ich bin mir nicht ganz sicher - aber versuch mal, einen Content-type dazu anzugeben
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="xyz.csv"');

Ich vermute aber, dass .csv Dateien von den meisten Browsern eh standardmäßig heruntergeladen und nicht geöffnet werden, habs jetzt aber nicht ausprobiert - Zur Not kannst du also auf eine Datei umleiten oder diese Verlinken..
 
AW: Download über .php

Du musst immer erst die Header senden, bevor Du andere Ausgaben machst. Dann ist das Zwischenspeichern in eine Datei ineffizient, weil Du die Datei auch direkt an den Browser senden kannst. Hier musst Du auch mal unterscheiden, ob Du einen Downloadlink anbieten möchtest oder direkt eine Downloadaufforderung an den Nutzer. Ich vermute mal letzteres und wie Puepue schon richtig bemerkt hat, fehlt dir da auf jeden Fall der Content-Type-Header. Weitere Infos zu Dateigröße wären sicher auch von Vorteil. Also: Header-Ausgaben zu erst, Content-Type dazu, dann Dateiinhalt direkt per echo ausgeben und nicht auf Platte speichern und dein echo mit der Speicher-Meldung muss dann auch ganz raus. Da darf keine weitere Ausgabe erfolgen abgesehen von dem eigentlichen Inhalt. :)
 
Zurück