• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

CSV-download streikt

Tectum

New member
Hy leute, ich hab mir hier ein CSV-Export gebastelt, aber irgendwie öffnet der mir nur den inhalt im browser an, statt mir die CSV zum download anzubieten:
PHP:
$kopfzeile = "Anrede;Titel;Vorname;Name";
$list = array($kopfzeile);
$sql = mysql_query("SELECT * FROM ava_kunden ORDER BY kundennr ASC");
while($row = mysql_fetch_array($sql))
{
array_push($list, "".$anrede.";;".$row['vname'].";".$row['nname']."");
}
$datei	= "download.csv";
$ausgabe 	= implode("\n", $list);
header('Content-Type: application/x-download');
header('Content-Length: ' . strlen($ausgabe));
header('Content-Disposition: attachment; filename="'.$datei.'"');
header('Cache-Control: private, max-age=0, must-revalidate');
echo $ausgabe;
 
habs so geändert:
PHP:
header('HTTP/1.1 200 OK');
header('Content-Length: ' . strlen($f));
header('Content-type: application/CSV');
header('Content-Disposition: attachment; filename="'.$file.'');
bringt aber nix:(
 
was steht $f und was steht in $file?
Probier mal nen anderen Browser. Bei FF kannst du einstellen was mit bestimmten Dateien gemacht wird, könnte sein, dass dort eingestellt ist, dass FF CSV anzeigt?
 
Was sendet der Server denn genau? (Kannst du z.B. mit putty ansehen - muss man nur ein bisschen was vom HTTP verstehen...)
 
so wenn ich in die datei nur
PHP:
header('HTTP/1.1 200 OK');
header('Content-Length: ' . strlen($f));
header('Content-type: application/CSV');
header('Content-Disposition: attachment; filename="'.$file.'');
mache generiert der mir auch nix, im FF-Fehlerkonsole kommt auch nix, er macht einfach gar nix :(
 
So neuer Weg neues glück:
PHP:
include("./config.php");
$headline = "Anrede;Vorname;Name";
$list = array($headline);
$sql = mysql_query("SELECT anrede,vname,nname FROM ava_kunden ORDER BY kundennr ASC");
while($row = mysql_fetch_array($sql))
{
array_push($list, "".$anrede.";".$row['vname'].";".$row['nname']."");
}
$f = implode("\n", $list);
$fh = fopen("test.csv", "a");
fputs($fh, $f);
fclose($fh);
funktioniert einwandfrei, nur muss ich ja vorher eine test.csv auf den Server legen, ich will aber eine temporäre datei anlegen, will vorher eine csv anlegen ala 2010_05_07_0001.csv!
Ich finde leider nicht den befehl um eine csv zu erstellen, die ich vor meinem skript erstelle und die datei dann nutze
 
Und welchen Header sendet der Server hier?
Um dein Problem zu lösen musst du dir wirklich ansehen, was der Server wirklich sendet!
 
habs jetzt so gemacht:
PHP:
include("./config.php");
error_reporting(E_ALL);

$handle = fopen('download.csv', 'r');
fopen("download.csv","w") or die("Error");
fclose($handle);

$headline = "HKN;ANM;VNM;NNM;STR;PLZ;ORT;TNS;GEB";
$list = array($headline);
$sql = mysql_query("SELECT anrede,vname,nname,str,plz,ort,tel,gebdat FROM ava_kunden ORDER BY kundennr ASC");
while($row = mysql_fetch_array($sql))
{
array_push($list, ";".$row['anrede'].";".$row['vname'].";".$row['nname'].";".$row['str'].";".$row['plz'].";".$row['ort'].";".$row['tel'].";".$row['gebdat']."");
}

$f 	= implode("\n", $list);
$fh = fopen("download.csv", "a");
fputs($fh, $f);
fclose($fh); 
header("Location: download.csv");
bis gestern hats irgendwie geklappt, jetzt haut der mir raus:
Error 500 - Internal server error

Ein interner Fehler ist aufgetreten!
Bitte versuchen Sie es zu einem späteren Zeitpunkt.


Was kann das jetzt sein?
 
Error 500 - Internal server error
Jetzt hast Du was richtig kaputt gemacht. Das Skript ist jetzt so im Eimer, dass der Webserver die Ausführung abbricht. In der entsprechenden error.log sollte ein Grund zu finden sein.
Ansonsten fällt Dein Skript durch sinnloses, redundantes Öffnen der Zieldatei auf, was den Schluss zuläßt, dass durch Deine Testerei sehr viele Fragmente und unnütze Codestücke übriggeblieben sind. Zeit für eine Bereinigung.
 
Also umbenennen und clean machen so?
PHP:
include("./config.php");
error_reporting(E_ALL);
$file	= "getcsv.csv";

$handle = fopen($file, 'w') or die("Error");
fclose($handle);

$headline = "HKN;ANM;VNM;NNM;STR;PLZ;ORT;TNS;GEB";
$list = array($headline);
$sql = mysql_query("SELECT anrede,vname,nname,str,plz,ort,tel,gebdat FROM ava_kunden ORDER BY kundennr ASC");
while($row = mysql_fetch_array($sql))
{
array_push($list, ";".$row['anrede'].";".$row['vname'].";".$row['nname'].";".$row['str'].";".$row['plz'].";".$row['ort'].";".$row['tel'].";".$row['gebdat']."");
}

$f 	= implode("\n", $list);
$fh = fopen($file, "a");
fputs($fh, $f);
fclose($fh); 
header("Location: ".$file."");

jetzt sagt der mir:
Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 131072 bytes) in csv_download2.php on line 17

das sind nur 35.000 Datensätze, ist jetzt nicht die Welt? kann man den speicher erhöhen?
 
-,- ohman hatte vergessen den Datensatz über WHERE einzugränzen - klar dass der bei 420.000 Datensätzen abschmiert :D
 
Zurück
Oben