Ho trovato un articolo di Aaron Crane intitolato Experiences of Using PHP in Large Websites.
PHP ha dei grandi pregi: principalmente semplicità e rapidità.
L’articolo parla dei difetti del PHP: un sito complesso, da sviluppare in team, con molto codice embeddato nelle pagine puo’ diventare un caos allucinante.
Poiché la libreria Imagick di php NON si comporta proprio come imagemagick da cmdl, mi sono fatto una semplice funzione per thumbnailare le immagini che carico con un form.
Per qualche oscura ragione a differenza di suo padre, la funzione Imagick::thumbnailImage della libreria non riduce a partire dal lato più lungo, quindi bisogna imporre la propria volontà.
function img_resize($src,$dst,$size = 450) {
$max_length = $size; /* Lato maggiore consentito in px */
$img = new Imagick();
$img->readImage($src);
$real_width = $img->getImageWidth();
$real_height = $img->getImageHeight();
if ( $real_width > $max_length || $real_height > $max_length ) {
if ($real_width > $real_height) {
$img->thumbnailImage($max_length,0,false);
} else {
$img->thumbnailImage(0,$max_length,false);
}
}
$img->setImageFormat(‘jpeg’);
$img->writeImage($dst);
$img->destroy();
}
?>
Sono ancora alla ricerca di idee su “modi decenti” per uploadare immagini su di un sito.
L’idea è prendere i file con un form di upload, analizzarli e caricarli nel sistema. Poi metterli nel db, creare l’immagine delle dimensioni giuste e il thumb, poi linkarli quando vengono richiesti.
Le immagini vengono passate nel fs grazie a tempnam(), trasformate con le lib php di imagemagick in formato jpeg, e servite da apache come image/jpeg forzatamente (con ForceType sulla <Directory>).
Per ora non mi vengono idee migliori. Accetto consigli, nel caso.
Ne approfitto per linkare una paginetta semplice semplice di tutorial riguardo le lib php Imagick, visto che non hanno documentazione.
Ok, weekend nel marasma delle webapplication.
Ricapitolo un po’…
* Passaggi dati non numerici (potenzialmente massicci) in POST, ritorno in GET (per forza).
* Controllo in entrata di pagina (isset, is_numeric, blablabla, check di esistenza sul db).
* Funzioni di escape sui dati da inserire nel db. (pg_escape_string, mysql_real_escape)
* Funzioni di escape in output sul codice html (giusto per evitare scriptini e tag interpretabili): htmlentities.
* Funzioni stripslashes per togliere gli escape nel db in output.
* Check con regexp (preg_match) sulle stringhe inserite, ocio ai filename con rischio per gli header serviti.
Un po’ di storie dal php security consortium.
Manuale: http://doc.async.com.br/jpgraph/html/index.html
Controllo: andare sul proprio php-info.php e controllare se la versione php è corretta e se le GD sono enabled.
Installazione: con Debian è stato facile trovare i pacchetti con dselect (libphp-jpgraph).
Check post-installazione: controllato con dpkg -L dove sono i nuovi file.
idrogeno:/# dpkg -l | grep jpgraph
ii libphp-jpgraph 1.5.2-11+u1
Object oriented graph library for php4
ii libphp-jpgraph-examples 1.5.2-11+u1
idrogeno:/# dpkg -L libphp-jpgraph
/usr/share/jpgraph/jpgraph_error.php
/usr/share/jpgraph/jpgraph_spider.php
/usr/share/jpgraph/jpgraph_canvas.php
/usr/share/jpgraph/jpgraph_pie3d.php
/usr/share/jpgraph/jpgraph_scatter.php
/usr/share/jpgraph/jpgraph_dir.php
/usr/share/jpgraph/jpgraph_bar.php
/usr/share/jpgraph/jpgraph_line.php
/usr/share/jpgraph/jpgraph_log.php
/usr/share/jpgraph/jpgraph_pie.php
/usr/share/jpgraph/jpgraph.php
/usr/share/jpgraph/jpgraph_gantt.php
[...]
/usr/share/doc/libphp-jpgraph/README.gz
[...]
Gli esempi sono in:
/usr/share/doc/libphp-jpgraph-examples/*
Poi ho provato questo esempio includendo i miei percorsi alle librerie:
include ("/usr/share/jpgraph/jpgraph.php" );
include ("/usr/share/jpgraph/jpgraph_pie.php");

All done!
[Edit 090225: Warning; Debian è rimasta a jpgraph versione 1.5.2-11 causa cambio licenza e l'aggiornamento non è presente nei repo non-free. Scaricare dal sito ufficiale la versione aggiornata. ]
Linux
Apache
MySQL
Php (e altro, nel mio caso)
Sottofondo musicale: OST dei Transformer. Da paura.
1. Linkin Park – What I’ve Done
2. Smashing Pumpkins – Doomsday Clock
3. Disturbed – This Moment
4. Goo Goo Dolls – Before It’s Too Late (Sam And Mikaela’s Theme)
5. The Used – Pretty Handsome Awkward
6. HIM – Passion’s Killing Floor
7. Taking Back Sunday – What It Feels Like To Be A Ghost?
8. Styles Of Beyond Feat. Mike Shinoda – Second To None
9. Armor For Sleep – End Of The World
10. Idiot Pilot – Retina And The Sky
11. Julien-K – Technical Difficulties
12. Mutemath – Transformers Theme