Rendre un site web vivant est un travail de titan : mettre à jour les informations, changer régulièrement la page d'accueil ... À tel point que l'on pourrait y passer ses journées entières. La solution pour faciliter ce travail est dautomatiser ces modifications grâce à des pages dite " active ".
PHP est un langage de programmation qui sinclut dans le code HTML pour effectuer certaines opérations qui peuvent aller dinsérer la date du jour à retrouver une information dans une base de donnés.
Dans cet article, je vais vous présenter un exemple qui met en jeu le stockage dune information dans une base de donnée et puis la récupération de cette information.
Pour faire des CGI actuellement il y a un standard : le Perl. Jai essayé de regarder à quoi cela ressemblait, je nai rien compris. Microsoft a son standard : les ASP, basé sur du Visual Basic, malheureusement je ne parle pas ce langage et ca ne ma pas plus parlé que le Perl.
On ma parlé de PHP pendant les premières journées linux organisés par le LUG de Strasbourg. Pourquoi ca ma plu :
Pour les fêtes de fin dannée tous le monde envoi des cartes de vux. Ayant à disposition quelques belles photos de Strasbourg, jai pensé à en faire des cartes de vux électroniques.
Vous pouvez tester en live : http://www.cigogne.net/cartes/nouvelle.html pour creer une carte. Vous pouvez voir un exemple de carte à http://www.cigogne.net/cartes/?n=16
Lutilisateur A veut envoyer une carte à lutilisateur B
A se connecte sur la page " nouvelle.php ". Il remplit le formulaire : son nom, son adresse email, le nom, ladresse email de son correspondant B, un texte et choisit la photo. Après avoir validé ce formulaire, toutes ces informations son stocké dans la base de donnée, un email est envoyé à B et une page HTML de confirmation est affichée pour A.
Dans lemail envoyé à A il y a un petit message linvitant à se connecter sur ladresse du serveur du type : http://www.cigogne.net/cartes/index.php?n=32
" index.php " est la page web active qui permet de retrouver la carte postale passé en paramètre (n=32).
Quand B se connecte sur la page " index.php " la carte numéro 32 est recherché dans la base de donnée et affiché pour B.
Sur votre serveur linux, vous devez avoir trois éléments installés (entre parenthèses, les versions que jutilise) :
- Apache (1.3.3) : le serveur web bien connu.
- PHP 3 (3.0.5) : le langage incorporé dans le HTML
- MySQL (3.21.30) : la base de donnée SQL
Linstallation dApache et MySQL ne pause pas de problème particulier à partir des RPM. Par contre vous devrez certainement recompiler PHP car le RPM fourni par RedHat ne prend pas en charge les bases de données.
Récupérer le source du RPM mod_PHP : c'est le source de la version d'origine RedHat
http://rufus.w3.org/linux/RPM/redhat/5.2/i386/mod_php3-3.0.5-2.i386.html
Site RedHat : ftp://ftp.redhat.com/pub/redhat/redhat-5.2/SRPMS/SRPMS/mod_php3-3.0.5-2.src.rpm
Mirroir en France : ftp://ftp.lip6.fr/pub/linux/distributions/redhat/redhat-5.2/SRPMS/SRPMS/mod_php3-3.0.5-2.src.rpm
Apache
Vérifier quapache est installé sur votre système
Rpm q apache
Doit vous répondre :
Apache-1.3.3-1
C'est la version d'origine de RedHat, elle est dans votre CD. Si vous ne l'avez vous pouvez la trouver aux adresses suivantes :
http://rufus.w3.org/linux/RPM/redhat/5.2/i386/apache-1.3.3-1.i386.html
ftp://rpmfind.net/linux/redhat/redhat-5.2/i386/RedHat/RPMS/apache-1.3.3-1.i386.rpm
Il faut aussi installer Apache-devel-1.3.3-1. Il est aussi sur la CD RedHat. Sinon voici les adresses :
http://rufus.w3.org/linux/RPM/redhat/5.2/i386/apache-devel-1.3.3-1.i386.html
ftp://rpmfind.net/linux/redhat/redhat-5.2/i386/RedHat/RPMS/apache-devel-1.3.3-1.i386.rpm
MySQL
MySQL n'est pas livré dans la distribution RedHat, vous le trouverez aux adresses suivantes :
http://rufus.w3.org/linux/RPM/contrib/libc6/i386/mysql-3.21.30-1.i386.html
ftp://rpmfind.net/linux/contrib/libc6/i386/mysql-3.21.30-1.i386.rpm
Il faut aussi récuperer MySQL Client et Devel.
MySQL devel
http://rufus.w3.org/linux/RPM/contrib/libc6/i386/mysql-devel-3.21.30-1.i386.html
ftp://rpmfind.net/linux/contrib/libc6/i386/mysql-devel-3.21.30-1.i386.rpm
MySQL Client
http://rufus.w3.org/linux/RPM/contrib/libc6/i386/mysql-client-3.21.30-1.i386.html
ftp://rpmfind.net/linux/contrib/libc6/i386/mysql-client-3.21.30-1.i386.rpm
Installation des RPM
Installation de MySQL :
Il faut installer avant
ncurses3-1.9.9e-7 (dans les RPM fourni avec RedHat)
rpm -i mysql-3.21.30-1.i386.rpm mysql-client-3.21.30-1.i386.rpm mysql-devel-3.21.30-1.i386.rpm
Si Apache nest pas installé :
Rpm i apache-1.3.3-1.i386.rpm
Installation des sources de PHP
rpm -i mod_php3-3.0.5-2.src.rpm
Compiler PHP en module avec le support MySQL
Editer le fichier spec :
vi /usr/src/redhat/SPECS/mod_php3.spec
Dans la section %build
Rajouter dans le ./configure une ligne :
--with-mysql=/usr \
Personnellement, je modifie la ligre with-config-file-path= en with-config-file-path=/etc/httpd/conf \
Ainsi le fichier de configuration de PHP se trouvera avec les fichiers dApache
cest plus simple.
Après vous aurez quelques choses qui ressemble à ca :
%build
./configure --prefix=/usr \
--with-apxs=/usr/sbin/apxs \
--with-config-file-path=/etc/httpd/conf \
--enable-debug=no \
--enable-safe-mode \
--with-exec-dir=/usr/bin \
--with-mysql=/usr \
--with-system-regex
Suite à cette modification il faut reconstruire un exécutable :
Avant il faut pouvoir compiler, donc avoir installé les RPM gcc,glibc-devel, kernel-header,apache-devel et bison.
rpm --bb /usr/src/redhat/SPECS/mod_php3.spec
Pour installer le .rpm créé :
rpm -i /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm
Cela vous installe la documentation dans /usr/doc/mod_php3-3.0.5/
Et le module Apache dans /usr/lib/apache/libphp3.so
Configuration d'Apache pour prendre en compte PHP
vi /etc/httpd/conf/httpd.conf
Enlever le # devant
LoadModule php3_module modules/libphp3.so
AddModule mod_php3.c
vi /etc/httpd/conf/srm.conf
Enlever le # devant
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps
Redémarrer Apache : kill -HUP `cat /var/run/httpd.pid`
Et ca marche !
Tester
Vous pouvez faire un petit fichier HTML pour tester :
<html>
<head>
<title>Test PHP</title>
</head>
<body>
< ?PHP
echo ("Ca marche !");
phpinfo() ;
?>
</body>
</html>
et noublier pas de nommer le fichier avec l'extention .php
Voici le SQL pour créer la table :
CREATE TABLE cartes
(
numero INT not null AUTO_INCREMENT,
date datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
nom VARCHAR(100),
email VARCHAR(100),
nom_dest VARCHAR(100),
email_dest VARCHAR(100),
message TEXT,
signature VARCHAR(100),
carte VARCHAR(100),
PRIMARY KEY(numero)
);
" numero " est le code qui va servir à retrouver la carte, il est de type AUTO_INCREMENT comme ca il ny a même pas besoin de sen occuper.
" date " va permettre de stocker la date de création, elle ne sert pas vraiment à grand chose, mais peut être un jour pour des statistiques
.
" nom " et " email " sont les nom et email de lexpéditeur. (en soit ils ne sont pas indispensables mais servent uniquement à informer le destinataire)
" nom_dest " et " email_dest " sont les nom et email du destinataire. (lemail est indispensable pour envoyer le message)
" message " est le texte daccompagnement de la carte.
" signature " est un petit texte qui sera mise en gras à la fin de la carte.
" carte " est le nom de limage qui sera sur la carte.
" numero " est défini comme étant la clef dindex.
Le code PHP est intégré au html entre des balises ("tags") spécifique. Il en existe plusieurs formes mais elles ont les même fonction :
<?PHP
code_php();
?>
ou sa forme racourci : <? code_php(); ?>
ou sa forme longue qui permet d'évider les problemes avec les éditeurs html wysiwyg :
<script language="php">
code_php();
</script>
Même si ce nest pas dans lordre logique, commençons par le plus simple !
Index.php est la page qui affiche à carte postale électronique
Nouvelle.php est la page qui crée une nouvelle carte postale.
Remarque : dans le code html en exemple, le code PHP est mis en bleu, et les commentaires en rouge.
Un certain nombre de chose pourrait être ajouté à cet exemple :
Tout cela nest quune question de temps. Pour information jai consacré 4 heures au développement, test et mise en ligne de cet exemple ( moins longtemps que pour écrire ces quelques lignes)
Nhésiter pas à me faire parvenir vos commentaires concernant cette page : olivier@cigogne.net
Et passer voir mon site à http://www.cigogne.net/ : toutes les sorties à Strasbourg (concerts, expositions, conférences, etc) + l'annaire des web alsaciens.
Site PHP
http:/www.php.net/
Miroir français : http://fr.php.net/
Serveur archive de RPM
http://rufus.w3.org/linux/RPM/
Tutorial
http://www.networkcomputing.com/unixworld/tutorial/018.html Exemple très détaillé de PHP + Postgres.
Exemple de code
Berbers PHP3 Example page http://php.netvision.net.il/examples/
PHP Code Exchange : http://px.sklar.com/
Archive de la mailing list php3
http://www.progressive-comp.com/Lists/?l=php3-general#php3-general
le 23/02/99 : oups ... il faut aussi installer le RPM apache-devel pour que ca marche ! Corrigé dans la procédure d'installation.
le 22/02/99 : correction d'URL défaillante
Version 1.0 : rajouté l'installation complette de php pour linux. Modifié quelques termes utilisés.
Version 0.1 : version initiale.