Mysql dumb nicht auf Server speichern sonderen downloaden.

GiFt-ZwErG

Erfahrenes Mitglied
Hallo,

meine letzet Frage wurde so super schnell und nett beantwortet dass ich glatt die nächste Frage habe ;) ( Ist auch die letzte für heute :D )

Geht um folgenden Code:

Code:
<?
// mySQL - variables
$dbhost="localhost";
$dbuser="user";
$dbpass="pw";
$dbname="name";
$filetype = "sql";


// full path to phpMyBackup
$path="";



// DO NOT CHANGE THE LINES BELOW

flush();
$conn = mysql_connect($dbhost,$dbuser,$dbpass) or die(mysql_error());
$path = $path . "dump/";
if (!is_dir($path)) mkdir($path, 0777);

function get_def($dbname, $table) {
    global $conn;
    $def = "";
    $def .= "DROP TABLE IF EXISTS $table;#%%\n";
    $def .= "CREATE TABLE $table (\n";
    $result = mysql_db_query($dbname, "SHOW FIELDS FROM $table",$conn);
    while($row = mysql_fetch_array($result)) {
        $def .= "    $row[Field] $row[Type]";
        if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
        if ($row["Null"] != "YES") $def .= " NOT NULL";
           if ($row[Extra] != "") $def .= " $row[Extra]";
            $def .= ",\n";
     }
     $def = ereg_replace(",\n$","", $def);
     $result = mysql_db_query($dbname, "SHOW KEYS FROM $table",$conn);
     while($row = mysql_fetch_array($result)) {
          $kname=$row[Key_name];
          if(($kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname";
          if(!isset($index[$kname])) $index[$kname] = array();
          $index[$kname][] = $row[Column_name];
     }
     while(list($x, $columns) = @each($index)) {
          $def .= ",\n";
          if($x == "PRIMARY") $def .= "   PRIMARY KEY (" . implode($columns, ", ") . ")";
          else if (substr($x,0,6) == "UNIQUE") $def .= "   UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
          else $def .= "   KEY $x (" . implode($columns, ", ") . ")";
     }

     $def .= "\n);#%%";
     return (stripslashes($def));
}

function get_content($dbname, $table) {
     global $conn;
     $content="";
     $result = mysql_db_query($dbname, "SELECT * FROM $table",$conn);
     while($row = mysql_fetch_row($result)) {
         $insert = "INSERT INTO $table VALUES (";
         for($j=0; $j<mysql_num_fields($result);$j++) {
            if(!isset($row[$j])) $insert .= "NULL,";
            else if($row[$j] != "") $insert .= "'".addslashes($row[$j])."',";
            else $insert .= "'',";
         }
         $insert = ereg_replace(",$","",$insert);
         $insert .= ");#%%\n";
         $content .= $insert;
     }
     return $content;
}

    $curtime=date("H.i_d.m.y");
    $newfile="# Dump created on $curtime\r\n";
    $tables = mysql_list_tables($dbname,$conn);
    $num_tables = @mysql_num_rows($tables);
    $i = 0;
    while($i < $num_tables) { 
       $table = mysql_tablename($tables, $i);
    
       $newfile .= "\n# ----------------------------------------------------------\n#\n";
       $newfile .= "# structur for table '$table'\n#\n";
       $newfile .= get_def($dbname,$table);
       $newfile .= "\n\n";
       $newfile .= "#\n# data for table '$table'\n#\n";
       $newfile .= get_content($dbname,$table);
       $newfile .= "\n\n";
       $i++;
    
    
        $fp = fopen ($path."$dbname.$curtime.$filetype","w");
        fwrite ($fp,$newfile);
        fclose ($fp);
}
?>

Dort wird am Ende mit fwrite die Datei $newfile in den Ordner dumb geschrieben.
ich möchte die Datei jedoch gerne download und sofort gesendet bekommen.
Habe dies mit der Echofunktion versucht, der Inhalt der Datei wird auch angezeit, ich möchte diese aber direkt als download angeboten bekommen.
Wenn ich den versuche den Header zu modifizieren:


header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=".$name);
header("Pragma: no-cache");
header("Expires: 0");
echo $newfile;

Kommt die Fehlermeldung:

Warning: Cannot modify header information - headers already sent by ............

Habe auch schon gegoogled und es mit dem Befehl: <?php ob_start(); ?>
Leider ohne Erfolg.
Kann mir da einer netterweise nen Denkanstoss geben?

Wäre sehr dankbar.

Schönen Abend ( Nacht ) noch ;)

MFG
GiFti
 
Zurück