Category Archives: Php

PHP: i 5 metodi per settare la scrittura degli errori

Pubblicato da

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.

  1. Nel file di configurazione php.ini. Scrivendo qui l’istruzione, questa avrà effetto su tutti i virtual hosts.
  2. 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.
  3. 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.
  4. 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.
  5. 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)

Pubblicato da

phpList: principali problemi subito dopo l'installazione (e le soluzioni)

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

Pubblicato da

jQuery: jTable un plugin per creare tabelle CRUD semplicemente

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).

jQuery: jTable un plugin per creare tabelle CRUD semplicemente

Link: jTable

Scrivere codice tramite smartphone: Touchcode

Pubblicato da

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

Pubblicato da

PHP: gestione upload grandi file

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

Pubblicato da

PyroCMS: il CMS costruito su base CodeIgniter

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

Pubblicato da

PHP: adattare le immagini alla risoluzione dello schermo

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

Pubblicato da

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

Pubblicato da

Aggiornare PHP su CentOS

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/installers/atomic.sh
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.

Link: CentOS PHP MySQL