SOMMARIO INDIETRO AVANTI


Applicazioni Web e Connettività con Basi Dati

Di Marius Andreiana

Traduzione di G. Riccardi e A. Cartelli

Sommario

Quasi tutte le aziende presenti su web usano qualche tipo di base dati per migliorare la gestione e manutenzione dei contenuti delle loro pagine. Con questo articolo si forniranno gli elementi introduttivi utili per sviluppare siti web con interfacciamento a basi dati utilizzando software open source: Linux, Apache, PostgreSQL, PHP3.

Benchè ciò che si riporta di seguito sia scritto per Linux RedHat, gran parte delle informazioni (se non tutte) sono compatibili con altre distribuzioni.

Indice

Linux

Sappiamo già tutto al riguardo ... Ad ogni modo si può comunque dare uno sguardo alla mia Introduzione a Linux.

Apache

Apache è il server web più usato su Internet. Originariamente basato su NCSA si è evoluto in un sistema dalle caratteristiche superiori, che non teme confronti con (e probabilmente supera) tutti i server HTTP che poggiano su piattaforma UNIX, in termini di funzionalità efficienza e velocità.
Apache è interamente realizzato e gestito da volontari, i membri dell'associazione che essi stessi hanno fondato, e non da strutture commerciali di un qualsiasi tipo.

La distribuzione Linux che si utilizzerà deve includere ovviamente Apache. Lo si installi (se non è già installato) e si lanciat il demone HTTP. E' un'operazione molto semplice per cui si sorvolerà su di essa in questo articolo.
Per verificare il buon funzionamento del server HTTP basta inserire quale indirizzo per il proprio browser la locazione http://localhost/. Si dovrebbe vedere una pagina che conferma l'esito positivo dell'installazione.

PostgreSQL

PostgreSQL è un Sistema di gestione basi dati relazionali ad oggetti molto avanzato [Object-Relational Database Management System (DBMS)] che supporta quasi tutti i costrutti SQL (transazioni, subselect, funzioni e tipi definiti dall'utente inclusi). Postgres, sviluppato originariamente dal dipartimento di informatica della UC di Berkeley, è stato precursore di molti progetti nei quali hanno trovato attuazione concetti object-relational ora disponibli in diverse basi dati commerciali. Fornisce supporto ai linguaggi SQL92/SQL3, integrità di transazione ed estensiblità dei tipi. PostgreSQL discende dal codice originario di Berkeley, è di pubblico dominio ed è open source.

Il modo più semplice per installare PostgreSQL è dagli RPMs di RedHat6.1. Si installino tutti i pacchetti che cominciano con postgres.

Io raccomando di non salvare i propri file di database nella locazione di default /var/lib/pgsql, ma in /home/postgresdb (o da qualche parte in /usr/local). In questo modo, se si deve reinstallare il sistema, non si perderanno i dati (perché voi avete una partizione per /home, vero?).

Bene! Come fare tutto questo? Dopo aver installato i pacchetti RPM, l'utente postgres è l'amministratore di database (e non root!). Dall'account di root si assegni la password per postgres:

# passwd postgres

Poi, si crei la directory e si cambi il suo diritto di proprietà in quello dell'amministratore postgreSQL:

# mkdir /home/postgresdb
# chown postgres.postgres /home/postgresdb

La collocazione dei file di database è specificata dalla variabile di ambiente PGDATA. Si deve settarla in modo che sia disponibile per tutti gli utenti. Al riguardo basta aggiungere le seguenti linee alla fine del proprio file /etc/profile:

PGDATA=/home/postgresdb
PGLIB=/usr/lib/pgsql

export PGDATA PGLIB

Affinché si possa usare un qualunque database occorre che il postmaster sia in esecuzione, e probabilmente lo si vorrà in esecuzione ogni volta che serve, per cui è meglio aggiungerlo ai demoni di start-up:

# setup

Si selezioni System services, e poi ci si assicuri che postgresql sia contrassegnato con un asterisco.

Fin qui tutto bene, un'ultima cosa ancora. Dobbiamo modificare in /etc/rc.d/init.d/postgresql (che viene eseguito all'avvio) la directory di collocazione del database. Si sostituisca ogni occorrenza di /var/lib/pgsql con /home/postgresdb.

Ora si è pronti per partire. Si avvii il servizio postgresql:

# /etc/rc.d/init.d/postgresql start

Essendo la prima volta che viene eseguito il programma di amministrazione dei database, verranno innanizitutto creati i file base di database. Poi sarà lanciato il postmaster (normalmente le comunicazioni TCP/IP saranno abilitate).

È ora di testare l'installazione. Si crei un utente pguser:

# adduser pguser
# passwd pguser

Connessi come postgres, si crei lo stesso utente per postgreSQL:

$ createuser pguser

Si faccia in modo, rispondendo adeguatamente alle domande, che questo utente non sia predisposto a creare i database, in pratica si faccia in modo che non sia un superuser, e si crei un database che possa gestire.

Ci si colleghi come pguser e si esegua psql. Si crei una tabella e si inseriscano alcuni record:

pguser=>create table friends (name varchar(30), email varchar(90));
pguser=>insert into friends values('John', 'john@johnny.com');
pguser=>insert into friends values('Mary', 'mary@linuxmail.com');
pguser=>select * from friends;

Tutto ciò può essere fatto mediante PgAccess (incluso in Postgres) se si vuole un'interfaccia grafica d'utente, ma per ora si può provare manualmente (e non si dimentichi il punto e virgola alla fine di ogni linea).

Ora è tempo di andare avanti.

PHP3

PHP è un linguaggio di scripting dal lato server caratterizzato dall'essere incluso nell'HTML, con un potente strato di integrazione database. Scriver una pagina web con funzioni di amministrazione database è incredibilmente facile. I database supportati sono PostgreSQL, MySQL, Oracle, Sybase, Informix.

Ancora una volta il modo più semplice di installare PHP è dai pacchetti RPMs di RedHat6.1. Si installino php, php-manual, php-pgsql.

Ora và detto ad Apache dell'esistenza di PHP. Si rimuovano i commenti dalle seguenti linee in /etc/httpd/conf/httpd.conf:

Load Module php3_module modules/libphp3.so
AddModule mod_php3.c

e /etc/httpd/conf/srm.conf

AddType application/x-httpd-php3.php3
AddType application/x-httpd-php3-source.phps

Si può anche aggiungere alla voce DirectoryIndex l'elemento index.php3 (in srm.conf).

Si scelga un posto che conterrà il proprio lavoro. Per cominciare si potrebbe usare /home/httpd/html/ (se quella è l'area corrispondente al proprio DocumentRoot definito in srm.conf).

Si faccia un test con un semplice documento nominato test.php3 (l'estensione è molto importante) con una sola linea .

Si acceda a questo file con il proprio browser da http://localhost/test.php3
Si dovrebbero vedere molte informazioni riguardo a PHP, al proprio server, ecc...

Mettiamo tutto insieme

Ora che tutto è predisposto, tiriamo fuori qualche risultato!

I nostri amici John e Mary sono ancora li che aspettano. Si crei il file friends.php3. Qui ce n'è una copia, con molti commenti.

<?php

//define variables used with the database
//usually this goes in an include file
$PG_HOST= "localhost";
$PG_PORT=5432;
$PG_DATABASE= "pguser";
$PG_USER= "pguser";

$PG_PASS= "";

//let's open the database
$dbconn=pg_connect(  "dbname=$PG_DATABASE host=$PG_HOST port=$PG_PORT user=$PG_USER password=$PG_PASS" );
if ( ! $dbconn ) {
    echo  "Error connecting to the database !<br> " ;
    printf( "%s", pg_errormessage( $dbconn ) );
    exit();
}

//the database handle is $dbconn
//run a sql command to insert another record
$sqlcom= "insert into friends values ('Marius', 'marius@marius.com')";

$dbres = pg_exec($dbconn, $sqlcom );
if ( ! $dbres ) {
    echo  "Error : " + pg_errormessage( $dbconn );
    exit();
}

//let me know I've been added to the database by sending me an email
mail( "marius@marius.com" "Lucky winner !"
"You've just won a row in our database. Congratulations !" "From : boss@db.com");
//yes, it's that simple
//( sending an email I mean, it's not so easy to win :)

//what do we have now in the database ?

$sqlcom= "select * from friends";

$dbres = pg_exec($dbconn, $sqlcom );
if ( ! $dbres ) {
    echo  "Error : " + pg_errormessage( $dbconn );
    exit();
}

//and interpret the results
$row=0;
$rowmax=pg_NumRows($dbres);

while ($row<$rowmax)
{
    $do = pg_Fetch_Object($dbres, $row);
    
    $s= "<p>$do->name | $do->email\n";
    printf( "%s", $s);
    
    $row++;
}

//close the database
pg_close( $dbconn );

//That's all. This isn't a tutorial to PHP, I wanted to show you how
//it can be done. As you can see, it isn't hard at all
?>

Si può trovare molto di più sul web. Tutto questo è open source, ricordate? Si troveranno facilmente molti scripts realizzati da diverse persone, utili per fare molte cose e molti progetti open source (si può andare a prendere il carrello della spesa! :)

Risorse

Beh, questo è tutto. Ora si è pronti ad iniziare lo sviluppo di applicazioni web interfacciate con database. Certo è che si dovrà apprendere di più. Molto di più.


Copyright, per la versione americana, © 2000 M. Andreiana
Pubblicato sul n. 50 della Linux Gazette, Febbraio 2000
Copyright, per la versione italiana, © 2000 LGEI n. 2 Anno IV
SOMMARIO INDIETRO AVANTI