LAMP: Linux, Apache, MySQL e PHP: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (MySQL e PHP)
Riga 3: Riga 3:


=Introduzione=
=Introduzione=
LAMP l'acronimo di Linux Apache Mysql Php e indica l'ambiente libero (e anche gratuito in questo caso) di programmazione di applicazioni Web che possibile costruire dalla somma delle parti di queste eccezionali applicazioni a sorgente aperto.
LAMP è l'acronimo di Linux Apache Mysql Php e indica l'ambiente libero (e anche gratuito in questo caso) di programmazione di applicazioni Web che è possibile costruire dalla somma delle parti di queste eccezionali applicazioni a sorgente aperto.


Questa guida non fornisce alcun elemento per la configurazione ottimale dei server presi in esame (Apache e MySQL). Essa non intesa ad amministrare tali servizi su macchine in produzione, ma solo a fornire all' utente domestico e allo sviluppatore web un ambiente correttamente configurato senza introdurre sensibili rischi per la sicurezza del computer usato.
Questa guida non fornisce alcun elemento per la configurazione ottimale dei server presi in esame (Apache e MySQL). Essa non è intesa ad amministrare tali servizi su macchine in produzione, ma solo a fornire all' utente domestico e allo sviluppatore web un ambiente correttamente configurato senza introdurre sensibili rischi per la sicurezza del computer usato.


Per il dettaglio sulla configurazione di quanto preso in esame Vi invitiamo pertanto a visitare in primo luogo i siti [http://httpd.apache.org Httpd Apache], [http://www.php.net PHP.net] e [http://www.mysql.org MySQL.org] e, quando presenti, le guide specifiche messe a disposizione da questa Community.
Per il dettaglio sulla configurazione di quanto preso in esame Vi invitiamo pertanto a visitare in primo luogo i siti [http://httpd.apache.org Httpd Apache], [http://www.php.net PHP.net] e [http://www.mysql.org MySQL.org] e, quando presenti, le guide specifiche messe a disposizione da questa Community.
Riga 13: Riga 13:
=Il server http=
=Il server http=
==Apache==
==Apache==
[http://httpd.apache.org/ Apache] il frutto del lavoro della [http://www.apache.org/ Apache Software Foundation]. Tra le caratteristiche che ne fanno il server HTTP pi� diffuso evidenziamo che:
[http://httpd.apache.org/ Apache] è il frutto del lavoro della [http://www.apache.org/ Apache Software Foundation]. Tra le caratteristiche che ne fanno il server HTTP più diffuso evidenziamo che:
* software libero;
* è software libero;
* gira sulle pi� svariate piattaforme (*nix, Windows, ec...);
* gira sulle più svariate piattaforme (*nix, Windows, ec...);
* sviluppato in accordo con le pi� recenti specifiche per i servizi http.
* è sviluppato in accordo con le più recenti specifiche per i servizi http.
Secondo [http://news.netcraft.com/archives/web_server_survey.html Netcraft] Apache, con una percentuale del 68% (febbraio 2005), il server http pi� usato in assoluto.
Secondo [http://news.netcraft.com/archives/web_server_survey.html Netcraft] Apache, con una percentuale del 68% (febbraio 2005), è il server http più usato in assoluto.


Apache deve il suo nome all' omonima trib� di indiani nordamericani, famosa per le straordinarie doti di resistenza e strategia. Visto per� che il software stato inizialmente sviluppato come una serie di patches ad un altro server http, nell' uso comune Apache significa anche "A Patchy Server".
Apache deve il suo nome all' omonima tribù di indiani nordamericani, famosa per le straordinarie doti di resistenza e strategia. Visto però che il software è stato inizialmente sviluppato come una serie di patches ad un altro server http, nell' uso comune Apache significa anche "A Patchy Server".


La pronuncia corretta di Apache suona grossomodo come "APACI".
La pronuncia corretta di Apache suona grossomodo come "APACI".


Il progetto Apache suddiviso principalmente in due rami distinti (ne esiste un terzo, ma nella fase di sviluppo alpha al momento): la versione 1.3 (la versione "vecchia" molto robusta e testata) e la versione 2.0 (dal design innovativo rispetto alla precedente).
Il progetto Apache è suddiviso principalmente in due rami distinti (ne esiste un terzo, ma è nella fase di sviluppo alpha al momento): la versione 1.3 (la versione "vecchia" molto robusta e testata) e la versione 2.0 (dal design innovativo rispetto alla precedente).
   
   
===Apache 1.3===
===Apache 1.3===
====Installazione====
====Installazione====
L' installazione nuda e cruda di Apache 1.3 in Debian di una semplicit� disarmante. Tutto quello che avremo bisogno di fare consiste nel dare il comando:
L' installazione nuda e cruda di Apache 1.3 in Debian è di una semplicità disarmante. Tutto quello che avremo bisogno di fare consiste nel dare il comando:
<pre># apt-get install apache</pre>
<pre># apt-get install apache</pre>
al termine del download ci viene chiesto se vogliamo abilitare suExec: a meno di utilizzi professionali, possiamo tranquillamente rispondere "No".
al termine del download ci viene chiesto se vogliamo abilitare suExec: a meno di utilizzi professionali, possiamo tranquillamente rispondere "No".
====Verifica====
====Verifica====
A questo punto il nostro server web � gi� attivo, ma possiamo anche verificarlo tramite il comando '''ps''':
A questo punto il nostro server web è già attivo, ma possiamo anche verificarlo tramite il comando '''ps''':
<pre>$ ps aux |grep apache
<pre>$ ps aux |grep apache
root      7378  0.0  0.4  4592  2228 pts/1    S    12:01  0:00 /usr/sbin/apache
root      7378  0.0  0.4  4592  2228 pts/1    S    12:01  0:00 /usr/sbin/apache
Riga 39: Riga 39:
www-data  7382  0.0  0.4  4592  2204 pts/1    S    12:01  0:00 /usr/sbin/apache
www-data  7382  0.0  0.4  4592  2204 pts/1    S    12:01  0:00 /usr/sbin/apache
www-data  7383  0.0  0.4  4592  2204 pts/1    S    12:01  0:00 /usr/sbin/apache</pre>
www-data  7383  0.0  0.4  4592  2204 pts/1    S    12:01  0:00 /usr/sbin/apache</pre>
Notiamo subito uno dei meccanismi principali di Apache: esistono svariati processi in esecuzione. Per la precisione abbiamo 1 processo propriet� dell' utente root e ben 5 processi di propriet� dell' utente www-data, come possiamo vedere con il comando '''pstree''':
Notiamo subito uno dei meccanismi principali di Apache: esistono svariati processi in esecuzione. Per la precisione abbiamo 1 processo proprietà dell' utente root e ben 5 processi di proprietà dell' utente www-data, come possiamo vedere con il comando '''pstree''':
<pre>$ pstree -uc |grep apache
<pre>$ pstree -uc |grep apache
     ??apache???apache(www-data)
     ├─apache─┬─apache(www-data)
     ?       ??apache(www-data)
           ├─apache(www-data)
     ?       ??apache(www-data)
           ├─apache(www-data)
     ?       ??apache(www-data)
           ├─apache(www-data)
     ?       ??apache(www-data)</pre>
           └─apache(www-data)</pre>
Il primo processo (padre) viene lanciato da root e ed il suo unico compito consiste nel genere e controllare i restanti processi (figli). Sono questi ultimi a rispondere alle richieste http ed a fornire le pagine. In questo modo Apache gira con privilegi minimi (quelli dell' utente www-data) ed in caso di una sua eventuale compromissione gli effetti sul sistema sono in qualche misura limitati.
Il primo processo (padre) viene lanciato da root e ed il suo unico compito consiste nel genere e controllare i restanti processi (figli). Sono questi ultimi a rispondere alle richieste http ed a fornire le pagine. In questo modo Apache gira con privilegi minimi (quelli dell' utente www-data) ed in caso di una sua eventuale compromissione gli effetti sul sistema sono in qualche misura limitati.


====Configurazione====
====Configurazione====
La configurazione di Apache un compito estremamente delicato e pu� richiedere conoscenze anche notevoli in svariati ambiti quali networking, programmazione e amministrazione di sistema. Dato che questa guida si propone fondamentalmente di illustrare i passi necessari ad installare e configurare un sistema per uso non professionale, ci limiteremo agli aspetti macroscopici della configurazione.
La configurazione di Apache è un compito estremamente delicato e può richiedere conoscenze anche notevoli in svariati ambiti quali networking, programmazione e amministrazione di sistema. Dato che questa guida si propone fondamentalmente di illustrare i passi necessari ad installare e configurare un sistema per uso non professionale, ci limiteremo agli aspetti macroscopici della configurazione.


I files di configurazione di Apache risiedono nella directory '''/etc/apache''' al cui interno troviamo svariati files. Quello di cui ci occuperemo qui il file di controllo principale e cio� '''httpd.conf'''. Apriamo il file con il nostro editor di fiducia (dobbiamo essere root per modificare questo file) e vediamo quali sono le direttive principali su cui agiremo.
I files di configurazione di Apache risiedono nella directory '''/etc/apache''' al cui interno troviamo svariati files. Quello di cui ci occuperemo qui è il file di controllo principale e cioè '''httpd.conf'''. Apriamo il file con il nostro editor di fiducia (dobbiamo essere root per modificare questo file) e vediamo quali sono le direttive principali su cui agiremo.


'''server-pool size'''
'''server-pool size'''
Alla riga 130 del file di configurazione originale troviamo il primo blocco da prendere in esame: si tratta della direttiva che dice ad Apache il numero minimo e massimo di processi "figlio" da mantenere in memoria. Ogni processo "figlio" risponde ad un numero prefissato di richieste, dopodich� viene ucciso (mondo crudele) e ne viene generato uno nuovo. Esaminiamo la direttiva:
Alla riga 130 del file di configurazione originale troviamo il primo blocco da prendere in esame: si tratta della direttiva che dice ad Apache il numero minimo e massimo di processi "figlio" da mantenere in memoria. Ogni processo "figlio" risponde ad un numero prefissato di richieste, dopodichè viene ucciso (mondo crudele) e ne viene generato uno nuovo. Esaminiamo la direttiva:
<pre>MinSpareServers 5
<pre>MinSpareServers 5
MaxSpareServers 10</pre>
MaxSpareServers 10</pre>
Come default Apache genera 5 processi, ma se il carico aumenta pu� arrivare fino a 10 figli simultanei. Per un sistema domestico sicuramente eccessivo ed io consiglio di porre queste limitazioni:
Come default Apache genera 5 processi, ma se il carico aumenta può arrivare fino a 10 figli simultanei. Per un sistema domestico è sicuramente eccessivo ed io consiglio di porre queste limitazioni:
<pre>MinSpareServers 1
<pre>MinSpareServers 1
MaxSpareServers 2</pre>
MaxSpareServers 2</pre>


'''Number of servers to start initially'''
'''Number of servers to start initially'''
Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell' avvio del server. Il default :
Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell' avvio del server. Il default è:
<pre>StartServers 5</pre>
<pre>StartServers 5</pre>
che noi cambieremo in:
che noi cambieremo in:
Riga 68: Riga 68:


'''Listen'''
'''Listen'''
Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. E' anche possibile specificare una particolare accoppiata di indirizzo IP + porta TCP. Possiamo tranquillamente lasciare commentata la direttiva ed il nostro server sar� in ascolto sulla porta 80 per tutti gli indirizzi configurati sul sistema.
Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. E' anche possibile specificare una particolare accoppiata di indirizzo IP + porta TCP. Possiamo tranquillamente lasciare commentata la direttiva ed il nostro server sarà in ascolto sulla porta 80 per tutti gli indirizzi configurati sul sistema.


'''BindAddress'''
'''BindAddress'''
Riga 74: Riga 74:


'''ServerName'''
'''ServerName'''
Con questa direttiva (alla linea 276) diciamo ad Apache quale il suo nome. Questo particolarmente utile nel caso abbiamo a disposizione un [[FQDN]] (a questo proposito puoi consultare la guida [[Server Web Casalingo]]).
Con questa direttiva (alla linea 276) diciamo ad Apache quale è il suo nome. Questo è particolarmente utile nel caso abbiamo a disposizione un [[FQDN]] (a questo proposito puoi consultare la guida [[Server Web Casalingo]]).


'''DocumentRoot'''
'''DocumentRoot'''
Con questa direttiva (riga 284) indichiamo ad Apache quale directory del nostro sistema deve corrispondere alla radice del Web Server. Il default va pi� che bene: ricordatevi quindi che tutti i vostri files che volete pubblicare sul server http dovranno risiedere in '''/var/www''' o in una sua sotto-directory.
Con questa direttiva (riga 284) indichiamo ad Apache quale directory del nostro sistema deve corrispondere alla radice del Web Server. Il default va più che bene: ricordatevi quindi che tutti i vostri files che volete pubblicare sul server http dovranno risiedere in '''/var/www''' o in una sua sotto-directory.


{{Warningbox|fondamentale per il funzionamento di Apache che i files che devono essere visibili via Web siano leggibili da parte dell' utente '''www-data''' e che le sotto-directory di /var/www siano raggiunbili dallo stesso utente}}
{{Warningbox|è fondamentale per il funzionamento di Apache che i files che devono essere visibili via Web siano leggibili da parte dell' utente '''www-data''' e che le sotto-directory di /var/www siano raggiunbili dallo stesso utente}}
Questo il minimo indispensabile che ci occorre sapere per poter utilizzare proficuamente Apache: salviamo il file e procediamo a riavviare Apache. Per fare questo possiamo procedere in due modi distinti:
Questo è il minimo indispensabile che ci occorre sapere per poter utilizzare proficuamente Apache: salviamo il file e procediamo a riavviare Apache. Per fare questo possiamo procedere in due modi distinti:
* metodo standard <pre><nowiki># apachectl graceful
* metodo standard <pre><nowiki># apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted</nowiki></pre>
/usr/sbin/apachectl graceful: httpd gracefully restarted</nowiki></pre>
* metodo debian init.d <pre><nowiki># /etc/init.d/apache restart
* metodo debian init.d <pre><nowiki># /etc/init.d/apache restart
Restarting apache.</nowiki></pre>
Restarting apache.</nowiki></pre>
Senza dubbio '''apachectl''' il metodo da preferire. Oltre a riavviare Apache possiamo controllare altri aspetti del server web. Tra questi quello che inizialmente pu� risultare pi� comodo consiste nel controllo della sintassi del file di configurazione.<br>  
Senza dubbio '''apachectl''' è il metodo da preferire. Oltre a riavviare Apache possiamo controllare altri aspetti del server web. Tra questi quello che inizialmente può risultare più comodo consiste nel controllo della sintassi del file di configurazione.<br>  
Facciamo un esempio:
Facciamo un esempio:
<pre># apachectl configtest
<pre># apachectl configtest
Syntax error on line 49 of /etc/apache/httpd.conf:
Syntax error on line 49 of /etc/apache/httpd.conf:
ServerType takes one argument, 'inetd' or 'standalone'</pre>
ServerType takes one argument, 'inetd' or 'standalone'</pre>
lo script mi avvisa che alla riga 49 di httpd.conf c'un errore di sintassi: la direttiva ServerType supporta un solo argomento, mentre nel file ne sono specificati almeno 2. Se controllo �a riga incriminata scopro che:
lo script mi avvisa che alla riga 49 di httpd.conf c'è un errore di sintassi: la direttiva ServerType supporta un solo argomento, mentre nel file ne sono specificati almeno 2. Se controllo òa riga incriminata scopro che:
<pre>ServerType is either inetd, or standalone.  Inetd mode is only supported on</pre>
<pre>ServerType is either inetd, or standalone.  Inetd mode is only supported on</pre>
Noto subito che manca il commendo (#) a inizio riga, provvedo a reinserirlo e quindi controllo nuovamente la configurazione:
Noto subito che manca il commendo (#) a inizio riga, provvedo a reinserirlo e quindi controllo nuovamente la configurazione:
Riga 96: Riga 96:
Syntax OK</pre>
Syntax OK</pre>


Se non abbiamo fatto pasticci, una volta riavviato il server Apache, baster� puntare il nostro browser all' indirizzo '''http://127.0.0.1''' per vedere la pagina di default installata dal manutentore del pacchetto Debian:
Se non abbiamo fatto pasticci, una volta riavviato il server Apache, basterà puntare il nostro browser all' indirizzo '''http://127.0.0.1''' per vedere la pagina di default installata dal manutentore del pacchetto Debian:
[[Immagine:Apache_installazione.png|thumb|center|Pagina di Benvenuto di Apache]]
[[Immagine:Apache_installazione.png|thumb|center|Pagina di Benvenuto di Apache]]


{{box|Nota Bene: Directory home degli utenti|Per default Apache permette anche a ciascun utente del sistema di avere una propria home. Poniamo l' esempio dell' utente '''pippo''': all' interno di /home/pippo l' utente dovr� semplicemente creare la directory '''public_html''' per poter accedere ai files in essa contenuti attraverso l' indirizzo '''http://127.0.0.1/~pippo/'''}}
{{box|Nota Bene: Directory home degli utenti|Per default Apache permette anche a ciascun utente del sistema di avere una propria home. Poniamo l' esempio dell' utente '''pippo''': all' interno di /home/pippo l' utente dovrà semplicemente creare la directory '''public_html''' per poter accedere ai files in essa contenuti attraverso l' indirizzo '''http://127.0.0.1/~pippo/'''}}


Ora non ci resta che inserire i nostri files in /var/www o nella nostra public_html per poter cominciare ad usare Apache!
Ora non ci resta che inserire i nostri files in /var/www o nella nostra public_html per poter cominciare ad usare Apache!
Riga 105: Riga 105:
===Apache 2.0===
===Apache 2.0===
====Installazione====
====Installazione====
L'installazione di Apache2 perfettamente uguale a quella precedentemente illustrata per Apache:
L'installazione di Apache2 è perfettamente uguale a quella precedentemente illustrata per Apache:
<pre>
<pre>
# apt-get install apache2-mpm-prefork
# apt-get install apache2-mpm-prefork
</pre>
</pre>


Il metapacchetto ''apache2'' presente, ma installa '''apache2-mpm-worker''', che risulta non essere compatibile con '''libapache2-mod-php4'''.
Il metapacchetto ''apache2'' è presente, ma installa '''apache2-mpm-worker''', che risulta non essere compatibile con '''libapache2-mod-php4'''.


======I diversi pacchetti======
======I diversi pacchetti======
La pacchettizzazione Debian, per�, leggermente diversa, per poter gestire le nuove caratteristiche introdotte in Apache2: esistono quattro diversi pacchetti di Apache2, ognuno con delle caratteristiche diverse (relativamente alla gestione dei thread e dei child):
La pacchettizzazione Debian, però, è leggermente diversa, per poter gestire le nuove caratteristiche introdotte in Apache2: esistono quattro diversi pacchetti di Apache2, ognuno con delle caratteristiche diverse (relativamente alla gestione dei thread e dei child):
; apache2-mpm-perchild : la soluzione adottata in questo pacchetto fa in modo che vengano avviati un numero definito di processi, i quali possono creare dei thread in base al carico della macchina. Una peculiarit� � la possibilit� di assegnare dei permessi diversi ad ogni processo, vincolarlo ad un singono ''virtual host'', cos� da gestire facilmente la redistribuzione delle risorse e/o personalizzare il servizio offerto;
; apache2-mpm-perchild : la soluzione adottata in questo pacchetto fa in modo che vengano avviati un numero definito di processi, i quali possono creare dei thread in base al carico della macchina. Una peculiarità è la possibilità di assegnare dei permessi diversi ad ogni processo, vincolarlo ad un singono ''virtual host'', così da gestire facilmente la redistribuzione delle risorse e/o personalizzare il servizio offerto;
; apache2-mpm-prefork : I thread sono disabilitati, e la gestione dei '''pool di processi''' viene gestita come per Apache1 (''MinSpareServers'' e ''MaxSpareServers'');
; apache2-mpm-prefork : I thread sono disabilitati, e la gestione dei '''pool di processi''' viene gestita come per Apache1 (''MinSpareServers'' e ''MaxSpareServers'');
; apache2-mpm-threadpool : pacchetto di transizione;
; apache2-mpm-threadpool : pacchetto di transizione;
; apache2-mpm-worker : la soluzione intermedia rispetto a perchild e prefork.
; apache2-mpm-worker : la soluzione è intermedia rispetto a perchild e prefork.


Quello che a noi interessa '''apache2-mpm-prefork''', visto che l'unico ad essere compatibile con le librerie che offrono il supporto per php4.
Quello che a noi interessa è '''apache2-mpm-prefork''', visto che è l'unico ad essere compatibile con le librerie che offrono il supporto per php4.


====Verifica====
====Verifica====
Per verificare la corretta installazione di Apache2, sufficiente aprire un browser ed inserire l'indirizzo [http://localhost/].
Per verificare la corretta installazione di Apache2, è sufficiente aprire un browser ed inserire l'indirizzo [http://localhost/].
Se Apache stato installato correttamente, apparir� una schermata simile a questa:
Se Apache è stato installato correttamente, apparirà una schermata simile a questa:
[[Immagine:Apache2_installazione.png|thumb|center|Schermata di benvenuto di Apache2]]
[[Immagine:Apache2_installazione.png|thumb|center|Schermata di benvenuto di Apache2]]


====Configurazione====
====Configurazione====
Le regole di configurazione viste precedentemente per Apache valgono anche per Apache2.<br />
Le regole di configurazione viste precedentemente per Apache valgono anche per Apache2.<br />
Sono per� presenti delle sostanziali differenze a livello strutturale, per quanto riguarda la struttura della directory '''/etc/apache2''', che riguardano l'organizzazione dei file e la gestione dei ''VirtualHost'' e dei ''moduli''.
Sono però presenti delle sostanziali differenze a livello strutturale, per quanto riguarda la struttura della directory '''/etc/apache2''', che riguardano l'organizzazione dei file e la gestione dei ''VirtualHost'' e dei ''moduli''.


=====Organizzazione dei file=====
=====Organizzazione dei file=====
Riga 134: Riga 134:


======File di Configurazione======
======File di Configurazione======
Il file di configurazione di Apache2 si chiama '''apache2.conf''', ed adotta la stessa sintassi del vecchio file di configurazione '''httpd.conf''', che ancora presente nella directory '''/etc/apache2''' e viene richiamato all'interno del file di configurazione generale, per motivi di compatibilit�... consiglio, comunque, di non utilizzarlo, in quando un file di transizione, e in futuro potrebbe venir rimosso da apache2.
Il file di configurazione di Apache2 si chiama '''apache2.conf''', ed adotta la stessa sintassi del vecchio file di configurazione '''httpd.conf''', che è ancora presente nella directory '''/etc/apache2''' e viene richiamato all'interno del file di configurazione generale, per motivi di compatibilità... consiglio, comunque, di non utilizzarlo, in quando è un file di transizione, e in futuro potrebbe venir rimosso da apache2.


======Moduli======
======Moduli======
La gestione dei moduli ha subito una profonda modifica rispetto alla versione 1 di Apache: non � pi� legata ad un solo file, ma a due directory: '''/etc/apache2/mods-available''' e '''/etc/apache2/mods-enabled'''.
La gestione dei moduli ha subito una profonda modifica rispetto alla versione 1 di Apache: non è più legata ad un solo file, ma a due directory: '''/etc/apache2/mods-available''' e '''/etc/apache2/mods-enabled'''.
; mods-available : contiene i file che permettono il caricamento dei moduli. I file presenti all'interno di questa directory sono divisibili, tramite le loro estensioni, in due categorie: i file con estensione ''.load'' contengono le istruzioni necessarie al caricameto dei moduli; i file con estensione ''.config'', invece, contengono le eventuali opzioni di configurazione da passare al modulo.
; mods-available : contiene i file che permettono il caricamento dei moduli. I file presenti all'interno di questa directory sono divisibili, tramite le loro estensioni, in due categorie: i file con estensione ''.load'' contengono le istruzioni necessarie al caricameto dei moduli; i file con estensione ''.config'', invece, contengono le eventuali opzioni di configurazione da passare al modulo.


Riga 148: Riga 148:


=Il processore PHP=
=Il processore PHP=
PHP un [[acronimo ricorsivo]] per "PHP: Hypertext Preprocessor" e cio� "PHP: preprocessore ipertestuale". Questo significa che i nostri script non vengono elaborati dai client (in questo caso dai browser) come ad esempio nel caso di javascript, ma che vengono eseguiti direttamente sul server il quale fornisce ai clients semplici pagine html. Un linguiaggio di questo tipo viene chiamato anche '''server-side''' (lato server), in contrapposizione ai linguaggi '''client-side''' (lato client).
PHP è un [[acronimo ricorsivo]] per "PHP: Hypertext Preprocessor" e cioè "PHP: preprocessore ipertestuale". Questo significa che i nostri script non vengono elaborati dai client (in questo caso dai browser) come ad esempio nel caso di javascript, ma che vengono eseguiti direttamente sul server il quale fornisce ai clients semplici pagine html. Un linguiaggio di questo tipo viene chiamato anche '''server-side''' (lato server), in contrapposizione ai linguaggi '''client-side''' (lato client).


La cosa pi� interessante nell'uso di PHP che si tratta di un linguaggio estremamente semplice per il principiante, ma che, tuttavia, offre molte prestazioni avanzate al programmatore di professione.
La cosa più interessante nell'uso di PHP è che si tratta di un linguaggio estremamente semplice per il principiante, ma che, tuttavia, offre molte prestazioni avanzate al programmatore di professione.


Con PHP non siete limitati soltanto ad un output in HTML. Le possibilit� di PHP, infatti, includono l'abilit� di generare immagini, files PDF e perfino filmati Flash al volo (utilizzando libswf e Ming). Sarete in grado di generare facilmente qualsiasi testo, come XHTML e qualsiasi altro file XML. PHP pu� autogenerare questi file, e salvarli nel file system, piuttosto che eseguire un printing esterno, o creare server-side cache per contenuti dinamici.  
Con PHP non siete limitati soltanto ad un output in HTML. Le possibilità di PHP, infatti, includono l'abilità di generare immagini, files PDF e perfino filmati Flash al volo (utilizzando libswf e Ming). Sarete in grado di generare facilmente qualsiasi testo, come XHTML e qualsiasi altro file XML. PHP può autogenerare questi file, e salvarli nel file system, piuttosto che eseguire un printing esterno, o creare server-side cache per contenuti dinamici.  


Una delle caratteristiche pi� importanti e significative di PHP la possibilit` di supportare una completa gamma di databases. Scrivere una pagina web collegata ad un database incredibilmente semplice.
Una delle caratteristiche più importanti e significative di PHP è la possibilit` di supportare una completa gamma di databases. Scrivere una pagina web collegata ad un database è incredibilmente semplice.


PHP fa anche da supporto per dialogare con altri servizi utilizzando i protocolli del tipo LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (in Windows) e innumerevoli altri. Potete anche aprire network sockets ed interagire usando qualsiasi altro protocollo. Inoltre supporta l'interscambio di dati complessi WDDX tra, virtualmente, tutti i linguaggi di programmazione web. A proposito di interconessioni, PHP supporta l'installazione dei JavaObjects e l'utilizzo di questi come oggetti PHP in modo trasparente. Si pu� anche usare la nostra estensione CORBA per accedere ad oggetti remoti.  
PHP fa anche da supporto per dialogare con altri servizi utilizzando i protocolli del tipo LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (in Windows) e innumerevoli altri. Potete anche aprire network sockets ed interagire usando qualsiasi altro protocollo. Inoltre supporta l'interscambio di dati complessi WDDX tra, virtualmente, tutti i linguaggi di programmazione web. A proposito di interconessioni, PHP supporta l'installazione dei JavaObjects e l'utilizzo di questi come oggetti PHP in modo trasparente. Si può anche usare la nostra estensione CORBA per accedere ad oggetti remoti.  
{{box|Nota Bene:|Questo elenco delle funzionalit� offerte da PHP tratto dal manuale online di PHP e precisamente dal capitolo [http://it2.php.net/manual/it/intro-whatcando.php Che cosa pu� fare PHP?]}}
{{box|Nota Bene:|Questo elenco delle funzionalità offerte da PHP è tratto dal manuale online di PHP e precisamente dal capitolo [http://it2.php.net/manual/it/intro-whatcando.php Che cosa può fare PHP?]}}


==Installazione==
==Installazione==
Anche installare PHP non un compito per nulla complesso.
Anche installare PHP non è un compito per nulla complesso.
===PHP e Apache 1.3===
===PHP e Apache 1.3===
Vediamo subito come procedere a abilitare PHP per il nostro server Apache in maniera minimale:
Vediamo subito come procedere a abilitare PHP per il nostro server Apache in maniera minimale:
<pre># apt-get install libapache-mod-php4</pre>
<pre># apt-get install libapache-mod-php4</pre>
Apt scaricher� il modulo per Apache, le eventuali dipendenze e aggiorner� anche il file di configurazione dei moduli (/etc/apache/modules.conf).
Apt scaricherà il modulo per Apache, le eventuali dipendenze e aggiornerà anche il file di configurazione dei moduli (/etc/apache/modules.conf).


Tutto quello che dovremo fare manualmente di riavviare Apache, altrimenti non ci fornir� gli script Php elaborati, ma ci permetter� unicamente di scaricarli. Come abbiamo gi� visto nella sezione relativa all' installazione di Apache il comando :
Tutto quello che dovremo fare manualmente è di riavviare Apache, altrimenti non ci fornirà gli script Php elaborati, ma ci permetterà unicamente di scaricarli. Come abbiamo già visto nella sezione relativa all' installazione di Apache il comando è:
<pre># apachectl graceful
<pre># apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted</pre>
/usr/sbin/apachectl graceful: httpd gracefully restarted</pre>


Ora, anche se a livello minimale, Apache in grado fornire al nostro browser l' output degli script elaborati dal motore PHP. Non ci resta altro da fare che [[#Test|testarne]] il funzionamento.
Ora, anche se a livello minimale, Apache è in grado fornire al nostro browser l' output degli script elaborati dal motore PHP. Non ci resta altro da fare che [[#Test|testarne]] il funzionamento.


===PHP e Apache 2.0===
===PHP e Apache 2.0===


==Test==
==Test==
Il modo pi� semplice per testare la nostra installazione di PHP consiste nel preparare uno script e tentare di visualizzarlo nel nostro browser.
Il modo più semplice per testare la nostra installazione di PHP consiste nel preparare uno script e tentare di visualizzarlo nel nostro browser.


Possiamo procedere in due modi fondamentalmente: creare uno script nella '''DocumentRoot''' del server web, e cio� '''/var/www''' (se non l' avete modificata in ahttpd.conf) oppure nella nostra '''public_html.
Possiamo procedere in due modi fondamentalmente: creare uno script nella '''DocumentRoot''' del server web, e cioè '''/var/www''' (se non l' avete modificata in ahttpd.conf) oppure nella nostra '''public_html.


Nel caso vogliate creare o spostare files all' interno della DocumentRoot di Apache indispensabile tenere sempre a mente che quella directory e le directory in essa contenute sono visibili anche da altri computer (nella eventuale lan o su internet): prestate estrema attenzione ai permessi di scrittura di questi files!
Nel caso vogliate creare o spostare files all' interno della DocumentRoot di Apache è indispensabile tenere sempre a mente che quella directory e le directory in essa contenute sono visibili anche da altri computer (nella eventuale lan o su internet): prestate estrema attenzione ai permessi di scrittura di questi files!


Un consiglio personale consiste nell' agire sempre come utente '''www-data''' quando operate nella DocumentRoot: vi risparmierete patemi in fatto di permessi e sicurezza. Per loggarci come utente www-data sufficiente operare in questo modo:
Un consiglio personale consiste nell' agire sempre come utente '''www-data''' quando operate nella DocumentRoot: vi risparmierete patemi in fatto di permessi e sicurezza. Per loggarci come utente www-data è sufficiente operare in questo modo:
<pre>$ whoami
<pre>$ whoami
keltik
keltik
Riga 191: Riga 191:
$ whoami
$ whoami
www-data</pre>
www-data</pre>
Siamo cos� passati dal nostro utente normale all' utente root e da questo siamo diventati l' utente www-data (il passaggio tramite l' utente root ci evita di dover fornire la password per www-data). Avendo usato il comando '''su - ''' abbiamo effettuato un login vero e proprio, ereditando tutte le variabili locali per www-data.
Siamo così passati dal nostro utente normale all' utente root e da questo siamo diventati l' utente www-data (il passaggio tramite l' utente root ci evita di dover fornire la password per www-data). Avendo usato il comando '''su - ''' abbiamo effettuato un login vero e proprio, ereditando tutte le variabili locali per www-data.


Ora possiamo operare in tranquillit� nella DocumentRoot (che anche la $HOME dell' utente www-data).
Ora possiamo operare in tranquillità nella DocumentRoot (che è anche la $HOME dell' utente www-data).


Se invece scegliamo di usare la nostra public_html, non dovremo fare altro che creare il file al suo interno usando il nostro utente normale.
Se invece scegliamo di usare la nostra public_html, non dovremo fare altro che creare il file al suo interno usando il nostro utente normale.


Usiamo il nostro editor preferito e creiamo il file prova.php che conterr� questo codice:
Usiamo il nostro editor preferito e creiamo il file prova.php che conterrà questo codice:
<pre><?php phpinfo(); ?></pre>
<pre><?php phpinfo(); ?></pre>


{{box|Nota Bene|Aldil� di quale sia il vostro editor preferito, consiglio caldamente di imparare quantomeno i rudimenti di '''vi''': questo editor testuale infatti presente nella quasi totalit� dei sistemi operativi *nix, molto pratico anche durante sessioni telnet o ssh e - con un minimo di allenamento - dispone di tutta la potenza necessaria ad un editor di codice}}
{{box|Nota Bene|Aldilà di quale sia il vostro editor preferito, consiglio caldamente di imparare quantomeno i rudimenti di '''vi''': questo editor testuale infatti è presente nella quasi totalità dei sistemi operativi *nix, è molto pratico anche durante sessioni telnet o ssh e - con un minimo di allenamento - dispone di tutta la potenza necessaria ad un editor di codice}}


Se tutto andato bene, puntando il browser all' indiritto http://127.0.0.1/prova.php (nel caso di aver usato la DocumentRoot) oppure http://127.0.0.1/~utente/prova.php vedremo una pagina html che riporta molte informazioni utili sul nostro nuovo ambiente di sviluppo (versione del software, moduli di apache, moduli di php, variabili di ambiente, ecc...).
Se tutto è andato bene, puntando il browser all' indiritto http://127.0.0.1/prova.php (nel caso di aver usato la DocumentRoot) oppure http://127.0.0.1/~utente/prova.php vedremo una pagina html che riporta molte informazioni utili sul nostro nuovo ambiente di sviluppo (versione del software, moduli di apache, moduli di php, variabili di ambiente, ecc...).


=Il Database Server=
=Il Database Server=
Riga 208: Riga 208:
Passiamo adesso ad installare il server di database MySQL.
Passiamo adesso ad installare il server di database MySQL.
<pre># apt-get install mysql-server</pre>
<pre># apt-get install mysql-server</pre>
che, oltre al server MySQL, installer� per noi anche il client, alcuni tools e le librerie indispensabili.
che, oltre al server MySQL, installerà per noi anche il client, alcuni tools e le librerie indispensabili.


A questo punto il server MySQL dovrebbe essere installato ed avviato automaticamente. Possiamo controllare usando il solito comando '''ps''' oppure '''/etc/init.d/mysql status'''.
A questo punto il server MySQL dovrebbe essere installato ed avviato automaticamente. Possiamo controllare usando il solito comando '''ps''' oppure '''/etc/init.d/mysql status'''.
{{Warningbox|MySQL inizialmente accessibile unicamente all' utente '''root''' senza alcuna password.}}
{{Warningbox|MySQL inizialmente è accessibile unicamente all' utente '''root''' senza alcuna password.}}
{{box|Nota Bene:|Negli esempi seguenti ho digitando i comandi mysql su righe diverse per renderli pi� leggibili, ma nulla vieta di scrivere tutto di seguito sulla medesima linea.}}
{{box|Nota Bene:|Negli esempi seguenti ho digitando i comandi mysql su righe diverse per renderli più leggibili, ma nulla vieta di scrivere tutto di seguito sulla medesima linea.}}
La nostra prima preoccupazione dovrebbe essere senz' altro quella di impostare una passowrd per l' utente root. Ecco come fare:
La nostra prima preoccupazione dovrebbe essere senz' altro quella di impostare una passowrd per l' utente root. Ecco come fare:
<pre>
<pre>
Riga 237: Riga 237:
</pre>
</pre>
{{box|Nota Bene:|Lo switch "-p" usato nel comando ''mysql'' prevede che la passowrd venga digitata '''senza spazi tra il -p e la passoword effettiva'''. Non si tratta di un mio errore di battitura!}}
{{box|Nota Bene:|Lo switch "-p" usato nel comando ''mysql'' prevede che la passowrd venga digitata '''senza spazi tra il -p e la passoword effettiva'''. Non si tratta di un mio errore di battitura!}}
Usare utenti con privilegi alti non mai una buona idea, per cui provvediamo a creare un utente a cui concederemo i privilegi minimi (ma al quale potremo dare privilegi pi� alti per database specifici):
Usare utenti con privilegi alti non è mai una buona idea, per cui provvediamo a creare un utente a cui concederemo i privilegi minimi (ma al quale potremo dare privilegi più alti per database specifici):
<pre>
<pre>
mysql> GRANT USAGE ON *.*
mysql> GRANT USAGE ON *.*
Riga 304: Riga 304:


==PhpMyAdmin==
==PhpMyAdmin==
==MySQL e PHP==
=Conclusioni=
=Conclusioni=



Versione delle 22:00, 24 giu 2005

Document-page-setup.png Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.

Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template.



Introduzione

LAMP è l'acronimo di Linux Apache Mysql Php e indica l'ambiente libero (e anche gratuito in questo caso) di programmazione di applicazioni Web che è possibile costruire dalla somma delle parti di queste eccezionali applicazioni a sorgente aperto.

Questa guida non fornisce alcun elemento per la configurazione ottimale dei server presi in esame (Apache e MySQL). Essa non è intesa ad amministrare tali servizi su macchine in produzione, ma solo a fornire all' utente domestico e allo sviluppatore web un ambiente correttamente configurato senza introdurre sensibili rischi per la sicurezza del computer usato.

Per il dettaglio sulla configurazione di quanto preso in esame Vi invitiamo pertanto a visitare in primo luogo i siti Httpd Apache, PHP.net e MySQL.org e, quando presenti, le guide specifiche messe a disposizione da questa Community.

Buona lettura!

Il server http

Apache

Apache è il frutto del lavoro della Apache Software Foundation. Tra le caratteristiche che ne fanno il server HTTP più diffuso evidenziamo che:

  • è software libero;
  • gira sulle più svariate piattaforme (*nix, Windows, ec...);
  • è sviluppato in accordo con le più recenti specifiche per i servizi http.

Secondo Netcraft Apache, con una percentuale del 68% (febbraio 2005), è il server http più usato in assoluto.

Apache deve il suo nome all' omonima tribù di indiani nordamericani, famosa per le straordinarie doti di resistenza e strategia. Visto però che il software è stato inizialmente sviluppato come una serie di patches ad un altro server http, nell' uso comune Apache significa anche "A Patchy Server".

La pronuncia corretta di Apache suona grossomodo come "APACI".

Il progetto Apache è suddiviso principalmente in due rami distinti (ne esiste un terzo, ma è nella fase di sviluppo alpha al momento): la versione 1.3 (la versione "vecchia" molto robusta e testata) e la versione 2.0 (dal design innovativo rispetto alla precedente).

Apache 1.3

Installazione

L' installazione nuda e cruda di Apache 1.3 in Debian è di una semplicità disarmante. Tutto quello che avremo bisogno di fare consiste nel dare il comando:

# apt-get install apache

al termine del download ci viene chiesto se vogliamo abilitare suExec: a meno di utilizzi professionali, possiamo tranquillamente rispondere "No".

Verifica

A questo punto il nostro server web è già attivo, ma possiamo anche verificarlo tramite il comando ps:

$ ps aux |grep apache
root      7378  0.0  0.4   4592  2228 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7379  0.0  0.4   4592  2364 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7380  0.0  0.4   4592  2364 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7381  0.0  0.4   4592  2204 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7382  0.0  0.4   4592  2204 pts/1    S    12:01   0:00 /usr/sbin/apache
www-data  7383  0.0  0.4   4592  2204 pts/1    S    12:01   0:00 /usr/sbin/apache

Notiamo subito uno dei meccanismi principali di Apache: esistono svariati processi in esecuzione. Per la precisione abbiamo 1 processo proprietà dell' utente root e ben 5 processi di proprietà dell' utente www-data, come possiamo vedere con il comando pstree:

$ pstree -uc |grep apache
     ├─apache─┬─apache(www-data)
     │        ├─apache(www-data)
     │        ├─apache(www-data)
     │        ├─apache(www-data)
     │        └─apache(www-data)

Il primo processo (padre) viene lanciato da root e ed il suo unico compito consiste nel genere e controllare i restanti processi (figli). Sono questi ultimi a rispondere alle richieste http ed a fornire le pagine. In questo modo Apache gira con privilegi minimi (quelli dell' utente www-data) ed in caso di una sua eventuale compromissione gli effetti sul sistema sono in qualche misura limitati.

Configurazione

La configurazione di Apache è un compito estremamente delicato e può richiedere conoscenze anche notevoli in svariati ambiti quali networking, programmazione e amministrazione di sistema. Dato che questa guida si propone fondamentalmente di illustrare i passi necessari ad installare e configurare un sistema per uso non professionale, ci limiteremo agli aspetti macroscopici della configurazione.

I files di configurazione di Apache risiedono nella directory /etc/apache al cui interno troviamo svariati files. Quello di cui ci occuperemo qui è il file di controllo principale e cioè httpd.conf. Apriamo il file con il nostro editor di fiducia (dobbiamo essere root per modificare questo file) e vediamo quali sono le direttive principali su cui agiremo.

server-pool size Alla riga 130 del file di configurazione originale troviamo il primo blocco da prendere in esame: si tratta della direttiva che dice ad Apache il numero minimo e massimo di processi "figlio" da mantenere in memoria. Ogni processo "figlio" risponde ad un numero prefissato di richieste, dopodichè viene ucciso (mondo crudele) e ne viene generato uno nuovo. Esaminiamo la direttiva:

MinSpareServers 5
MaxSpareServers 10

Come default Apache genera 5 processi, ma se il carico aumenta può arrivare fino a 10 figli simultanei. Per un sistema domestico è sicuramente eccessivo ed io consiglio di porre queste limitazioni:

MinSpareServers 1
MaxSpareServers 2

Number of servers to start initially Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell' avvio del server. Il default è:

StartServers 5

che noi cambieremo in:

StartServers 1

Listen Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. E' anche possibile specificare una particolare accoppiata di indirizzo IP + porta TCP. Possiamo tranquillamente lasciare commentata la direttiva ed il nostro server sarà in ascolto sulla porta 80 per tutti gli indirizzi configurati sul sistema.

BindAddress Alla riga 199 abbiamo la direttiva che specifica a quale specifico indirizzo IP associare Apache. Come per il punto precedente, lasciamo pure il valore di default.

ServerName Con questa direttiva (alla linea 276) diciamo ad Apache quale è il suo nome. Questo è particolarmente utile nel caso abbiamo a disposizione un FQDN (a questo proposito puoi consultare la guida Server Web Casalingo).

DocumentRoot Con questa direttiva (riga 284) indichiamo ad Apache quale directory del nostro sistema deve corrispondere alla radice del Web Server. Il default va più che bene: ricordatevi quindi che tutti i vostri files che volete pubblicare sul server http dovranno risiedere in /var/www o in una sua sotto-directory.

Warning.png ATTENZIONE
è fondamentale per il funzionamento di Apache che i files che devono essere visibili via Web siano leggibili da parte dell' utente www-data e che le sotto-directory di /var/www siano raggiunbili dallo stesso utente


Questo è il minimo indispensabile che ci occorre sapere per poter utilizzare proficuamente Apache: salviamo il file e procediamo a riavviare Apache. Per fare questo possiamo procedere in due modi distinti:

  • metodo standard
    # apachectl graceful

/usr/sbin/apachectl graceful: httpd gracefully restarted

  • metodo debian init.d
    # /etc/init.d/apache restart

Restarting apache.

Senza dubbio apachectl è il metodo da preferire. Oltre a riavviare Apache possiamo controllare altri aspetti del server web. Tra questi quello che inizialmente può risultare più comodo consiste nel controllo della sintassi del file di configurazione.
Facciamo un esempio:

# apachectl configtest
Syntax error on line 49 of /etc/apache/httpd.conf:
ServerType takes one argument, 'inetd' or 'standalone'

lo script mi avvisa che alla riga 49 di httpd.conf c'è un errore di sintassi: la direttiva ServerType supporta un solo argomento, mentre nel file ne sono specificati almeno 2. Se controllo òa riga incriminata scopro che:

ServerType is either inetd, or standalone.  Inetd mode is only supported on

Noto subito che manca il commendo (#) a inizio riga, provvedo a reinserirlo e quindi controllo nuovamente la configurazione:

# apachectl configtest
Syntax OK

Se non abbiamo fatto pasticci, una volta riavviato il server Apache, basterà puntare il nostro browser all' indirizzo http://127.0.0.1 per vedere la pagina di default installata dal manutentore del pacchetto Debian:

Pagina di Benvenuto di Apache
Info.png Nota Bene: Directory home degli utenti
Per default Apache permette anche a ciascun utente del sistema di avere una propria home. Poniamo l' esempio dell' utente pippo: all' interno di /home/pippo l' utente dovrà semplicemente creare la directory public_html per poter accedere ai files in essa contenuti attraverso l' indirizzo http://127.0.0.1/~pippo/


Ora non ci resta che inserire i nostri files in /var/www o nella nostra public_html per poter cominciare ad usare Apache!

Apache 2.0

Installazione

L'installazione di Apache2 è perfettamente uguale a quella precedentemente illustrata per Apache:

# apt-get install apache2-mpm-prefork

Il metapacchetto apache2 è presente, ma installa apache2-mpm-worker, che risulta non essere compatibile con libapache2-mod-php4.

I diversi pacchetti

La pacchettizzazione Debian, però, è leggermente diversa, per poter gestire le nuove caratteristiche introdotte in Apache2: esistono quattro diversi pacchetti di Apache2, ognuno con delle caratteristiche diverse (relativamente alla gestione dei thread e dei child):

apache2-mpm-perchild
la soluzione adottata in questo pacchetto fa in modo che vengano avviati un numero definito di processi, i quali possono creare dei thread in base al carico della macchina. Una peculiarità è la possibilità di assegnare dei permessi diversi ad ogni processo, vincolarlo ad un singono virtual host, così da gestire facilmente la redistribuzione delle risorse e/o personalizzare il servizio offerto;
apache2-mpm-prefork
I thread sono disabilitati, e la gestione dei pool di processi viene gestita come per Apache1 (MinSpareServers e MaxSpareServers);
apache2-mpm-threadpool
pacchetto di transizione;
apache2-mpm-worker
la soluzione è intermedia rispetto a perchild e prefork.

Quello che a noi interessa è apache2-mpm-prefork, visto che è l'unico ad essere compatibile con le librerie che offrono il supporto per php4.

Verifica

Per verificare la corretta installazione di Apache2, è sufficiente aprire un browser ed inserire l'indirizzo [1]. Se Apache è stato installato correttamente, apparirà una schermata simile a questa:

Schermata di benvenuto di Apache2

Configurazione

Le regole di configurazione viste precedentemente per Apache valgono anche per Apache2.
Sono però presenti delle sostanziali differenze a livello strutturale, per quanto riguarda la struttura della directory /etc/apache2, che riguardano l'organizzazione dei file e la gestione dei VirtualHost e dei moduli.

Organizzazione dei file

Durante il passaggio da Apache ad Apache2, sono state apportate delle modifiche ai file di configurazione, ai loro nomi e all'organizzazione delle directory contenenti le configurazione dei VirtualHost' e dei moduli, il tutto per disporre di un sistema di gestione flessibile e facilmente gestibile:

File di Configurazione

Il file di configurazione di Apache2 si chiama apache2.conf, ed adotta la stessa sintassi del vecchio file di configurazione httpd.conf, che è ancora presente nella directory /etc/apache2 e viene richiamato all'interno del file di configurazione generale, per motivi di compatibilità... consiglio, comunque, di non utilizzarlo, in quando è un file di transizione, e in futuro potrebbe venir rimosso da apache2.

Moduli

La gestione dei moduli ha subito una profonda modifica rispetto alla versione 1 di Apache: non è più legata ad un solo file, ma a due directory: /etc/apache2/mods-available e /etc/apache2/mods-enabled.

mods-available
contiene i file che permettono il caricamento dei moduli. I file presenti all'interno di questa directory sono divisibili, tramite le loro estensioni, in due categorie: i file con estensione .load contengono le istruzioni necessarie al caricameto dei moduli; i file con estensione .config, invece, contengono le eventuali opzioni di configurazione da passare al modulo.
mods-enables
contiene dei link ai file presenti nella directory mods-available. All'avvio di Apache verranno caricati i moduli i cui file di canfigurazione presentano un link in questa directory.
VirtualHost
Supporto SSL
Far convivere Apache e Apache2

Il processore PHP

PHP è un acronimo ricorsivo per "PHP: Hypertext Preprocessor" e cioè "PHP: preprocessore ipertestuale". Questo significa che i nostri script non vengono elaborati dai client (in questo caso dai browser) come ad esempio nel caso di javascript, ma che vengono eseguiti direttamente sul server il quale fornisce ai clients semplici pagine html. Un linguiaggio di questo tipo viene chiamato anche server-side (lato server), in contrapposizione ai linguaggi client-side (lato client).

La cosa più interessante nell'uso di PHP è che si tratta di un linguaggio estremamente semplice per il principiante, ma che, tuttavia, offre molte prestazioni avanzate al programmatore di professione.

Con PHP non siete limitati soltanto ad un output in HTML. Le possibilità di PHP, infatti, includono l'abilità di generare immagini, files PDF e perfino filmati Flash al volo (utilizzando libswf e Ming). Sarete in grado di generare facilmente qualsiasi testo, come XHTML e qualsiasi altro file XML. PHP può autogenerare questi file, e salvarli nel file system, piuttosto che eseguire un printing esterno, o creare server-side cache per contenuti dinamici.

Una delle caratteristiche più importanti e significative di PHP è la possibilit` di supportare una completa gamma di databases. Scrivere una pagina web collegata ad un database è incredibilmente semplice.

PHP fa anche da supporto per dialogare con altri servizi utilizzando i protocolli del tipo LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (in Windows) e innumerevoli altri. Potete anche aprire network sockets ed interagire usando qualsiasi altro protocollo. Inoltre supporta l'interscambio di dati complessi WDDX tra, virtualmente, tutti i linguaggi di programmazione web. A proposito di interconessioni, PHP supporta l'installazione dei JavaObjects e l'utilizzo di questi come oggetti PHP in modo trasparente. Si può anche usare la nostra estensione CORBA per accedere ad oggetti remoti.

Info.png Nota Bene:
Questo elenco delle funzionalità offerte da PHP è tratto dal manuale online di PHP e precisamente dal capitolo Che cosa può fare PHP?


Installazione

Anche installare PHP non è un compito per nulla complesso.

PHP e Apache 1.3

Vediamo subito come procedere a abilitare PHP per il nostro server Apache in maniera minimale:

# apt-get install libapache-mod-php4

Apt scaricherà il modulo per Apache, le eventuali dipendenze e aggiornerà anche il file di configurazione dei moduli (/etc/apache/modules.conf).

Tutto quello che dovremo fare manualmente è di riavviare Apache, altrimenti non ci fornirà gli script Php elaborati, ma ci permetterà unicamente di scaricarli. Come abbiamo già visto nella sezione relativa all' installazione di Apache il comando è:

# apachectl graceful
/usr/sbin/apachectl graceful: httpd gracefully restarted

Ora, anche se a livello minimale, Apache è in grado fornire al nostro browser l' output degli script elaborati dal motore PHP. Non ci resta altro da fare che testarne il funzionamento.

PHP e Apache 2.0

Test

Il modo più semplice per testare la nostra installazione di PHP consiste nel preparare uno script e tentare di visualizzarlo nel nostro browser.

Possiamo procedere in due modi fondamentalmente: creare uno script nella DocumentRoot del server web, e cioè /var/www (se non l' avete modificata in ahttpd.conf) oppure nella nostra public_html.

Nel caso vogliate creare o spostare files all' interno della DocumentRoot di Apache è indispensabile tenere sempre a mente che quella directory e le directory in essa contenute sono visibili anche da altri computer (nella eventuale lan o su internet): prestate estrema attenzione ai permessi di scrittura di questi files!

Un consiglio personale consiste nell' agire sempre come utente www-data quando operate nella DocumentRoot: vi risparmierete patemi in fatto di permessi e sicurezza. Per loggarci come utente www-data è sufficiente operare in questo modo:

$ whoami
keltik
$ su
Password:
# whoami
root
# su - www-data
$ whoami
www-data

Siamo così passati dal nostro utente normale all' utente root e da questo siamo diventati l' utente www-data (il passaggio tramite l' utente root ci evita di dover fornire la password per www-data). Avendo usato il comando su - abbiamo effettuato un login vero e proprio, ereditando tutte le variabili locali per www-data.

Ora possiamo operare in tranquillità nella DocumentRoot (che è anche la $HOME dell' utente www-data).

Se invece scegliamo di usare la nostra public_html, non dovremo fare altro che creare il file al suo interno usando il nostro utente normale.

Usiamo il nostro editor preferito e creiamo il file prova.php che conterrà questo codice:

<?php phpinfo(); ?>
Info.png Nota Bene
Aldilà di quale sia il vostro editor preferito, consiglio caldamente di imparare quantomeno i rudimenti di vi: questo editor testuale infatti è presente nella quasi totalità dei sistemi operativi *nix, è molto pratico anche durante sessioni telnet o ssh e - con un minimo di allenamento - dispone di tutta la potenza necessaria ad un editor di codice


Se tutto è andato bene, puntando il browser all' indiritto http://127.0.0.1/prova.php (nel caso di aver usato la DocumentRoot) oppure http://127.0.0.1/~utente/prova.php vedremo una pagina html che riporta molte informazioni utili sul nostro nuovo ambiente di sviluppo (versione del software, moduli di apache, moduli di php, variabili di ambiente, ecc...).

Il Database Server

MySQL

Passiamo adesso ad installare il server di database MySQL.

# apt-get install mysql-server

che, oltre al server MySQL, installerà per noi anche il client, alcuni tools e le librerie indispensabili.

A questo punto il server MySQL dovrebbe essere installato ed avviato automaticamente. Possiamo controllare usando il solito comando ps oppure /etc/init.d/mysql status.

Warning.png ATTENZIONE
MySQL inizialmente è accessibile unicamente all' utente root senza alcuna password.


Info.png Nota Bene:
Negli esempi seguenti ho digitando i comandi mysql su righe diverse per renderli più leggibili, ma nulla vieta di scrivere tutto di seguito sulla medesima linea.

La nostra prima preoccupazione dovrebbe essere senz' altro quella di impostare una passowrd per l' utente root. Ecco come fare:

mysql> SET PASSWORD
    -> FOR root@localhost
    -> =
    -> PASSWORD('la_tua_password')
    -> ;
Query OK, 0 rows affected (0.08 sec)

mysql> exit
Bye
$

Se ora proviamo a loggarci nuovamente, dovremmo vederci negato l' accesso in questo modo:

keltik@debby:~$ mysql -u root
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

Riproviamo usando la password che abbiamo scelto in precedenza:

keltik@debby:~$ mysql -u root -pla_tua_password
Welcome to the MySQL monitor.  Commands end with ; or \g.
Info.png Nota Bene:
Lo switch "-p" usato nel comando mysql prevede che la passowrd venga digitata senza spazi tra il -p e la passoword effettiva. Non si tratta di un mio errore di battitura!

Usare utenti con privilegi alti non è mai una buona idea, per cui provvediamo a creare un utente a cui concederemo i privilegi minimi (ma al quale potremo dare privilegi più alti per database specifici):

mysql> GRANT USAGE ON *.*
    -> TO 'utente'@'localhost'
    -> IDENTIFIED BY 'la_tua_password'
    -> ;
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.04 sec)

Se ora proviamo a loggarci con il nuovo utente, dovremmo riuscire ad autenticarci usando le credenziali specificate con il comando GRANT.

Ora creiamo un database nuovo:

mysql> CREATE DATABASE prova;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| prova    |
| test     |
+----------+
3 rows in set (0.02 sec)

ed assegnamo all' utente che abbiamo creato in precedenza piena diritti di amministrazione al database:

mysql> GRANT ALL PRIVILEGES
    -> ON prova.*
    -> TO 'utente'@'localhost'
    -> ;
Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.04 sec)

Se ora ci logghiamo con il nostro utente e chiediamo una lista dei database, vedremo unicamente quelli su cui abbiamo privilegi:

mysql> show databases;
+----------+
| Database |
+----------+
| prova    |
+----------+
1 row in set (0.00 sec)

Ora creiamo una tabella all' interno del database prova, giusto per verificare che sia tutto a posto:

mysql> CREATE TABLE tabella (colonna1 VARCHAR(20), colonna2 VARCHAR(20));
Query OK, 0 rows affected (0.42 sec)

mysql> DESCRIBE tabella;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| colonna1 | varchar(20) | YES  |     | NULL    |       |
| colonna2 | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

Se non abbiamo ottenuto errori passiamo al punto successivo, altrimenti verifichiamo tutti i passaggi precedenti.

PhpMyAdmin

MySQL e PHP

Conclusioni


Autore: Keltik 07:20, Giu 20, 2005 (EDT)