Benvenuto su Sebastien Costa
 Create an AccountHome | Content | Downloads | Gallery | Guestbook  

Modules
 Home
 Archivio Articoli
 Argomenti
 Contatti
 Contenuti
 Downloads
 Galleria Foto
 Guestbook
 Meteo
 Profilo Utente
 Sudoku

Who's Online
In questo momento ci sono, 3 Visitatori(e) e 0 Utenti(e) nel sito.

Non ci conosciamo ancora? Registrati gratuitamente Qui

Banners


Qui i miei siti amici:
ManuChaoIt
Weblord.it PHPNuke Italiano
Mr.Webmaster

 
Debug su PHP e PHP-nuke
Un semplice strumento per il debug

Chi, come me, è alle prime armi con PHP si scontra subito con la mancanza di un tool per eseguire il debug; personalmente trovo che la possibilità di eseguire passo a passo un'applicazione sia utile non solo per scovare gli errori di programmazione ma anche per capire il funzionamento di programmi già esistenti.

Questo articolo presenta un sistema estremamente semplice per ottenere un log online della vostra applicazione: non è proprio come l'esecuzione passo a passo ma può comunque risultare molto utile.


ll sistema si basa su due componenti:

  • una funzione (loggy()) da inserire nel vostro progetto e da richiamare nei punti di interesse;
  • un server TCP/IP (scritto ovviamente in PHP!) che raccoglie le varie stringhe inviate dalla funzione loggy().

Questo sistema esisteva già in PHP3 a quanto pare: la funzione error_log(), infatti, permetteva di spedire informazioni di debug ad un server TCP, ora non più. Dando un'occhiata al codice di loggy() si nota che il funzionamento è molto semplice:
function loggy( $logstr )
{
  //--------------------------------------
  $localname = "localhost";
  $serveraddr = "127.0.0.1";
  $serverport = 2000;
  //--------------------------------------

  $sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  if( $sock < 0 )
    return;
  @socket_bind($sock, $localname);
  @socket_connect($sock, $serveraddr, $serverport);     
  @socket_write($sock, $logstr . "\r\n" );
  @socket_close( $sock );
}
E' sufficiente configurare correttamente le seguenti variabili:
  • $localname è il nome della macchina su cui gira l'applicazione;
  • $serveraddr e $serverport specificano indirizzo IP e porta del server.

L'utilizzo è molto semplice: basta richiamare la funzione loggy() passandole una stringa con le informazioni che si vogliono ottenere, allo stesso modo in cui si farebbe con echo.

Il server deve essere lanciato a parte; salvate lo script seguente come logserver.php e lanciatelo con "php logserver.php":
<?php
//------------------------------------------------------------------------------
// server per ricezione stringhe di log
//------------------------------------------------------------------------------
$address = "localhost";
$port = "2000";

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if( $sock < 0 )
{
  echo "Errore socket_create(): " . socket_strerror( $sock ) . "\n\r";
  die();
}

$ret = socket_bind( $sock, $address, $port );
if( $ret < 0 )
{
  echo "Errore socket_bind(): " . socket_strerror( $ret ) . "\n\r";
  socket_close( $sock );
  die();
}

$ret = socket_listen( $sock, 1 );
if( $ret < 0 )
{
  echo "Errore socket_listen(): " . socket_strerror( $ret ) . "\n\r";
  socket_close( $sock );
  die();
}

echo "Server started!n";

do
{
  // attesa connessione
  $sockclient = socket_accept($sock);
  if( $sockclient < 0 )
  {
    echo "Errore socket_accept(): " . socket_strerror( $sockclient ) . "\n\r";
    socket_close( $sock );
    break;
  }

  // ricezione stringa
  do 
  {
    $buf = socket_read( $sockclient, 1024, 0 );
    if( $buf == "" )
      break;
    echo $buf;
  } while( true );
  
} while( true );

socket_close( $sock );

?>

E questo è tutto!

PHP-nuke
Ho utilizzato questo sistema per verificare il funzionamento di alcune parti del mio sito (praticamente il modulo Gallery). In particolare, ho inserito la funzione loggy() direttamente in mainfile.php in maniera da poter utilizzare questa funzionalità in qualsiasi punto del sito, senza modificare l'effetto finale a video (cosa che puņ succedere con delle echo piazzate malamente).

Conclusioni
Ovviamente non ho inventato niente di nuovo, spero che questo semplice sistema possa aiutare qualcuno alle prime armi con il linguaggio PHP.
Attenzione al fatto che alcuni messaggi potrebbero venir persi se logserver.php dovesse gire su una macchina particolarmente lenta: la soluzione potrebbe essere quella di smembrare la funzione loggy() per usare un socket creato all'inizio del programma e liberato all'uscita.









Copyright © by Sebastien Costa All Right Reserved.

Pubblicato su: 2008-02-17 (264 letture)

[ Indietro ]








All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2005 by me.
You can syndicate our news using the file backend.php or ultramode.txt
PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Generazione pagina: 0.09 Secondi