Posts tagged with: php

Gestire correttamente le dipendenze PHP con Composer

Il primo passo per costruire una pipeline di CD (Continuous Delivery) adeguata è gestire le dipendenze nel modo giusto. Se sei uno sviluppatore di PHP, è necessario padroneggiare Composer riuscire a fare ciò in maniera semplice ed immediata.

Cos’è Composer?

Composer è il gestore delle dipendenze per PHP e Packagist è il repository ufficiale dei pacchetti. Il rilascio di questo progetto nel 2012 ha rivoluzionato il mondo PHP perchè consente di definire tutte le librerie dalle quali l’applicazione dipende e di scaricare automaticamente queste librerie con un semplice comando. Composer risolve molti problemi, sai se la tua applicazione dipende da quali librerie e se queste librerie dipendono da altre librerie… L’uso di Composer e di un sistema di controllo della versione è il primo passo per costruire una pipeline CI/CD per PHP.

E’ richiesta la presenza di PHP sul sistema in cui è eseguito Composer. Si installa tramite un comodo installer che ti avvisa eventuali incompatibilità di versioni PHP. Composer è disponibile per varie piattaforme. Continue Reading


Sql Injection

SQL Injection (SQLi) è un pratica informatica in cui un utente malintenzionato può eseguire istruzioni SQL maligne prendendo il controllo del database di un’applicazione web. SQL Injection può influenzare qualsiasi sito o applicazione Web che prevede l’utilizzo di un database basato su linguaggio SQL.

Questa è una tra le vulnerabilità più consolidate, più pervasive e più pericolose. Infatti, un utente malintenzionato, attraverso l’SQL Injection, può aggirare le procedure di autenticazione, verifica e approvazione di un’applicazione Web e recuperare in sostanza un intero database. SQL Injection può anche essere usato per inserire, alterare e cancellare record in un database, influenzando la correttezza delle informazioni. Nel peggiore dei casi, SQL Injection può fornire a un utente malintenzionato l’accesso non autorizzato a dati sensibili, tra cui informazioni sui clienti, dati identificativi, password e altri dati sensibili.

Continue Reading


S.O.L.I.D. ovvero i 5 principi della programmazione ad oggetti

Il termine SOLID  viene utilizzato per indicare i cinque principi di progettazione orientata agli oggetti (OOD) di Robert C. Martin, conosciuto al mondo come zio Bob. I principi SOLID sono intesi come linee guida per lo sviluppo di software estendibile e manutenibile, in particolare nel contesto di pratiche di sviluppo agili e fondate sull’identificazione di code smell e sul refactoring. La parola SOLID è un acronimo che serve a ricordare tali principi (Single responsibility, Open-closed, Liskov substitution, Interface segregation, Dependency inversion), e fu coniata da Michael Feathers.

  • S – Single-responsiblity principle
  • O – Open-closed principle
  • L – Liskov substitution principle
  • I – Interface segregation principle
  • D – Dependency Inversion Principle

Continue Reading


PHP vs Ruby vs Python. Quale linguaggio di programmazione scegliere?

Esistono molti linguaggi di programmazione e ognuno funziona per fare dei compiti specifici e unici. Ogni linguaggio ha un unico insieme di parole chiave e una speciale sintassi per organizzare i comandi. In questo articolo daremo un’occhiata a tre linguaggi molto popolari: PHP, Ruby, Python. Vedremo come funzionano, quali sono le differenze e dove vengono principalmente utilizzati. Continue Reading


La libreria GD in PHP

GD è una libreria grafica che viene fornito in bundle con PHP, a partire dalla versione 4.3.0. GD è un progetto open source, sotto la guida di Thomas Boutell. Maggiori informazioni si possono trovare sul sito libgd.org che contiene immagini e documentazione su l’ultima versione (2.1.00 alla data di questo articolo).

GD consente ai programmatori PHP di generare immagini dinamiche in formato JPEG e PNG, è scritta in C ed è disponibile per i sistemi Unix, Windows e derivati. Anche se la libreria viene comunemente usata con PHP, le implementazioni sono disponibili anche per altri linguaggi di programmazione, ad esempio il Perl. Continue Reading


Regex: Espressioni regolari in PHP, parte 3

Negli articoli precedenti abbiamo visto come utilizzare le espressioni regolari (regex) per trovare, identificare o sostituire il testo, le parole o qualsiasi tipo di caratteri. In questo articolo, ho segnalato alcune espressioni regolari estremamente utili che ogni sviluppatore dovrebbe avere nel suo toolkit.

Per molti principianti, le espressioni regolari possono sembrare difficile da imparare e da usare. In realtà, sono molto meno difficili di quanto si pensi. Continue Reading


Regex: Espressioni regolari in PHP, parte 2

Nel precedente articolo abbiamo iniziato a parlare di espressioni regolari. In questo approfondiremo il discorso sotto l’aspetto più tecnico. Il linguaggio PHP ha al suo interno due diversi parser per lavorare con le espressioni regolari. Uno chiamato POSIX e l’altro PCRE, di cui parleremo. Le funzioni con il prefisso ereg_ riguardano il motore POSIX (che dalla versione 5.3 il POSIX è deprecato), mentre le funzioni con il prefisso preg_ riguardano il motore PCRE. Potete leggere la lista delle funzioni nella documentazione ufficiale PHP. Continue Reading


Calcolare la distanza di due punti della terra: la formula dell’emisenoverso.

Tempo fa ho avuto la necessità di implementare delle funzioni per estrarre da un database tutti i comuni limitrofi ad un punto dato. L’utente inseriva il nome della città, venivano ricercate le corrispondenti coordinate geografiche utilizzando i servizi di Google Maps e poi, attraverso una query di ricerca, veniva interrogata la base dati restituendo i comuni limitrofi in un raggio di km prestabilito (in linea d’aria!). Continue Reading


Progetto completo di una chat con Server-Sent Event e HTML5 + Jquery

Continuiamo la panoramica sulle API Server-Sent Event in HTML5. In questo caso scopriremo e analizzaremo passo dopo passo come creare una chat funzionante. La ragione di questo esempio è principalmente applicare i concetti visti negli articoli precedenti, per meglio comprendere la potente tecnologia che HTML5 ci offre.

Avremo bisogno al solito di un web server, va bene anche XAMPP o qualsiasi altro web server Apache+PHP+MySQL.

Il database

La prima cosa da fare è creare il database con la tabella che conterrà i messaggi che gli utenti invieranno alla chat e che saranno consegnati a tutti i client in ascolto. Il database ha una sola tabella, mediante la quale, oltre a fare da intermediario potrebbe anche rappresentare un’ottimo strumento per filtrare parole non gradite. Lo script SQL è il seguente, potete eseguirlo facilmente su PhpMyAdmin.

La chat

 Chiamiamo questo file chat.html, ed è il file che conterrà il codice HTML+CSS e gli script Javascript del client. L’interfaccia è molto semplice ed è composta principalmente da un contenitore DIV in cui vengono aggiunti man mano i sotto-contenitori DIV dei messaggi. Per completare, ho posizionato sotto la chat due caselle di testo per inserire il nome, il messaggio e il pulsante per inviare tutto al server e di conseguenza agli altri client connessi.

Stream chat

Chiamiamo questo file chatlist.php. Lo stream dei messaggi sarà formato da un file PHP, in particolare in ciclo infinito che effettua un’interrogazione al database MySQL per poi “addormentarsi” per un secondo. Le prime due righe di intestazione sono molto importanti per il meccanismo SSE di HTML5, in quanto per il corretto funzionamento della chat, è necessario impostare il Content-Type come “text/event-stream” e definire il Cache-Control uguale a “no-cache”. Non dimenticatelo.

Le operazioni sul database

Tutte le operazioni sul database preferisco scriverle in un file diverso dagli altri, per mettere un po’ di ordine. Lo chiamiamo dbfunctions.inc e contiene tra l’altro la gestione della connessione al database, oltre alla stampa a video del messaggio necessario al Server-Sent Event.

Il blocco più interessante è quello della funzione ListChat(). Questa funzione interroga il messaggio cercando tutti quei messaggi che sono stati spediti al server nel periodo compreso tra l’ultima interrogazione $MM_LastTime e l’ora corrente $MM_Time. In questo modo vengono pescati solo le ultime righe senza far perdere alcun messaggio. Quindi vengono estratti i campi, formattati in HTML e restituiti alla funzione sendMsg() che si occupa di comporre il messaggio per SSE.

File di supporto

Nell’ultimo file, chiamato chatsubmit.php, inserisco la procedura che viene attivata durante la chiamata di chatTimerHandler() nel file chat.html tramite Ajax con metodo GET. Lo script non fa altro che inserire nel database MySQL il nome e il messaggio digitato dall’utente in modo da poter essere “comunicato” a tutti quanti i client in ascolto.

 


La distanza di Levenshtein, a cosa serve? (2° parte)

Un’implementazione della distanza di Levenshtein può essere fatta in qualsiasi linguaggio. In questo esempio, verrà utilizzato interamente il linguaggio MYSQL.

Per prima cosa, bisogna creare una routine su MySql. Aiutatevi con phpmyadmin per fare ciò. Eseguite direttamente il codice definito in questo listato per creare e aggiungere la funzione levenshtein() al vostro database MySql.

Se volete potete anche aggiungere quest’altra funzione, che restituisce la percentuale di esattezza della parola data.

A questo punto l’unica cosa da fare è quella di creare una query per interrogare il database utilizzando in modo opportuno la funzione definita sopra.

Il risultato sarà questo:

levenshtein2

L’unico vero e grande problema è la lentezza dell’esecuzione dell’algoritmo. Per calcolare la distanza di levenshtein di “romme” su una base dati di 8,092 record, il tempo di esecuzione si aggira attorno ai 12 secondi, e peggiora in maniera esponenziale se la stringa da ricercare è più lunga (es. Castelbuono anzichè Roma). Purtroppo l’algoritmo contiene un doppio WHILE all’interno e questo potrebbe rappresentare un ostacolo, sopratutto in una tabella con migliaia di record.

Tuttavia possiamo cercare di ottimizzare la query MySql in fase di interrogazione in modo da cercare di dimezzare i tempi di ricerca. Una prima ottimizzazione è quella di selezionare solamente i termini più “vicini” a quello che stiamo cercando, confrontando la lunghezza degli stessi. Aggiungo quindi una condizione sulla lunghezza del campo CityName, che deve essere di un carattere più (+1) o meno (-1) lunga rispetto a ciò che sto cercando.

 levenshtein3

Abbiamo un netto miglioramento in termini di prestazioni in fase di esecuzione: 1,17 secondi contro 12 secondi del primo! 

Esistono ovviamente altre ottimizzazioni, infatti ne ho implementata una che mi permette di raggiungere un tempo di esecuzione pari a 0,5740 secondi, ma in questo caso bisogna integrare qualche riga di codice PHP. Vi lancio la sfida di cercarne una! Qui sotto invece trovate un altra ipotesi di ottimizzazione…

Spoiler Inside SelectShow

 


Pagine:12

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

Chiudi