Archive for the PHP Category

A pochi giorni del rilascio della versione 5.3.9 il team di sviluppo di Php rende noto che è stata rilasciata la versione 5.3.10 che va a correggere un importante baco di sicurezza. Ovvimente gli sviluppatori raccomandano vivamente di aggiornare Php all’ultima versione.

Di seguito vi propongo una classe per ricavare il giorno della Pasqua passando un determinato anno, mi è tornata utile per la realizzazione di un Planner.
Per ricavare il mese ed il giorno della Pasqua dell’anno 2012 basta chiamare il metodo Pasqua::get passando come argomento “2012″:

Pasqua::get(2012); // ritorna Array([day]=>18 [month]=>4)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
/**
 * Pasqua
 *    
 * Questa classe determia il giorno della Pascqua 
 * di un determinato anno, si basa sul calcolo detto
 * Metodo aritmetico di Gauss spiegato in questa pagina:
 * http://it.wikipedia.org/wiki/Calcolo_della_Pasqua
 * 
 * @author Guido Chiappucci
 */
class Pasqua {
 
    private static $aM = array(22, 22, 23, 23, 24, 24);
    private static $aN = array(2, 2, 3, 4, 5, 5);
 
    /**
     * Pasqua::get()
     * 
     * Il metodo get restituise un array 
     * contenente il mese ed il giorno 
     * della Pasqua riferita all'anno 
     * passato al metodo attraverso $year
     *  
     * @param integer $year
     * @return array
     */
    public static function get($year) {
 
        $a = $year % 19;
        $b = $year % 4;
        $c = $year % 7;
 
        $aIndex= floor($year/100)-15;
 
        $d = (19 * $a + self::$aM[$aIndex]) % 30;
        $e = (2 * $b + 4 * $c + 6 * $d + self::$aN[$aIndex]) % 7;
 
        $day = 22 + $d + $e;
        $month = 3;
 
        if ($day > 31) {
            $month = 4;
            $day -= 31;
        }
 
        /**
         * Eccezioni:
         * - Se la data risultante dalla formula è il 26 aprile, 
         *   allora la Pasqua cadrà il giorno 19 aprile;
         * - Se la data risultante dalla formula è il 25 aprile 
         *   e contemporaneamente d = 28, e = 6 e a > 10, 
         *   allora la Pasqua cadrà il 18 aprile. 
         */
        if ($month == 4 && $day == 26) {
            $day = 19;
        } elseif ($month == 4 && $day == 26 && $d == 28 && $e == 6 && $a > 10) {
            $day = 18;
        } 
 
        return array('day'=>$day,'month'=>$month);
 
    }
 
}
 
?>

PHP 5.4 rc 4

| dicembre 27th, 2011

php-logoIn questi giorni è stata rilasciata la versione 5.4 rc 4 di Php, quindi siamo ormai vicini al rilascio definitivo della nuova versione, in questa pagina la lista delle novità e dei cambiamenti che verranno introdotti, particolare attenzione alle funzioni che non saranno più disponibili e che da tempo erano state dichiarate deprecate.

Attraverso gli strumenti offerti da Google è possibile recuperare facilmente la favicon di un sito web, e con poche righe di php possiamo confezionare una funzione che restituisce la favicon del sito richiesto.

Il servizio di Google che andremo ad utilizzare è una semplice chiamata http:

http://www.google.com/s2/favicons?domain=www.google.it

dove “domain” è il sito web di cui richiediamo la favicon.

Veniamo al codice, in pratica utilizzeremo Curl per fare la chiamata http verso Google, la risposta sarà proprio il sorgente del file richiesto, quindi possiamo scriverlo su un file oppure stamparlo direttamente a video.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function getFavicon( $url ) {
    $ch = curl_init('http://www.google.com/s2/favicons?domain='.$url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
}
$favicon = getFavicon('www.google.it');
?>

Utilizzando la funzione imagepng() può verificarsi l’errore
PHP Fatal error: imagepng() [function.imagepng]: gd-png: fatal libpng error: zlib error in… ecc. ecc…
Questo dipende dal fatto che il fattore di compressione utilizzato da imagepng() non va da 0 a 100 come per imagejpeg() ma va da 0 a 9, quindi basterà cambiare questo parametro come nell’esempio sotto:

1
2
3
<?php
imagepng($img, $filename, 8);
?>

Ecco le slide riferite all’intervento di Ilia Alshanetsky al DevConf 2010 di Mosca
DevConf 2010 Moscow

Ecco fresche fresche le slide dell’intervento al ConFoo 2010 di Ilia Alshanetsky, come sempre… da non perdere.

ConFoo

Scaling Web Applications with HMVC

| febbraio 28th, 2010

Qualche giorno fa è uscito su TechPortal un articolo veramente interessante e ben fatto relativo al design pattern HMVC.  La lettura è consigliata anche a chi ha ben chiaro il funzionamento di MVC in quanto quella descritta è considerata una “estensione” del pattern stesso.

http://techportal.ibuildings.com/2010/02/22/scaling-web-applications-with-hmvc/

Leggendo qua e la ho trovato un articolo molto curioso e allo stesso tempo interessante dove vengono descritte una serie di funzioni php poco comuni e che probabilmente non vengono quasi mai utilizzate.

L’articolo in questione si trova in questo blog all’indirizzo:
http://infinity-infinity.com/2009/07/10-php-functions-you-probably-never-use/

Buona lettura!

CKEditor

Da prima delle ferie sto lavorando ad un nuovo software  ed avendo bisogno di un editor inizialmente avevo scelto TinyMCE ma qualche giorno fa, dando un occhiata al sito di FCKEditor, ho avuto la piacevole sorpresa dell’uscita della versione stabile di CKEditor, l’evoluzione di FCKEditor.

Ho visionato le demo on line e non pensandoci due volte ho incluso l’editor nel progetto e devo dire che è uno spettacolo, velocità di caricamento migliorata e nulla di meno di TinyMCE, anzi…

In conclusione ho sostituito TinyMCE e ora sto utilizzando CKEditor e mi sto trovando davvero bene, l’unico difetto, ma credo che si possa risolvere, è che con Firefox l’editor non tiene conto del z-index e siccome in un caso mi si sovrappone con il menu di navigazione (drop down menu) mi crea un piccolo problema sull’interfaccia utente.

Qui potete provare la demo