Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    creare un dump con PHP da codice

    Ciao a tutti,

    come faccio a creare un dump con PHP da codice?..Si può fare o devo rinunciarci?..

    grazie

  2. #2
    dimensitavo, su db mysql..

    nessuno che mi aiuta?

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Avevo buttato giù un pò di codice per il tuo problema ma poi
    ho trovato questo script che è decisamente migliore.

    http://freephp.html.it/programmatori...ipt.asp?id=249

    P.S. Per farlo funzionare ho dovuto commentare tre righe in cui vi
    erano degli header perchè altrimenti mi restituiva il classico errore
    headers already sent e ho modificato una riga di una funzione
    fileopen in cui il permesso era wb con w+.
    Anzi, se qualcuno fosse così gentile da dirmi cosa significa wb e il perchè di questi header gliene sarei grato.
    Immagino che se l'autore degli script li ha inseriti avessero una loro funzione.

  4. #4
    Originariamente inviato da nicola75ss
    ...e ho modificato una riga di una funzione
    fileopen in cui il permesso era wb con w+.
    Anzi, se qualcuno fosse così gentile da dirmi cosa significa wb e il perchè di questi header gliene sarei grato.
    Immagino che se l'autore degli script li ha inseriti avessero una loro funzione.
    dal manu di php:
    Windows ha un flag di traduzione della modalità testo ('t') che in modo trasparente converte \n in \r\n mentre si lavora sul file. Ovviamente si ha anche il flag 'b' per forzare una modalità binaria, nella quale non si ha la conversione dei dati. Se si usano questi flag, 'b' oppure 't', devono essere posizionati come ultimo carattere del parametro mode
    www.bitmade.com Momentan ist richtig_Momentan ist gut_Nicht ist wirklich wichtig_Nach der Ebbe kommt die Flut_ _Am Strand des Lebens_ohne Grund,ohne Verstand_ist nichts vergebens_ich baue di traeume auf den Sand.

  5. #5
    grazie...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Grazie della spiegazione ScassaBubu.
    Mi sai spiegare il perchè degli header inseriti nel bel mezzo del codice (parlo in generale non del file specifico che ovviamente non avrai sotto mano).
    Ho già visto diversi script strutturati così senza nessuna funzione di ob_start() eccetera.
    E' possibile che si tratti sempre di errori dei programmatori? O, come credo, è più probabile che sia io a non saperli sfruttare appieno?

  7. #7
    Originariamente inviato da nicola75ss
    Grazie della spiegazione ScassaBubu.
    Mi sai spiegare il perchè degli header inseriti nel bel mezzo del codice (parlo in generale non del file specifico che ovviamente non avrai sotto mano).
    Ho già visto diversi script strutturati così senza nessuna funzione di ob_start() eccetera.
    E' possibile che si tratti sempre di errori dei programmatori? O, come credo, è più probabile che sia io a non saperli sfruttare appieno?
    ob_start() è una funzione per il controllo del buffering...ed è utili in tutti quei casi dove nn sia possibile nn mandare in output qualcosa prima dell'invio delle intestazioni (header che come suggerisce la parola vanno in testa a tutto ).
    nb:
    l'invio di output puo essere generato anche ad esempio da una riga vuota prima del tag di apertura di php <?php
    www.bitmade.com Momentan ist richtig_Momentan ist gut_Nicht ist wirklich wichtig_Nach der Ebbe kommt die Flut_ _Am Strand des Lebens_ohne Grund,ohne Verstand_ist nichts vergebens_ich baue di traeume auf den Sand.

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Questo lo so.
    E' proprio per questo che non capisco come mai ci siano degli header nel bel mezzo del codice quando l'output è già bello che inviato.

    Questo è il codice completo dello script in questione
    Codice PHP:

    <?php

    ###################################################
    #                                                 #
    #  PhpEasyDump v0.1                               #
    #                                                 #
    #  Autore: Gabriele Cannizzaro aka Scitrek        #
    #                                                 #
    #  L'utilizzo è libero per scopi NON commerciali  #
    #                                                 #
    ###################################################


    function list_tables($db_name) {
        
    $sql_query mysql_list_tables($db_name);
        for (
    $i=0$i<mysql_num_rows($sql_query); $i++) {
            
    $sql_tabs[] = mysql_tablename($sql_query$i);
        }
        return 
    $sql_tabs;
    }

    function 
    dump_structure($table) {
        
    $sql_query mysql_query("SHOW CREATE TABLE ".$table);
        
    $sql_array mysql_fetch_row($sql_query);
        return 
    $sql_array[1].";";
    }

    function 
    dump_data($table) {
         
    $content "";
         
    $sql_query mysql_query("SELECT * FROM ".$table);
         while (
    $sql_row mysql_fetch_row($sql_query)) {
             
    $content .= "INSERT INTO `".$table."` VALUES (";
             for(
    $i=0$i<mysql_num_fields($sql_query); $i++) {
                if (!isset(
    $sql_row[$i])) {$content .= "NULL,";}
                elseif (
    $sql_row[$i] !== "") {$content .= "'".addslashes($sql_row[$i])."', ";}
                else {
    $content .= "'', ";}
             }
             
    $content substr($content,0,-2);
             
    $content .= ");\n";
         }
         return 
    substr($content,0,-1);
    }

    function 
    data() {
        
    $giorni = array("Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato");
        
    $mesi = array("","Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre");
        return 
    $giorni[date("w")]." ".date("j")." ".$mesi[date("n")]." ".date ("Y");
    }

    function 
    ora() {return date("H:i");}

    if (!isset(
    $_SERVER)) {$_SERVER $HTTP_SERVER_VARS;}

    $sysname "PhpEasyDump v0.1";
    $version "0.1";

    if (isset(
    $_POST['action']) && $_POST['action'] == "dump") {
        
    $con = @mysql_connect($_POST['db_host'],$_POST['db_user'],$_POST['db_pass']); if(!$con) exit("[b]ERRORE[/b]: Impossibile stabilire una connessione al database MySQL.");
        
    $sel = @mysql_select_db($_POST['db_name']); if(!$sel) exit("[b]ERRORE[/b]: Impossibile selezionare il database MySQL.");
        
    $sql_tables list_tables($_POST['db_name']);

    $dump "# PhpEasyDump v0.1
    # Autore: Gabriele Cannizzaro aka Scitrek
    # L'utilizzo è libero per scopi NON commerciali
    #
    # Host: "
    .$_POST['db_host']."
    # Generato: "
    .data()." alle ore ".ora()."
    # Versione MySQL: "
    .mysql_get_server_info()."
    # Versione PHP: "
    .phpversion()."
    # Database : `"
    .$_POST['db_name']."`
    # --------------------------------------------------------
    "
    ;

        for (
    $n=0$n<count($sql_tables); $n++) {
    $dump .= "
    #
    # Struttura della tabella `"
    .$sql_tables[$n]."`
    #

    "
    ;

            if (
    $_POST['drop'] == "si") {$dump .= "DROP TABLE IF EXISTS `".$sql_tables[$n]."`;\n";}

    $dump .= dump_structure($sql_tables[$n])."

    #
    # Dump dei dati per la tabella `"
    .$sql_tables[$n]."`
    #

    "
    .dump_data($sql_tables[$n])."
    # --------------------------------------------------------
    "
    ;
        }

        
    $dump substr($dump,0,-62);

        
    $fname $_POST['prefix']."backup.sql";
        if (
    file_exists($fname)) {unlink($fname);}
        
    $fopen fopen($fname"wb");
        
    fwrite($fopen$dump);
        
    fclose($fopen);
        
    header("Content-type: \"application/octet-stream\"");
        
    header("Content-Disposition: attachment; filename=\"".basename($fname)."\"");
        
    header("Content-transfer-encoding: \"binary\"");     readfile($fname);
        
    unlink($fname);
    }
    else {
        echo 
    "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
    <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
    <html xmlns=\"http://www.w3.org/1999/xhtml\">
    <head>
     <title>PhpEasyDump</title>
     <style>
      .menu_table {
       background-color: #505050;
       border: 0px;
       width: 370px;
      }

      .menu_td {
       font-family: Tahoma, Verdana, sans-serif;
       font-size: 10px;
       font-weight: bold;
       border-color: #000000;
       background-color: #E9EDF5;
       cursor: hand;
       width: 20%;
       text-align: center;
      }

      .body_td {
       font-family: Tahoma, Verdana, sans-serif;
       font-size: 12px;
       font-weight: bold;
       border-color: #000000;
       background-color: #FFFFFF;
       cursor: hand;
       width: 100%;
       text-align: center;
       padding: 10px;
      }
     </style>
    </head>

    <body>


    <div align=\"center\">
     <table class=\"menu_table\" cellpadding=\"2\" cellspacing=\"1\">
      <tr>
       <td class=\"menu_td\">
        PhpEasyDump v0.1
       </td>
      </tr>
     </table>
    </div>






    <div align=\"center\">
     <table class=\"menu_table\" cellpadding=\"2\" cellspacing=\"1\">
      <tr>
       <td class=\"body_td\">
         <form name=\"dump_form\" action=\""
    .basename($_SERVER['PHP_SELF'])."\" method=\"post\">
          <input type=\"hidden\" name=\"action\" value=\"dump\"></input>
          [b]Host[/b]

          <input type=\"text\" name=\"db_host\" size=\"15\" maxlength=\"15\"></input>


          [b]Username[/b]

          <input type=\"text\" name=\"db_user\" size=\"15\" maxlength=\"15\"></input>


          [b]Password[/b]

          <input type=\"password\" name=\"db_pass\" size=\"15\" maxlength=\"10\"></input>


          [b]Nome del database[/b]

          <input type=\"text\" name=\"db_name\" size=\"15\" maxlength=\"15\"></input>



          <input type=\"checkbox\" name=\"drop\" value=\"si\">Aggiungi 'drop table'</input>


          <input type=\"submit\" value=\"Esegui dump\"></input>
         </form>
       </td>
      </tr>
     </table>
    </div>






    <div align=\"center\">
     <table class=\"menu_table\" cellpadding=\"2\" cellspacing=\"1\">
      <tr>
       <td class=\"menu_td\">
        Copyright &copy; 2003 Gabriele Cannizzaro [Scitrek] - Tutti i diritti riservati
       </td>
      </tr>
     </table>
    </div>


    </body>
    </html>"
    ;
    }

    ?>
    E queste sono le righe "incriminate":
    header("Content-type: \"application/octet-stream\"");
    header("Content-Disposition: attachment; filename=\"".basename($fname)."\"");
    header("Content-transfer-encoding: \"binary\"");

    Scusa ma non sapevo come evidenziarle nel codice all'interno dei tag
    [PHP]

  9. #9
    scusa se lo ripeto ma per output si intende anche e sopratutto output html...cosa che nn vedo inviata nel codice in questione...
    Nello script in questione (l'ho scaricato e testato) nn c'è nessun errore (quindi nessun invio in output prima degli header)...prob sbagli qualcosa tu nel posizionarlo!
    fai attenzione per esempio con gli include.
    www.bitmade.com Momentan ist richtig_Momentan ist gut_Nicht ist wirklich wichtig_Nach der Ebbe kommt die Flut_ _Am Strand des Lebens_ohne Grund,ohne Verstand_ist nichts vergebens_ich baue di traeume auf den Sand.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.