Visualizzazione risultati 1 fino 2 di 2

Discussione: Funzione php per tracciare i programmi (magari può servire)

  1. #1
    Data registrazione
    15-04-2012
    Messaggi
    4

    Predefinito Funzione php per tracciare i programmi (magari può servire)


    Come già postato nella sezione Javascript (Funzione javascript per tracciare i programmi (magari può servire))
    ho provato a fare una cosa simile anche per tracciare programmi in php. La differenza sostanziale è che usando
    il php ho dovuto appoggiarmi ad una tabella per memorizzare i messaggi da visualizzare in un passaggio
    successivo. La tabella viene creata definita così:
    CREATE TABLE trace (
    indent INT NOT NULL,
    messaggio TEXT CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL);

    Il codice che ci permette di inserire i record messaggi è questo (nome file Trace.php):
    Codice PHP:
    <?php
    include 'Db_trace_handler.php';
    $indentazione = 3; // Numero di spazi per ogni successiva indentazione
    $livello = 0; // Influisce sul margine sinistro della visualizzazione
    $font = 12; // Dimensione dei fonts

    function Traccia($msg,$indent)
    {
    global
    $livello;

    $db = new Database();
    $campi[0] = "indent"; $valori[0] = $livello;
    $campi[1] = "messaggio"; $valori[1] = $msg;

    switch (
    $indent)
    {
    case
    "+": $campi[0] = "indent"; $valori[0] = $livello;
    $campi[1] = "messaggio"; $valori[1] = "-->".$msg;
    $livello++;
    break;
    case
    "-": $livello--;
    $campi[0] = "indent"; $valori[0] = $livello;
    $campi[1] = "messaggio"; $valori[1] = "<--".$msg;
    break;
    default:
    $campi[0] = "indent"; $valori[0] = $livello+$indent;
    $campi[1] = "messaggio"; $valori[1] = $msg;
    }
    $db->Inserisci("trace",$campi,$valori);
    $db->close();
    }

    function
    Leggi()
    {
    global
    $font;
    global
    $indentazione;

    $db = new Trace_Db();
    $db->Query("SELECT * FROM trace ");
    $result = $db->data;
    echo
    '<p style="font-family:courier;color:black;font-size:'.$font.'px;">';
    for (
    $i=0; $i<$db->record_trovati; $i++)
    {
    $indent = $result[$i]['indent'];
    $messaggio = $result[$i]['messaggio'];
    $messaggio = str_repeat('&nbsp;',($indent*$indentazione)).$messaggio;
    echo
    $messaggio."<br>";
    }
    echo
    '</p>';
    $db->close();
    }

    function
    Cancella()
    {
    $db = new Trace_Db();
    $db->Delete();
    $db->close();
    }
    ?>
    Come si vede nel codice di Trace.php viene incluso il codice (scusate la ripetizione) di un altro
    file (Db_trace_handler.php) che gestisce le registrazione e le letture della tabella. Questo è
    il contenuto:
    Codice PHP:
    <?php
    class Trace_Db
    {
    private
    $host = "";
    private
    $user = "";
    private
    $pass = "";
    private
    $name = "";
    private
    $link;
    public
    $error;
    public
    $errno;
    public
    $query_result;
    public
    $record_trovati;
    public
    $data;
    private
    $res;

    //-------
    // Costruttore della classe. Richiama la connect
    // function __construct($host, $user, $pass, $name = "", $conn = 1)
    function __construct()
    {
    $this->res = $this->connect();
    if (!
    $this->res) {throw new Exception("Errore di connessione al database");}
    return;
    }
    //-------
    public function connect()
    {
    if (!
    $link = mysql_connect($this->host, $this->user, $this->pass))
    {
    $this->exception("Errore di connessione al database!"); return false; }
    if (!
    mysql_select_db($this->name))
    {
    $this->exception("Errore di connessione alla tabella"); return false; }
    return
    true;
    }
    //-------
    function __destruct()
    { @
    mysql_close($this->link); }
    //-------
    // Chiusura della connessione
    public function close() { @mysql_close($this->link); }
    //-------
    // Interrogazione di una tabella
    // Parametri:
    // $riga = Stringa contenente la query completa
    public function Query($riga)
    {
    $this->data = array();
    $this->record_trovati = 0;
    if (
    $this->query_result = @mysql_query($riga))
    {
    while (
    $row = $this->Dammi_records_entrambi_indici($this->query_result)) $this->data[] = $row;
    $this->record_trovati = mysql_num_rows($this->query_result);
    return
    true;
    }
    else return
    false;
    }
    //-------
    // Inserisce un record in tabella
    // Parametri:
    // $tabella = Nome della tabella da interrogare
    // $fields = Array di nomi campo della tabella
    // $valori = Array di valori per i campi definiti
    // Ritorna true = ok false = ko
    public function Inserisci($tabella,$fields,$valori)
    {
    $riga = "INSERT INTO ".$tabella." (";
    for (
    $i=0; $i<count($fields); $i++)
    {
    if (
    $i+1 == count($fields)) $riga .= $fields[$i].") ";
    else
    $riga .= $fields[$i].",";
    }
    $riga .= "VALUES (";
    for (
    $i=0; $i<count($fields); $i++)
    {
    if (
    is_numeric($valori[$i]))
    {
    if (
    $i+1 == count($fields)) $riga .= $valori[$i].")";
    else
    $riga .= $valori[$i].",";
    }
    else
    {
    if (
    $i+1 == count($fields)) $riga .= "'".$valori[$i]."')";
    else
    $riga .= "'".$valori[$i]."',";
    }
    }
    @
    mysql_query($riga);
    if (
    mysql_affected_rows() >= 0) return true;
    else return
    false;
    }
    //-------
    // Cancella un record dalla tabella
    // $tabella = Nome della tabella da interrogare
    // Ritorna true = ok false = ko
    public function Delete()
    {
    $riga = "DELETE FROM trace";
    if (
    $this->query_result = @mysql_query($riga))
    {
    if (
    mysql_affected_rows() > 0) return true;
    else return
    false;
    }
    $this->error = mysql_error();
    return
    false;
    }
    //-------
    // Parametri:
    // $result = Oggetto ritornato da una query
    // Senza uno di questi parametri (MYSQL_ASSOC, MYSQL_NUM e MYSQL_BOTH) per default
    // viene usato MYSQL_BOTH. Si ottiene un array con entrambe gli indici (associativo e numerico)
    // $riga[0], $riga["nome del campo"]
    // Esempio while ($a = $db->fetch_array_assoc($r))
    // echo "{$a[0]} {$a['nome']}\n";
    public function Dammi_records_entrambi_indici($result)
    {
    if (empty(
    $result))
    {
    $this->exception("E' stata eseguita nessuna query"); return false; }
    else
    $data = mysql_fetch_array($result);
    return
    $data;
    }
    //-------
    private function exception($message)
    {
    if (
    $this->link)
    {
    $this->error = mysql_error($this->link);
    $this->errno = mysql_errno($this->link);
    }
    else
    {
    $this->error = mysql_error();
    $this->errno = mysql_errno();
    }
    }
    }
    ?>
    Le personalizzazioni da apportare riguardano le seguenti variabili:
    Codice PHP:
    private $host = ""; // host del database
    private $user = ""; // utente per l'accesso al database
    private $pass = ""; // password per l'accesso al database
    private $name = ""; // nome del database
    Vediamo ora come usare il tutto.
    Nella pagina con il codice da debuggare bisogna inserire l'inclusione di Trace.php
    include 'Trace.php';

    Nei punti del codice da testare bisogna eseguire la chiamata all funzione Traccia
    Traccia(par1,par2);
    par1 = Messaggio da visualizzare. Si può comporlo ovviamente con le variabili da controllare.
    Traccia("Id = ".$id." Padre = ".$padre,"0");
    par2 = "+", "-", "un numero per l'indentazione"
    Il "+" ed il "-" devono essere usati per tracciare l'entrata e l'uscita nelle routines.
    Es: Routine1() { Traccia("Routine1","+"); istruzioni php; Traccia("Routine1","-");}
    Le due chiamate comportano la visualizzazione di -->Routine1 e <--Routine1. --> e <-- sono aggiunti per individuare
    l'ingresso e l'uscita delle routines. Inoltre il + incrementerà il livello di indentazione dei prossimi messaggi
    mentre il - lo diminuirà.
    "un numero per l'indentazione" Il numero specificato viene moltiplicato per la variabile definita in Trace.php ($indentazione = 3;)
    quindi lo 0 lascia inalterata l'indentazione che trova al momento della chiamata a Trace, l'1 indenta di tre, il 2 indenta di 6 e così via.
    Normalmente si usa lo "0" però possiamo evidenziare certe parti di codice modificando l'indentazione dei messaggi.

    Riassumendo estendendo l'esempio precedente:
    Codice PHP:
    function Routine1()
    {
    $prova = 10;
    Traccia("Routine1","+");
    Traccia("Variabile prova = ".$prova,"0");
    Routine2();
    Traccia("Quello che mi pare","0");
    Traccia("Routine1","-");
    }

    function
    Routine2()
    {
    $prova = 20;
    Traccia("Routine2","+");
    Traccia("Variabile prova = ".$prova,"0");
    Traccia("Quello che voglio","0");
    Traccia("Routine2","-");
    }
    comporterà sulla nuova finestra la seguente messaggistica:
    Codice:
    -->Routine1
       Variabile prova = 10
       -->Routine2
          Variabile prova = 20
          Quello che voglio
       <--Routine2
       Quello che mi pare
    <--Routine1
    Vediamo ora come visualizzare i messaggi. Le chiamate da usare sono Leggi(); per visualizzare i messaggi e Cancella();
    per eliminarli. Io, per farla semplice seplice ho creato due file php che mando in esecuzione quando mi servono e che
    sono uno
    Codice PHP:
    <?php
    include 'Trace.php';
    Leggi();
    ?>
    e l'altro
    Codice PHP:
    <?php
    include 'Trace.php';
    Cancella();
    ?>
    Segnalate pure errori e/o migliorie
    Ultima modifica di alemoppo : 15-02-2014 alle ore 00.54.54 Motivo: +tag

  2. #2
    Data registrazione
    15-04-2012
    Messaggi
    4

    Predefinito

    [QUOTE=radiolanversilia;1107056]
    Chiede scusa ma c'è un errore nel file Trace.php
    Sostituire l'istruzione $db = new Database(); con $db = new Trace_Db();

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •