Avatar billede learner Praktikant
04. november 2006 - 13:00 Der er 10 kommentarer og
1 løsning

kan denne mysql backup funktion tilpasses utf-8

Hej, jeg har brugt denne backup-funktion til at tage backup af mine mysql databaser og nu har jeg bygget et nyt system som bruger unicode eller utf-8 som det hedder. Men nu virker den gamle backup-funktion ikke mere. Kan man tilpasse funktionen, så den også virker på utf-8 specielle tegn osv.

Jeg håber der sidder en der kan hjælpe mig med dette.

På forhånd tak :o)








function backup_database($Host,$User,$Password,$Database){
    #%% Backup function
    // det kan jo godt tage lidt tid på en større DB
    @set_time_limit(600);
    $strNoTablesFound = "Ingen databasetabeller fundet";
    $strHost = "Host";
    $crlf="\n";
    $strDatabase = "Database ";
    $strTableStructure = "Struktur for tabel";
    $strDumpingData = "Indhold af tabel";
    $strErrorMsg = "Fejl";
    $strSQLQuery = "SQL-query";
    $strMySQLSaid = "MySQL: ";
    $strBack = "Tilbage";
    $strFileName = "Backup";
    $strNameBackupAfDB = "Backup af database";
    $strDone = "Downloadet d.";
    $strat = "kl.";
    $date_jour = date ("d-m-Y");
   
    header("Content-disposition: filename=$strFileName $Database $date_jour.sql");
    header("Content-type: application/ms-download");
    header("Pragma: no-cache");
    header("Expires: 0");
   
    $client = $_SERVER["HTTP_USER_AGENT"];
    if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs)){
        $os = $regs[1];
        if (eregi("Win",$os)){
            $crlf="\r\n";
        }
    }
   
    function my_handler($sql_insert){
        echo $sql_insert;
    }
   
    function get_table_content($db, $table, $handler, $crlf){
        $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 .= ")";
           
            $schema_insert = "INSERT INTO $table $table_list VALUES (";
            // $schema_insert = "INSERT INTO $table VALUES (";
               
            for($j=0; $j<mysql_num_fields($result);$j++){
                if(!isset($row[$j])){
                    $schema_insert .= " NULL,";
                } else if($row[$j] != ""){
                    $schema_insert .= " '".addslashes($row[$j])."',";
                } else {
                    $schema_insert .= " '',";
                }
            }
            $schema_insert = ereg_replace(",$", "", $schema_insert);
            $schema_insert = trim($schema_insert);
            $schema_insert .= ");".$crlf;
            $handler($schema_insert);
            $i++;
        }
        return (true);
    }
   
    function get_table_def($db, $table, $crlf){
        $schema_create = "";
        $schema_create .= "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, ", ") . ")";
            } else if (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> $strErrorMsg </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, $Host, $User, $Password, $Database;
    mysql_connect($Host, $User, $Password);
    @mysql_select_db("$Database") or die ("Kunne ikke forbinde til databasen");
   
    $tables = mysql_list_tables($Database);
       
    $num_tables = @mysql_numrows($tables);
    if($num_tables == 0){
        echo $strNoTablesFound;
    } else {
        $i = 0;
        $heure_jour = date ("H:i");
        print "# ========================================================".$crlf;
        print "#".$crlf;
        print "# $strNameBackupAfDB : $Database".$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($Database, $table, $crlf).";".$crlf.$crlf;
           
            print "#".$crlf;
            print "# $strDumpingData '$table'".$crlf;
            print "#".$crlf;
            print $crlf;
           
            get_table_content($Database, $table, "my_handler", $crlf);
           
            $i++;
        }
    }
}
Avatar billede jakobdo Ekspert
05. november 2006 - 10:30 #1
Skal den levere data i utf8 format?
Eller skal den levere data fra utf8 format?
Avatar billede jakobdo Ekspert
05. november 2006 - 10:31 #2
Du skal kigge på funktionerne: utf8_decode() og utf8_encode()
Avatar billede learner Praktikant
05. november 2006 - 10:48 #3
hmmm okay, kan du forklare lidt mer?

levere i / levere fra ??

databasen mysql ver 5 og er sat til utf8 og den skal gemme i filen i utf8. jeg ved ik om den skal lave filen på en anden måde, fx uden BOM eller i utf8 format eller hvad det hedder. Jeg vil gerne have samme resultat i filen som hvis jeg tageren backup inde i phpmyadmin
Avatar billede jakobdo Ekspert
05. november 2006 - 10:51 #4
Og du printer alt indhold til en side?
Du skriver det ikke til en fil vel?
Avatar billede learner Praktikant
05. november 2006 - 19:38 #5
jo det blir til en fil.
Avatar billede jakobdo Ekspert
05. november 2006 - 19:49 #6
Hvad hvis du tilføjer denne header: header("Content-type: text/css; charset=UTF-8");
Og så bruger du funktionen: utf8_encode() på alle data som skal gemmes.
Avatar billede learner Praktikant
21. november 2006 - 01:57 #7
jow,

Der køres automatisk header("Content-type: text/css; charset=UTF-8"); i starten inden funktionen køres, så den skulle være på plads.

kunne du evt give et bud på hvor vil du indsætte utf8_encode() i funktionen?

jeg har fået mail() til at virke med utf8 ved at tilføje "MIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8" efter From:
ca sådan: mail(til,subj,text,"from:navn<email>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8)
måske skal man gøre noget lignende i funktionen??

:o)
Avatar billede jakobdo Ekspert
21. november 2006 - 08:03 #8
Alle seder hvor du bruger print.
F.eks.:

print utf8_encode($crlf);
print utf8_encode("# $strDumpingData '$table'".$crlf);
osv...
Avatar billede learner Praktikant
27. november 2008 - 00:20 #9
Hey :o) Den her tråd er vist gået lidt i stå :o)

Skal vi lukke den? Hvad siger i til at vi deler pointene lidt? Smid et svar! ;o)
Avatar billede jakobdo Ekspert
27. november 2008 - 08:47 #10
Svar!
Avatar billede jakobdo Ekspert
27. november 2008 - 14:50 #11
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester