problemmer med DB backup af mysql database fra php
Jeg vil gerne lave backup af min database og fandt noget kode her på eksperten.det følgende:
<?php
$dbhost = "";
$dbuname = "";
$dbpass = "";
$dbname = "";
@set_time_limit(600);
$crlf="\n";
// Danish Text
$strNoTablesFound = "Ingen databasetabeller fundet";
$strHost = "Host";
$strDatabase = "Database ";
$strTableStructure = "Struktur for tabel";
$strDumpingData = "Indhold af tabel";
$strError = "Fejl";
$strSQLQuery = "SQL-query";
$strMySQLSaid = "MySQL: ";
$strBack = "Tilbage";
$strFileName = "DB-dump";
$strName = "Backup af database";
$strDone = "Downloadet d.";
$strat = "kl.";
$date_jour = date ("d-m-Y");
header("Content-disposition: filename=$strFileName $dbname $date_jour.sql");
header("Content-type: application/ms-download");
header("Pragma: no-cache");
header("Expires: 0");
// doing some DOS-CRLF magic...
$client = getenv("HTTP_USER_AGENT");
if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs))
{
$os = $regs[1];
// this looks better under WinX
if (eregi("Win",$os))
$crlf="\r\n";
}
function my_handler($sql_insert)
{
global $crlf;
echo "$sql_insert;$crlf";
}
// Get the content of $table as a series of INSERT statements.
// After every row, a custom callback function $handler gets called.
// $handler must accept one parameter ($sql_insert);
function get_table_content($db, $table, $handler)
{
$result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
$i = 0;
while($row = mysql_fetch_row($result))
{
$table_list = "(";
for($j=0; $j<mysql_num_fields($result);$j++)
$table_list .= mysql_field_name($result,$j).", ";
$table_list = substr($table_list,0,-2);
$table_list .= ")";
if(isset($GLOBALS["showcolumns"]))
$schema_insert = "INSERT INTO $table $table_list VALUES (";
else
$schema_insert = "INSERT INTO $table VALUES (";
for($j=0; $j<mysql_num_fields($result);$j++)
{
if(!isset($row[$j]))
$schema_insert .= " NULL,";
elseif($row[$j] != "")
$schema_insert .= " '".addslashes($row[$j])."',";
else
$schema_insert .= " '',";
}
$schema_insert = ereg_replace(",$", "", $schema_insert);
$schema_insert .= ")";
$handler(trim($schema_insert));
$i++;
}
return (true);
}
// Return $table's CREATE definition
// Returns a string containing the CREATE statement on success
function get_table_def($db, $table, $crlf)
{
$schema_create = "";
$schema_create .= "DROP TABLE IF EXISTS $table; CREATE TABLE $table ($crlf";
$result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
while($row = mysql_fetch_array($result))
{
$schema_create .= " $row[Field] $row[Type]";
if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
$schema_create .= " DEFAULT '$row[Default]'";
if($row["Null"] != "YES")
$schema_create .= " NOT NULL";
if($row["Extra"] != "")
$schema_create .= " $row[Extra]";
$schema_create .= ",$crlf";
}
$schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
$result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
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))
{
$schema_create .= ",$crlf";
if($x == "PRIMARY")
$schema_create .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
elseif (substr($x,0,6) == "UNIQUE")
$schema_create .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
else
$schema_create .= " KEY $x (" . implode($columns, ", ") . ")";
}
$schema_create .= "$crlf)";
return (stripslashes($schema_create));
}
function mysql_die($error = "")
{
echo "<b> $strError </b><p>";
if(isset($sql_query) && !empty($sql_query))
{
echo "$strSQLQuery: <pre>$sql_query</pre><p>";
}
if(empty($error))
echo $strMySQLSaid.mysql_error();
else
echo $strMySQLSaid.$error;
echo "<br><a href=\"java script:history.go(-1)\">$strBack</a>";
exit;
}
global $bruger, $dbhost, $dbuname, $dbpass, $dbname;
mysql_connect($dbhost, $dbuname, $dbpass);
@mysql_select_db("$dbname") or die ("Kunne ikke forbinde til databasen");
$tables = mysql_list_tables($dbname);
$num_tables = @mysql_numrows($tables);
if($num_tables == 0)
{
echo $strNoTablesFound;
}
else
{
$i = 0;
$heure_jour = date ("H:i");
print "# ========================================================$crlf";
print "#$crlf";
print "# $strName : $dbname$crlf";
print "# $strDone $date_jour $strat $heure_jour $crlf";
print "#$crlf";
print "# ========================================================$crlf";
print "$crlf";
while($i < $num_tables)
{
$table = mysql_tablename($tables, $i);
print $crlf;
print "# --------------------------------------------------------$crlf";
print "#$crlf";
print "# $strTableStructure '$table'$crlf";
print "#$crlf";
print $crlf;
echo get_table_def($dbname, $table, $crlf).";$crlf$crlf";
print "#$crlf";
print "# $strDumpingData '$table'$crlf";
print "#$crlf";
print $crlf;
get_table_content($dbname, $table, "my_handler");
$i++;
}
}
?>
mit problem er at det ikke er alle og enhver der skal kunne lave denne backup og der er derfor noget login check inden dette bliver udført. og der gør at jeg får følgende fejl:
Warning: Cannot modify header information - headers already sent by (output started at c:\php\pear\config.php:89) in c:\php\pear\backupInc.php on line 28
er der en vej uden om det problem uden at skulle rette i det forgående jeg har lavet?
Kan det måske laves på en anden måde hvor jeg ikke behøver at ændre header information?
