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