• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datei download & Inhalt schreiben

Mars@Gera

Mitglied
Mahlzeit,
die Suche hat leider nicht das ergeben, was ich mir erwünscht hatte :(
Hiermit schildere ich mal meine Situation
Ich schreibe Daten direkt von der DB in eine Datei.
PHP:
$date = getdate();
$name = 'download_' . $date['mday'] . '.' . $date['mon'] . '.' . $date['year'] . '.txt';
$filepath = $down_dir . $name;
$filename = basename($filepath);
$size = filesize($filepath);
// ...
$data = $db->select(/*...*/);
if($handle = fopen($filepath, "w+")){
  for($i = 0; /*...*/){
      $line = $data[$i][LOC] . $tok . $data[$i][SUBJ] . /*...*/;
      $byte = fwrite($handle, $line);
  }
fclose($handle);
}
header("Content-Type: application/force-download");
header("Content-Length: " . $size);
header("Content-Disposition: attachment; filename=" . $filename);
readfile($filepath);

Soweit funktioniert das ja ... jedoch schreibt der auch nun HTML-Quellcode mit rein oO like
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html lang="de">
	<head>
		<title>
            Phenomendatenbank :: Option :: Download        </title>
            //...
Und dann später den Inhalt, der in die Datei soll...
Kann mit jemand vielleicht helfen? Also Ziel wäre es, das dieser HTML part nicht drinne steht, sondern nur die Daten aus der Db

mfg Marcel
 
Werbung:
richtig ... :(
edith sagt:
aber wie soll ich das machen, bebor jegliche ausgabe getätigt wird ... wollte es nicht über dem <html>-tag setzen -.-
 
Zuletzt bearbeitet:
Werbung:
Dann setze das an den Anfang der Datei (vor der ersten Ausgabe). Das Erzeugen der temporären Datei kannst du dir eigentlich auch sparen. Das könnte bei großen Datenmengen höchstens dazu dienen, PHP nicht ans Memory-Limit stoßen zu lassen. Da du aber ohnehin alle Daten in $data haben dürftest, ist das hier wohl nicht relevant.

PHP:
<?php

if (/* Formular abgeschickt / Link geklickt / was auch immer den DL auslöst  */) {
        
    $data = $db->select(/*...*/);
    
    $tmp = '';
    for ($i = 0; /*...*/){
        $tmp .= $data[$i][LOC] . $tok . $data[$i][SUBJ] . /*...*/;
    }
    
    $size = strlen($tmp);
    $date = getdate();
    $filename = 'download_' . $date['mday'] . '.' . $date['mon'] . '.' . $date['year'] . '.txt';

    header("Content-Type: application/force-download");
    header("Content-Length: " . $size);
    header("Content-Disposition: attachment; filename=" . $filename);
    
    echo $data;
    
    exit;
}

// ...

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<!-- usw. -->
 
das wollte ich eigentlich nicht machen, weil ich alles in seperaten dateien gehandelt habe ... gäbe es da noch eine andere möglichkeit?
 
Zurück
Oben