E’ sempre più frequente l’utilizzo di PDF per la distribuzione di questionari.
I questionari, una volta compilati, possono essere postati via internet in formato XML ad una pagina web che poi li raccoglie ed, eventualmente, li inserisce in un database. Leggi tutto
Category Archives: Php
PHP: i 5 metodi per settare la scrittura degli errori
Con le dovute variazioni sintattiche ci sono 5 metodi per indicare quali (e quanti) errori generati dall’esecuzione di applicativi PHP scrivere nel file di log.
I punti sottostanti fanno riferimento ad un ambiente Ubuntu/Apache ma differiscono poco con gli altri ambienti.
- Nel file di configurazione php.ini. Scrivendo qui l’istruzione, questa avrà effetto su tutti i virtual hosts.
- Nella directory conf.d. Ad esempio in Ubuntu lo troviamo in /etc/php5/apache2/conf.d . Ogni file aggiunto in questa directory si aggiunge alle istruzioni di php.ini. Nel caso di ripetizione dell’istruzione, le istruzioni in conf.d hanno la precedenza. Anche qui gli effetti sono su tutti i virtual hosts.
- Nella configurazione del virtual host di Apache. Generalmente lo troviamo in /etc/apache2/sites-available. Ogni virtual host può avere le sue impostazioni personalizzate e queste ultime hanno la precedenza su quelle indicate nei due punti superiori.
- In .htaccess. E’ possibile indicare anche in questo file il livello di error_reporting degli errori PHP. In questo caso la sintassi prevede il tag php_flag . Ha effetto solo nelle cartelle dove risiede il file .htaccess ma ha prevalenza rispetto ai metodi summensionati. In questo caso non è necessario riavviare Apache.
- Nel codice sorgente. L’ultimo posto è proprio indicare nel codice sorgente PHP il livello di reportistica degli errori . Basta richiamare le funzioni “error_reporting()”oppure “ini_set(“error_reporting”)”
Maggiori info sulle funzioni di error_reporting
phpList: principali problemi subito dopo l’installazione (e le soluzioni)
phpList è il sistema di gestione newsletter open source più diffuso al mondo.
L’installazione non richiede particolari abilità ma mi sono capitate due seccature e una rogna, risolte grazie a Google e il forum di phpList.
Racchiudo tutto qua, in questo post, in modo da non dover cercare più in futuro (e per condividere ovviamente).
Prima seccatura:
Subito dopo l’installazione, si entra nel pannello di controllo ed esce questa scritta
Running in testmode, no emails will be sent. Check your config file.
Si risolve così. http://forums.phplist.com/viewtopic.php?p=38321
Apri config.php e setta
define ("TEST",0);
Seconda seccatura:
Se si clicca su “Invia un messaggio” si viene reindirizzati alla pagina 404 (not found).
Si risolve così. http://forums.phplist.com/viewtopic.php?t=4114
Apri sempre config.php e setta il percorso giusto a phpList
$pageroot = '/lists'; $adminpages = '/lists/admin';
Terza rogna:
In fase di composizione del messaggio non compare l’editor (FCKeditor).
Ci sono molte possibili cause ma a me ha funzionato in questo modo.
Cancellate la cache e poi editate il file /lists/admin/FCKeditor/editor/fckeditor.html
Cercate
// Base configuration file. //LoadScript( '../fckconfig.js' ) ; LoadScript( '../../?page=fckphplist&action=js4' ) ;
e modificate in
// Base configuration file. LoadScript( '../fckconfig.js' ) ; //LoadScript( '../../?page=fckphplist&action=js4' ) ;
Caricando quest’altro script l’editor diventa visibile (e usabile)
Link: phpList
jQuery: jTable un plugin per creare tabelle CRUD semplicemente
CRUD è un acronimo (Create, Read, Update, Delete) ma è anche il cruccio quotidiano di chi deve gestire dati all’interno di un database.
jTable è un plugin per la nota libreria jQuery che ci permette di creare tabelle per la gestione dei dati (CRUD appunto) scrivendo pochissimo codice HTML e con una piccola configurazione del javascript da inserire.
jTable funziona indipendentemente dal linguaggio di programmazione, utilizza AJAX per l’aggiornamento dei dati, è localizzato in molte lingue (italiano compreso), può funzionare con diversi temi predefiniti.
Il suo utilizzo base è semplicissimo. Basta includere oltre a jQuery le righe per il plugin e per il CSS del tema scelto
<!-- Include one of jTable styles. --> <link href="/jtable/themes/metro/blue/jtable.min.css" rel="stylesheet" type="text/css" /> <!-- Include jTable script file. --> <script src="/jtable/jquery.jtable.min.js" type="text/javascript"></script>
Poi si crea un contenitore
<div id="PersonTableContainer"></div>
E si aggiunge il javascript per creare l’istanza jTable
<script type="text/javascript"> $(document).ready(function () { $('#PersonTableContainer').jtable({ title: 'Table of people', actions: { listAction: '/GettingStarted/PersonList', createAction: '/GettingStarted/CreatePerson', updateAction: '/GettingStarted/UpdatePerson', deleteAction: '/GettingStarted/DeletePerson' }, fields: { PersonId: { key: true, list: false }, Name: { title: 'Author Name', width: '40%' }, Age: { title: 'Age', width: '20%' }, RecordDate: { title: 'Record date', width: '30%', type: 'date', create: false, edit: false } } }); }); </script>
Le azioni (action) indicano quali sono i file che gestiscono le interazioni col db.
Ogni colonna rappresenta un campo del db e possiamo impostarne la larghezza relativa in tabella e le caratteristiche come la modificabilità, il tipo, la possibilità di ordinamento su sua base.
Le tabelle così create caricano oggetti standard JSON risultanti delle azioni succitate (qualsiasi linguaggio serverside moderno può creare questo tipo di oggetto).
Link: jTable
Scrivere codice tramite smartphone: Touchcode
Disponibile per adesso solo per Android, Touchcode è un’applicazione per smartphone (o tablet) che permette di scrivere e modificare codice.
E’ supportata l’evidenziazione della sintassi, l’autocompletamento del codice per C++, C#, Python, Ruby, HTML, JavaScript, PHP e XML. Inoltre sono presenti la sempre utile ricerca incrementale, la sincronizzazione dei file (tramite Dropbox) e la funzionalità FTP.
Perchè usare un code editor su uno smartphone o su un tablet? Un po’ perchè l’ispirazione ad un informatico può arrivare ovunque e in qualsiasi momento e un po’ perchè certi progetti di tipo collaborativo potrebbero avere bisogno di interventi urgenti.
La versione Pro di Touchcode prevede il supporto alla piattaforma di social-coding GitHub
Link: Touchcode
PHP: gestione upload grandi file
La gestione dell’upload dei file con PHP può diventare un problema quando i file eccedono una certa grandezza.
Se c’è la necessità di inviare file di grandi dimensioni dobbiamo intervenire su alcuni parametri PHP che, di base, hanno impostazioni più prudenziali.
Il file di configurazione php.ini è il perno centrale per modificare queste impostazioni.
Prima di tutto bisogna permettere l’upload via HTTP quindi settiamo
file_uploads = On (oppure 1 oppure true)
Poi c’è la dimensione massima del file
upload_max_filesize = 20M
a cui associare la dimensione massima di TUTTI i contenuti uploadati, normalmente questo valore deve essere almeno del 40% superiore al valore precedente
post_max_size = 40M
Altro elemento importante da considerare è il tempo massimo in cui viene inviato il file.
Quindi si deve intervenire sul tempo massimo, espresso in secondi, di esecuzione dello script PHP
max_execution_time = 30
La gestione di questi processi implica il consumo di molta memoria. per cui è meglio intervenire anche su questo parametro.
memory_limit = 128M
Link: PHP
PyroCMS: il CMS costruito su base CodeIgniter
Ci sono decine e decine di CMS in giro. Ci sono quelli per chi vuole solo usarli senza alcun problema di installazione e configurazione e poi ci sono quelli che apparantemente sono altrettanto user friendly ma che stimolano la fantasia dello sviluppatore.
Rientra in quest’ultima cerchia PyroCMS sviluppato sul noto framework PHP CodeIgniter.
Che significa? Avere subito un prodotto moderno, efficiente e maturo per un immediato utilizzo ma anche un’ottima base per pensare “in grande”.
Ancora non ho provato PyroCMS ma il fatto che sia basato su CodeIgniter mi piace molto perchè ne amplia le possibilità e le prospettive.
Tra l’altro l’azienda che ha rilasciato PyroCMS è proprio uno dei maggiori supporter di CodeIgniter, quindi è assicurato il costante aggiornamento ai nuovi rilasci del framework.
Del CMS ci sono due edizioni: Community e Professional.
Entrambe godranno sempre degli aggiornamenti ma la prima, gratuita, non ha la possibilità, ad esempio, della gestione multi-sito e dei temi di amministrazione.
Lo userò sicuramente per qualche progetto e proporrò una recensione più ampia.
Link: PyroCMS
PHP: adattare le immagini alla risoluzione dello schermo
Uno dei crucci di chi sviluppa per il web è quello di rendere la propria applicazione fruibile per la maggior parte dei dispositivi.
Questo significa o creare più versioni di una stessa applicazione o creare un unico layout che sia fluido e adattabile alle varie situazioni.
Ma le immagini?
Una tecnica per adattare le immagini alla risoluzione dello schermo è quella del sistema chiamato Adaptive Images che sfrutta Javascript e le librerie grafiche di PHP.
Il metodo è semplice
- il javascript rileva la dimensione dello schermo e crea un cookie che ne immagazzina il valore
- il file .htaccess intercetta ogni richiesta per file grafico .jpg, .gif o .png
- questa richiesta viene inviata al file PHP che controlla se esiste una versione già “cachizzata” del file nella dimensione adatta
- se non esiste nella cache, il file viene generato e inviato in output
Il sistema Adaptive Images richiede
- Apache 2
- PHP 5.x
- GD lib
Link: Adaptive Images
Problema Horde con PHP 5.3
L’aggiornamento a PHP 5.3 ha portato svariate noie con le vecchie applicazioni.
Tra queste il servizio per server di webmail Horde dà qualche disfunzione se non, addirittura, smette proprio di funzionare!
Dopo qualche ora di ricerca ho trovato questa brillante soluzione nel caso in cui, dopo il login, ci si ritrova in una pagina bianca
in /usr/share/psa-horde/imp/lib/IMAP/Client.php line 576 modifica function namespace($additional = array()) con function plnamespace($additional = array()) in /usr/share/psa-horde/imp/lib/Session.php line 295 modifica $_SESSION['imp']['namespace'] = $imapclient->namespace($user_namespace); con $_SESSION['imp']['namespace'] = $imapclient->plnamespace($user_namespace);
Link: howto’s
Aggiornare PHP su CentOS
L’aggiornamento di WordPress alla versione 3.2.1 richiedeva un upgrade di PHP alla versione 5.2.4 o superiore del mio server con CentOS.
Così ho proceduto (dopo un adeguato backup dell’intero sistema) installando yum e aggiornando partendo dalle dipendenze (MySQL).
Installo yum
wget http://www.atomicorp.com/
sh atomic.sh
Aggiorno MySQL
yum update mysql
mv /etc/my.cnf.rpmnew /etc/my.cnf
service mysqld restart
Dopo questa operazione anche PHP è aggiornato alla versione più recente.
Tuttavia il servizio mysqld non ne voleva sapere di riavviarsi.
Dopo aver googlato un po’ ho capito che la dipendenza bdb non è più necessaria in /etc/my.cnf (il file di configurazione).
Per cui ho commentato la riga di comando che lo riguardava.
[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
#skip-bdb
set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-bdb
set-variable = innodb_buffer_pool_size=2M
set-variable = innodb_additional_mem_pool_size=500K
set-variable = innodb_log_buffer_size=500K
set-variable = innodb_thread_concurrency=2
..ed ho potuto riavviare normalmente il demone MySQL.