Archivio

Archivio autore

Come creare una piattaforma: WAMP: (Windows – Apache – MySQL – PHP)

21 February 2006 maxgrante 3 commenti

Ciao a tutti,
oggi affrontiamo in modo molto pragmatico come realizzare una piattaforma di tipo WAMP (Windows + apache + mysql + php).
Tale soluzione è implementata in due ambiti specifici tipici:

  • Macchine di sviluppatori
  • Hosting provider che offrono anche supporto su Windows con possibilità  di utilizzare sia php che ASP.NET (Asp non lo menziono nemmeno più… :-D )

Da un punto di vista di prestazioni va detto che pur essendo sia Apache che PHP che MySQL nati per l’ambiente Linux, anche sotto Windows offrono ottime prestazioni.

L’installazione che affronteremo insieme riguarda un sistema su Windows XP ma è di fatto identico per tutti i sistemi >= Windows 2000.

Per le installazioni di mysql e apache essendo davvero elementari sarà molto breve:

  • mysql
    Consiglio di scaricare la versione 5.0.x disponibile per il download:
    http://dev.mysql.com/downloads/mysql/5.0.html
    Una volta lanciato l’installer è sufficiente o far fare configurazione standard a mysql (se si è inesperti) o in alternativa eseguire la configurazione guidata da cui è possibile fare un rapido tuning di mysql in base all’utilizzo che se ne vuole fare.
  • apache
    Per lavorare con php in ambiente Windows consiglio l’utilizzo di apache 2.0.x.
    Link per scaricare Apache: http://httpd.apache.org/download.cgi
  • php
    Veniamo ora all’installazione (non difficile) di php come modulo di apache su sistema WAMP
    Scaricare la versione 5.1.x da php.net:
    http://www.php.net/downloads.php
    Non ci resta ora che seguire pochi passi per configurare PHP:
    1. Scompattare il file .zip appena scaricato in c:\php (es. ovviamente la directory scelta puà essere anche c:\programmi\php etc…)
    2. Copiare il file presente in c:\programmi\php php.ini-dist in c:\windows o c:\winnt (a seconda del S.O.) e rinominarlo come php.ini
    3. Andare nella directory di installazione di php e copiare il file php5ts.dll (se si installa php 4 il file si chiamerà  ovviamente php4ts.dll) in c:\windows\system32
    4. Inserire le seguenti righe di configurazione in httpd.conf (file di configurazione di apache) dopo i vari AddModule:
    LoadModule php5_module c:/programmi/php/php5apache2.dll
    AddType application/x-httpd-php .php

Andate sul vostro browser e digitando http://localhost vedrete apache che vi risponde.
Potete quindi testare php creando nella document root di apache un file info.php con la chiamata a phpinfo()

NOTE SU LIBRERIE mysql

Da un po’ di versioni di php è necessario abilitare le funzioni di mysql. Cià è possibile scommentando da C:\windows\php.ini la riga con l’estensione di php_mysql.dll
Copiare libmysql.dll in C:\windows\system32
Inoltre verificate di avere in php.ini il path di dove si trovano le estensioni configurato corrtetamente
Riavviare apache.

Sperando di essere stato di aiuto a qualcuno vi saluto,
Maxgrante
info[AT]massimo-caselli[DOT]com

Tabelle in MySQL, MyISAM vs INNODB

13 February 2006 maxgrante Nessun commento

Ciao a tutti,
affrontiamo di seguito un confronto tra le tabelle MyISAM (le classiche di mysql) e le innovative INNODB.

Cerchiamo innanzitutto di schematizzarne le differenze:

MyISAM (Default engine di mysql)

Sono le tabelle storiche di mysql, derivanti direttamente dalle vecchie ISAM che sono dismesse ormai da anni.
Garantiscono indubbiamente un’ottima affidabilità  e velocità . Su versione di mysql più vecchie della 4.1 sono sicuramente da preferirsi alle INNODB.

Forniscono un vantaggio notevole che è dato dalla possibilità  di poter utilizzare indici FULLTEXT per ricerche con ranking stile Google.

Il metodo di salvataggio dei dati è basato sulla costruzione e lavorazione di 3 file binari:

  • frm
    Struttura della tabella
  • MYD
    File contenente tutti i dati della tabella
  • MYI
    File contenente i dati relativi agli indici del database

Inutile sostituirsi ai manuali… :-D
Per maggiori informazioni: http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html

INNODB

Sempre più spesso capita di trovare database server le cui tabelle di default utilizzano l’engine INNODB.
Tale scelta è dettata dalla sempre più importanza anche per progetti web di funzionalità  che normalmente mysql con le semplici tabelle MyISAM non fornisce.
Vediamo quindi una serie di funzionalità  avanzate garantite dalle tabelle INNODB:

  • Foreign Key
    Le tabelle INNODB sono in grado di gestire l’integrità  referenziale tra le chiave esterne del database, in sostanza tale integrità  è sempre stata delegata all’abilità  dello sviluppatore, ora con il motore INNODB è possibile delegare questa annosa attività  a mysql stesso, potendo quindi specificare vari comportamenti a seconda della chiave esterna utilizzata.
  • Transazioni
    Le transazioni sono fondamentali in situazioni tipiche da shop online dove sino a che non arriva conferma da parte della banca o di chi valida la carta di credito, le query non devono essere “eseguite realmente”.
    Fondamentalmente si tratta di eseguire una serie di query che verranno validate o annullate mediante chiamate COMMIT o ROLLBACK.
  • Mancanza – FULLTEXT
    Cito ora una mancanza grave nelle tabelle INNODB, l’assenza di poter (almeno per ora) dichiarare un campo come indice fulltext per poter eseguire ricerche con score alla Google.

Queste sono le principali funzionalità  aggiuntive di INNODB rispetto a MyISAM, come sempre per maggiori informazioni vi rimando al manuale ufficiale di MySQL: http://dev.mysql.com/doc/refman/5.0/en/innodb-overview.html

COME SCEGLIERE LE TABELLE????

Cercherà ora di dettare due linee guide per stabilire se conviene realizzare tabelle MYISAM o INNODB.
Innanzitutto come sempre dipende dal contesto di applicazione.
Una breve premessa sulle performance… a mio parere la velocità  dei due motori è pressochè la stessa.
Se necessitiamo di transazioni, supporto all’integrità  referenziale perchè dobbiamo realizzare un’applicazione con shop online o un magazzino con carico/scarico (N.D.R. si puà fare tutto cià anche con MyISAM) utilizzerei le tabelle di tipo INNODB, altrimenti utilizzerei le MyISAM in quanto hanno due vantaggi grandissimi, supporto FULLTEXT e soprattutto è possibile fare un backup diretto dei file binari per l’importazione/esportazione della base dati.
Con le tabelle INNODB è invece molto complesso in quanto i dati di TUTTI i database presenti sul server e che utilizzano tabelle INNODB vengono normalmente salvati nel file ibdata1.

Anche volendo salvare i file dei dati ognuno per tabella le transazioni e gli indici vengono comunque salvati nel TABLESPACE e quindi il recovery mediante import di tutti i file presente per esempio sotto: /var/lib/mysql/miodb/ NON FUNZIONA!

Sperando di essere stato il più chiaro possibile vi saluto.
Ciao. Max
info[AT]massimo-caselli[DOT]com

Qmail toaster, soluzione per mail server basato su Linux

10 February 2006 maxgrante 1 commento

Ciao a tutti,
oggi vorrei trattare e più che altro segnalare un fantastico prodotto Opensource basato interamente su Qmail.
La soluzione in questione è QMAILTOASTERhttp://www.qmailtoaster.com

Utilizzando questo prodotto possiamo con notevole facilità  realizzare un server di posta che abbia tutti i servizi e supporti che possano servire come una gestione via web dei domini, degli account etc…

Allego brevissima lista servizi tratta dal sito ufficiale:

* Source RPM packages ready for all RPM based distributions
* SMTP with SMTP-AUTH, SpamThrottle, DNS, large concurrency
* SPF “Sender Policy Framework”
* Integrated SpamAssassin, ClamAV and Simscan
* Warlord virus and worm loader realtime scanning
* CHKUSER 2.0 functions for qmail-smtpd
* Qmail-Tap provides email archive capability
* Virtual Domains (mysql), Virtual Users (mysql)
* Autoresponder, Mailing List
* Web-based email system, Web-based administration tools
* SMTP roaming via SMTP-AUTH, POP3-AUTH, & IMAP-AUTH
* POP3, POP3-SSL, IMAP and IMAP-SSL

Ultimamente hanno pubblicato un fantastico how-to che permette di installare Toaster su CentOS 4 (e anche 4.2) senza alcun problema.
L’how to lo potete trovare qui: http://www.qmailtoaster.com/info/EZ-QmailToaster-Install.txt

Personalmente perà vi consiglio di scaricare il file che fa il download automatico dei pacchetti necessari e anche quello che esegue l’installazione perà, il primo lanciatelo pure, il secondo invece seguitelo passo passo a mano.

E’ un’operazione più lunga e meno comoda ma fornisce maggiori informazioni in caso di problemi.

A questo punto avremo a disposizione interfaccie web per l’amministrazione dell’intero server di posta.
- Qmailadmin: per la gestione autonoma da parte del cliente del proprio dominio
- IsoQlog: per visualizzare le statistiche di utilizzo del server mail per dominio, giorno, mese etc…
- MrtgMailserver: generazione grafici MRTG relativi alla posta elettronica
- Vqadmin: Gestione riservata ai sistemisti/tecnici per la creazione dei “pacchetti” email e dei domini che per cui il server gestisce la posta

NOTA SULLA SICUREZZA

Essendo più pacchetti installati esternamente è consigliatissimo disabilitare da yum (per esempio su Centos) l’aggiornamento automatico di pacchetti come qmail, clam, spamassassin e tenere aggiornati gli RPM direttamente dal sito web http://www.qmailtoaster.com

Sperando di avervi dato utili informazioni saluto tutti.

Maxgrante
info[AT]massimo-caselli[DOT]com

Soluzione problemi codifica caratteri in MySQL/PHP

28 January 2006 maxgrante 22 commenti

Buongiorno a tutti,
innanzitutto cominciamo ad inquadrare il problema e a fare presente che se ora sono in grado di scrivere questo articolo è grazie al supporto che ho ricevuto sul forum di HTML.IT da parte di Leandro Luccerini, per contatti: leandro980[AT]libero[DOT]it

PREMESSE AL PROBLEMA

  • mysql versione > 4.1.x
  • Tipo di encoding delle pagine web php utf8

DESCRIZIONE PROBLEMA

La situazione problematica nasce nel momento in cui abbiamo un sito web che deve gestire caratteri extra latini, per esempio nel mio caso ho affrontato questo problema dovendo realizzare un sito in lingua russa, ovvero utilizzando il cirillico.
Il mio approccio alla situazione e’ stato quello di realizzare TUTTE le pagine web con codifica utf8 e database, tabelle e campi di testo utf8 a loro volta.
La cosa che mi ha fatto impazzire e capirci veramente poco per diverso tempo e’ che se io inserivo nel database caratteri cirillici come ad esempio (ßрøòõт – ciao) e da PhpMyADMIN (di seguito PMA) vedevo male, idem il dump, mentre quando tiravo su i dati da applicativo tutto funzionava a meraviglia.
Capitava l’inverso con PMA, ovvero se inserivo in cirillico su PMA e visualizzavo da PMA tutto bene, via applicazione niente.

SOLUZIONE

Prima di tutto vi invito a leggervi questa parte di manualistica online di mysql, CHARSET.

Sostanzialmente sui server mysql di sistemi di hosting italiani (ma credo anche americani) e comunque in generale, l’impostazione del default_character_set è impostata a latin1.
Ma anche qualora sia impostata ad utf8 quando via script php ci connettiamo al database mysql la nostra sessione di default (nonostante la pagina sia encodata utf8) sarà attivata con character set latin1, cosa succede quindi, che i dati e le query che inviamo sfasano e il sistema memorizza erroneamente i dati.

Di fatto il comportamento giusto lo ha PMA, dobbiamo cercare quindi di emularlo.
Per farlo basta di fatto lanciare dopo ogni connessione la seguente query: SET NAMES utf8
Così facendo la connessione tra client e server sarà UTF8.

CONCLUSIONE

Per concludere possiamo dire che per siti che trattano lingua standard europee come italiano, inglese, francese etc… possiamo avere tutto il DB latin1, connessione client server latin1 ed encoding ISO-8859-1

Nel caso di siti con cirillico, arabo etc… utilizziamo tutto il database UTF8, encoding delle pagine UTF8 e soprattutto dobbiamo eseguire per sicurezza la query sopra indicata dopo ogni connessione con mysql.

Mi scuso per non essere stato molto chiaro in alcuni punti, purtroppo questo argomento è complesso e fastidioso…
Se avete suggerimenti sono benvenuti.

Ciao a tutti. Max
info[AT]massimo-caselli[DOT]com

WordPress gestione particolare mod_rewrite

23 January 2006 maxgrante Nessun commento

Ciao a tutti,
dopo i due articoli scritti su mod_rewrite di apache vorrei trattare di come molti applicativi, tra cui wordpress (il sistema di blogging che utilizzo per questo blog) gestiscono il mod_rewriting in modo più stretto tra apache e php.

Fondamentalmente anzichè applicare regole specifiche come quelle trattate nei precedenti articoli es:
RewriteEngine On
….
….
RewriteRule ^
([^/]+)/servizi/service.php?lang=$1 [L]

Utilizzano queste uniche regole:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php

In pratica le regole che WordPress fa inserire nel file .htaccess provvedono a fare un check se il file o la directory richiesta esiste, in tal caso apache richiede la risorsa reale e presente fisicamente, altrimenti redireziona alla index.php di wordpress.

Questa pagina di fatto si occupa, in base a come è settato l’applicativo da admin (c’è un wizard molto comodo che vi allego, forse un po’ piccola… :-D )

Permalink

In pratica si imposta come WordPress deve trattare e gestire gli URL. A quel punto è l’applicativo stesso che si occupa di fare il parsing della variabile $_SERVER['REQUEST_URI'] (almeno credo che usino questa, al massimo ne utilizzano una simile :-D ) e di generare on the fly i link corretti.

Questo tipo di gestione da realizzare è molto più flessibile ma anche più complicata in quanto richiede un notevole sforzo di parsing degli indirizzi. Soluzione MOLTO valida per applicativi completi e liberamente scaricabili come WordPress ma poco utile per siti web custom.

Ciao a tutti,
Max
info[AT]massimo-caselli[DOT]com