ReVo Blog


Friends

Friends Posts

profile for Marco Acierno at Stack Overflow, Q&A for professional and enthusiast programmers
profile for Marco Acierno on Stack Exchange, a network of free, community-driven Q&A sites
2 user(s) online
F_ACTIVE
2 guests
0 members
0 Anonymous Members
[ View Complete List ]


Last comments


Statistics
F_STATS
ReVo Blog have:
8 articles, 0 comments, 1 members,
167 total visits, 0 monthly visits

The newest member is .ReVo.


B_NORM    
view post Posted on 1/8/2014, 17:12 by: .ReVo. Reply
Prima o poi capita a tutti di voler lavorare con un Database per salvare i dati degli utenti online, e all'inizio siamo tutti tentati dal realizzare le connessioni, le richieste e la gestione dei dati nella pagina PHP stessa e con codice del genere:

CODICE
$connessione = new MySQLi("localhost", "root", "hello", "world");
$result = $connessione->query("SELECT nome, cognome FROM users");
while ($row = $result->fetch_row()) {
  echo "Utente - Nome: " . $row[0] " . - " . $row[1] . ";<br />";
}
$result->close();
$connessione->close();


In effetti questo codice funziona, ottimo!

Ora immaginiamo che la nostra applicazione stia diventando sempre più grande (yup!): i file PHP aumentano, i dati da leggere e scrivere aumentano, le query diventano più lunghe e faticose ed un semplice errore può causare gravi danni!

La nostra applicazione è diventata cosi grande e fa qualcosa di utile che la vogliamo hostare su altervista (o dove volete) e prima mazzata:

CITAZIONE
Warning: mysqli_connect() [function.mysqli-connect]: Can't connect to MySQL server on 'localhost' (10061) in \myhost\index.php on line 2 Could not connect: Can't connect to MySQL server on 'localhost' (10061)

(l'errore sarà simile a questo, ho preso il primo che è capitato!)

Boom! Vediamo questo errore PHP ovunque, in ogni pagina e non funziona più niente!

Perchè? Beh, i nostri dati connessione

CODICE
$connessione = new MySQLi("localhost", "root", "hello", "world");


(questa parte!)

andavano bene per il nostro server casalingo, ma il nostro hosting online ci ha fornito altri dati per connetterci e per colpa di questo adesso vi ritrovare a modificare ben 40 file php! (numero a caso, potrebbero essere di più!).

Aiuto!



Questa faticata si poteva evitare con una piccola accortezza: avete mai provato a girare per il sorgente di WordPress? C'è un piccolo file (config.php) che viene creato dall'installer di WordPress e contiene 4 linee che potevano salvarci la faticata:

Comments: 0 | Views: 8Last Post by: .ReVo. (1/8/2014, 17:12)
 

B_NORM    
view post Posted on 25/7/2014, 13:50 by: .ReVo. Reply
In questi ultimi giorni mi sono dedicato ad un piccolo progetto "casalingo"... PHPMarkdoc.

PHPMarkdoc



Lo scopo è quello di generare documentazione PHP nel formato Markdown in modo da poterlo usare per inserire la documentazione di una classe in un Wiki di Bitbucket o Github.
L'idea mi è venuta quando dovevo scrivere la documentazione online di alcune classi che avevo creato per un progetto e vedendo che tutti i generatori automatici erano tutti per HTML ho pensato di crearne una mia versione che scrivesse tutto in Markdown.

Il progetto utilizza Java, mentre per legge i file da analizzare viene usato il PHP (php-cgi -f <file_name>). Il file source.php utilizza le API Reflection del PHP per leggere i dati delle classi dell'utente e le memorizza in una struttura Json che sarà letta e convertita in un oggetto FileDoc da Java.

Il codice dell'utente viene iniettato da Java utilizzato un file di "passaggio" che ho chiamato source_injector.php infatti, questo file viene creato da Java ogni volta che è necessario analizzare un file e contiene una singola linea:

CODICE
require_once("URL_DEL_FILE_PHP");


In questo modo, all'interno di source.php è presente il codice PHP della classe (p.s al momento non è presente nessun algoritmo che "blocca" output diversi dal Json di source.php).

Le funzioni get_declared_classes, get_declared_interfaces, get_defined_functions e get_declared_traits si occuperanno di leggere i nomi delle classi dell'utente.

Va notato che, prima di require_once("source_injector.php"); troviamo:

CODICE
$default_classes = get_declared_classes();
$default_interfaces = get_declared_interfaces();
$default_traits = get_declared_traits();


Con questo "trucco", possiamo fare in modo di isolare le classi di PHP da quelle dell'utente utilizzando array_diff.

Non c'è nulla del genere per le funzioni perchè il PHP già fa la divisione con un array interno con [internal] e [user] per differenziare i due tipi, eseguire un array_filter su questo array è obbligatorio per rimuovere da questo elenco le funzioni del parser (infatti, anche se get_defined_functions() viene eseguito prima che il source.php definisca una funzione, il PHP fa una prima l...

Read the whole post...



Tags:
java,
php,
phpmarkdoc
Comments: 0 | Views: 7Last Post by: .ReVo. (25/7/2014, 13:50)
 

Search: