home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 April / PCWorld_2005-04_cd.bin / akce / web / unitednuke / unitednuke.exe / html / admin / modules / backup.php < prev    next >
PHP Script  |  2004-01-10  |  8KB  |  256 lines

  1. <?php
  2.  
  3. /************************************************************************/
  4. /* PHP-NUKE: Web Portal System                                          */
  5. /* ===========================                                          */
  6. /*                                                                      */
  7. /* Save the database of a PHPNuke web site                              */
  8. /*                                                                      */
  9. /* Copyright (c) 2001 by Thomas Rudant (thomas.rudant@grunk.net)        */
  10. /* http://www.grunk.net                                                 */
  11. /* http://www.securite-internet.org                                     */
  12. /*                                    */
  13. /* This program is free software. You can redistribute it and/or modify */
  14. /* it under the terms of the GNU General Public License as published by */
  15. /* the Free Software Foundation; either version 2 of the License.       */
  16. /************************************************************************/
  17.  
  18. if (!eregi("admin.php", $_SERVER['PHP_SELF'])) { die ("Access Denied"); }
  19. global $prefix, $db;
  20. $aid = substr(trim($aid), 0,25);
  21. $row = $db->sql_fetchrow($db->sql_query("SELECT name, radminsuper FROM ".$prefix."_authors WHERE aid='$aid'"));
  22. $name = $row['name'];
  23. $radminsuper = $row['radminsuper'];
  24.  
  25. if ($radminsuper==1) {
  26.  
  27.     switch($op) {
  28.     
  29.         case "backup":
  30.         @set_time_limit(600);
  31.         $crlf="\n";
  32.  
  33.         switch($lang)
  34.         {
  35.             case french : 
  36.                 // French Text
  37.                 $strNoTablesFound    = "Aucune table n'a ΘtΘ trouvΘe dans cette base.";
  38.                 $strHost        = "Serveur";
  39.                 $strDatabase        = "Base de donnΘes";
  40.                 $strTableStructure    = "Structure de la table";
  41.                 $strDumpingData        = "Contenu de la table";
  42.                 $strError        = "Erreur";
  43.                 $strSQLQuery        = "requΩte SQL";
  44.                 $strMySQLSaid        = "MySQL a rΘpondu:";
  45.                 $strBack        = "Retour";
  46.                 $strFileName        = "Sauvegarde BD";
  47.                 $strName        = "Sauvegarde de la base de donnΘes";
  48.                 $strDone        = "effectuΘe le";
  49.                 $strat            = "α";
  50.                 $strby            = "par";
  51.                 $date_jour = date ("d-m-Y");
  52.                 break;
  53.                 
  54.             default :
  55.                 // English Text    
  56.                 $strNoTablesFound = "No tables found in database.";
  57.                 $strHost = "Host";
  58.                 $strDatabase = "Database ";
  59.                 $strTableStructure = "Table structure for table";
  60.                 $strDumpingData = "Dumping data for table";
  61.                 $strError = "Error";
  62.                 $strSQLQuery = "SQL-query";
  63.                 $strMySQLSaid = "MySQL said: ";
  64.                 $strBack = "Back";
  65.                 $strFileName = "Save Database";
  66.                 $strName = "Database saved";
  67.                 $strDone = "On";
  68.                 $strat = "at";
  69.                 $strby = "by";
  70.                 $date_jour = date ("m-d-Y");        
  71.                 break;
  72.         }
  73.         
  74.         header("Content-disposition: filename=$strFileName $dbname $date_jour.sql");
  75.         header("Content-type: application/octetstream");
  76.         header("Pragma: no-cache");
  77.         header("Expires: 0");
  78.         
  79.         // doing some DOS-CRLF magic...
  80.         $client = $_SERVER["HTTP_USER_AGENT"];
  81.         if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs)) 
  82.         {
  83.         $os = $regs[1];
  84.         // this looks better under WinX
  85.         if (eregi("Win",$os)) 
  86.             $crlf="\r\n";
  87.         }
  88.         
  89.         
  90.         function my_handler($sql_insert)
  91.         {
  92.             global $crlf;
  93.             echo "$sql_insert;$crlf";
  94.         }
  95.         
  96.         // Get the content of $table as a series of INSERT statements.
  97.         // After every row, a custom callback function $handler gets called.
  98.         // $handler must accept one parameter ($sql_insert);
  99.         function get_table_content($db, $table, $handler)
  100.         {
  101.             $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
  102.             $i = 0;
  103.             while($row = mysql_fetch_row($result))
  104.             {
  105.         //        set_time_limit(60); // HaRa
  106.                 $table_list = "(";
  107.  
  108.                 for($j=0; $j<mysql_num_fields($result);$j++)
  109.                     $table_list .= mysql_field_name($result,$j).", ";
  110.         
  111.                 $table_list = substr($table_list,0,-2);
  112.                 $table_list .= ")";
  113.         
  114.                 if(isset($GLOBALS["showcolumns"]))
  115.                     $schema_insert = "INSERT INTO $table $table_list VALUES (";
  116.                 else
  117.                     $schema_insert = "INSERT INTO $table VALUES (";
  118.         
  119.                 for($j=0; $j<mysql_num_fields($result);$j++)
  120.                 {
  121.                     if(!isset($row[$j]))
  122.                         $schema_insert .= " NULL,";
  123.                     elseif($row[$j] != "")
  124.                         $schema_insert .= " '".addslashes($row[$j])."',";
  125.                     else
  126.                         $schema_insert .= " '',";
  127.                 }
  128.                 $schema_insert = ereg_replace(",$", "", $schema_insert);
  129.                 $schema_insert .= ")";
  130.                 $handler(trim($schema_insert));
  131.                 $i++;
  132.             }
  133.             return (true);
  134.         }
  135.         
  136.         // Return $table's CREATE definition
  137.         // Returns a string containing the CREATE statement on success
  138.         function get_table_def($db, $table, $crlf)
  139.         {
  140.             $schema_create = "";
  141.             //$schema_create .= "DROP TABLE IF EXISTS $table;$crlf";
  142.             $schema_create .= "CREATE TABLE $table ($crlf";
  143.         
  144.             $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
  145.             while($row = mysql_fetch_array($result))
  146.             {
  147.                 $schema_create .= "   $row[Field] $row[Type]";
  148.         
  149.                 if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
  150.                     $schema_create .= " DEFAULT '$row[Default]'";
  151.                 if($row["Null"] != "YES")
  152.                     $schema_create .= " NOT NULL";
  153.                 if($row["Extra"] != "")
  154.                     $schema_create .= " $row[Extra]";
  155.                 $schema_create .= ",$crlf";
  156.             }
  157.             $schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
  158.             $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
  159.             while($row = mysql_fetch_array($result))
  160.             {
  161.                 $kname=$row['Key_name'];
  162.                 if(($kname != "PRIMARY") && ($row['Non_unique'] == 0))
  163.                     $kname="UNIQUE|$kname";
  164.                  if(!isset($index[$kname]))
  165.                      $index[$kname] = array();
  166.                  $index[$kname][] = $row['Column_name'];
  167.             }
  168.         
  169.             while(list($x, $columns) = @each($index))
  170.             {
  171.                  $schema_create .= ",$crlf";
  172.                  if($x == "PRIMARY")
  173.                      $schema_create .= "   PRIMARY KEY (" . implode($columns, ", ") . ")";
  174.                  elseif (substr($x,0,6) == "UNIQUE")
  175.                     $schema_create .= "   UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
  176.                  else
  177.                     $schema_create .= "   KEY $x (" . implode($columns, ", ") . ")";
  178.             }
  179.         
  180.             $schema_create .= "$crlf)";
  181.             return (stripslashes($schema_create));
  182.         }
  183.         
  184.         function mysql_die($error = "")
  185.         {
  186.             echo "<b> $strError </b><p>";
  187.             if(isset($sql_query) && !empty($sql_query))
  188.             {
  189.                 echo "$strSQLQuery: <pre>$sql_query</pre><p>";
  190.             }
  191.             if(empty($error))
  192.                 echo $strMySQLSaid.mysql_error();
  193.             else
  194.                 echo $strMySQLSaid.$error;
  195.             echo "<br><a href=\"javascript:history.go(-1)\">$strBack</a>";
  196.             exit;
  197.         }
  198.         
  199.         global $dbhost, $dbuname, $dbpass, $dbname;
  200.         mysql_pconnect($dbhost, $dbuname, $dbpass);
  201.         @mysql_select_db("$dbname") or die ("Unable to select database");
  202.         
  203.         $tables = mysql_list_tables($dbname);
  204.         
  205.         $num_tables = @mysql_numrows($tables);
  206.         if($num_tables == 0)
  207.         {
  208.             echo $strNoTablesFound;
  209.         }
  210.         else
  211.         {
  212.             $i = 0;
  213.             $heure_jour = date ("H:i");
  214.             print "# ========================================================$crlf";
  215.             print "#$crlf";
  216.             print "# $strName : $dbname$crlf";
  217.             print "# $strDone $date_jour $strat $heure_jour $strby $name !$crlf";
  218.             print "#$crlf";
  219.             print "# ========================================================$crlf";
  220.             print "$crlf";
  221.             
  222.             while($i < $num_tables)
  223.             { 
  224.                 $table = mysql_tablename($tables, $i);
  225.         
  226.                 print $crlf;
  227.                 print "# --------------------------------------------------------$crlf";
  228.                 print "#$crlf";
  229.                 print "# $strTableStructure '$table'$crlf";
  230.                 print "#$crlf";
  231.                 print $crlf;
  232.         
  233.                 echo get_table_def($dbname, $table, $crlf).";$crlf$crlf";
  234.                 
  235.             print "#$crlf";
  236.             print "# $strDumpingData '$table'$crlf";
  237.             print "#$crlf";
  238.             print $crlf;
  239.             
  240.             get_table_content($dbname, $table, "my_handler");
  241.         
  242.                 $i++;
  243.             }
  244.         }
  245.         
  246.         //Header("Location: admin.php?op=adminMain");
  247.         break;
  248.  
  249.     }
  250.  
  251.             
  252. } else {
  253.     echo "Access Denied";
  254. }
  255.  
  256. ?>