mysql export met php script
heb volgend scriptje uit een opensource cms gehaald, hiermee kun je een volledige backup maken van je mysql database. de bedoeling is dat je een .SQL bestand krijgt met hierin alle create's en inserts!
in het opensource cms werkt dit script perfect, maar als ik het op mijn cms zelf toepas krijg ik in het .sql bestand de verkeerde inhoud.. ik krijg de volledige broncode van mijn webpagina met eronder pas de backup statements.. misschien dat iemand weet wat er fout is?
$final = '-- Comed NV database backup
--
-- PHP version: '.phpversion().'
-- MySQL version: '.mysql_get_server_info().'
';
$result = mysql_list_tables($db);
while ($table = mysql_fetch_row($result)) {
$i = 0;
$result2 = mysql_query("SHOW COLUMNS FROM $table[0]");
$z = mysql_num_rows($result2);
$final .= "\n--\n-- Comed NV - DB-Export: Table '".$table[0]."'\n--\n\nCREATE TABLE `".$table[0]."` (";
while ($row2 = mysql_fetch_assoc($result2)) {
$i++;
$final .= "`".$row2['Field']."` ".$row2['Type'];
if($row2['Null'] != "YES") { $final .= " NOT NULL"; }
if($row2['Default']) $final .= " DEFAULT '".$row2['Default']."'";
if($i < $z) $final .= ", ";
}
$final .= ");\n";
$inhaltq = mysql_query("SELECT * FROM $table[0]");
while($inhalt = mysql_fetch_array($inhaltq,MYSQL_BOTH)) {
$final .= "\nINSERT INTO `$table[0]` (";
$names = array_keys($inhalt);
$az = count($inhalt)/2; //durch 2 teilen, da array mit numerischen UND assoziativen index
for($i=0;$i<$az;$i++) {
$final .= "`".$names[(2*$i+1)]."`"; //nur die ungeraden schlüssel darstellen (gerade schlüssel -> numerischer index)
if(($i+1)<$az) $final .= ", ";
}
$final .= ") VALUES (";
for($i=0;$i<$z;$i++) {
$einschub = "'".str_replace("'","`", $inhalt[$i])."'";
$final .= preg_replace('/\r\n|\r|\n/', '\r\n', $einschub);
if(($i+1)<$z) $final .= ", ";
}
$final .= ");\n";
}
$final .= "\n";
}
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Description: File Transfer");
if(is_integer(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]), "msie")) && is_integer(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]), "win" ))) header("Content-Disposition: filename=backup.sql;");
else header("Content-Disposition: attachment; filename=backup.sql;");
header("Content-Transfer-Encoding: binary");
echo $final;
ik heb eventueel ook een mooiere oplossing:
- een script waar je zelf het 1 en ander kan instellen!
edit:
ik zie dat hier op de site al een soort gelijk script als de mijne staat:
klik
dit script maakt een bestand aan met de naam van je database..
nouja lees de comments maar in het script..
suc6
Gewijzigd op 01/01/1970 01:00:00 door Marvin S
Marvin schreef op 13.02.2007 15:24:
Wil je dat ik je script helemaal goed ga maken?
ik heb eventueel ook een mooiere oplossing:
- een script waar je zelf het 1 en ander kan instellen!
edit:
ik zie dat hier op de site al een soort gelijk script als de mijne staat:
klik
dit script maakt een bestand aan met de naam van je database..
nouja lees de comments maar in het script..
suc6
ik heb eventueel ook een mooiere oplossing:
- een script waar je zelf het 1 en ander kan instellen!
edit:
ik zie dat hier op de site al een soort gelijk script als de mijne staat:
klik
dit script maakt een bestand aan met de naam van je database..
nouja lees de comments maar in het script..
suc6
bedankt voor de tip!
maar wat eigenlijk mijn bedoeling is, is dat in plaats van het bestand op de server weg te schrijven, men het bestand lokaal kan opslaan...
dit gaat met deze headers:
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Description: File Transfer");
if(is_integer(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]), "msie")) && is_integer(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]), "win" ))) header("Content-Disposition: filename=backup.sql;");
else header("Content-Disposition: attachment; filename=backup.sql;");
header("Content-Transfer-Encoding: binary");
heb nu deze headers eens geprobeerd uw script, maar hier ook wordt de rest van de html pagina ook in het bestand weggeschreven..
dus ik zou alleen 1 variabele in dit bestand willen zetten in plaats van de hele html code enzo.
iemand nog een tip??