LinuxLignes Alternatives - index

Introduction aux pages web actives avec PHP et MySQL

Version 1.02 du 23/02/1999
Auteur : Olivier Martineau

Les pages web actives sont extrêmement utiles à ceux qui veulent rendre leur site plus vivant et faciliter les mises à jour de celui-ci par la mise en place de procédures automatiques. Mais comment faire?

Sommaire

Introduction

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 d'automatiser ces modifications grâce à des pages dites " actives ".

PHP est un langage de programmation qui s'inclut dans le code HTML pour effectuer certaines opérations qui peuvent aller d'insérer la date du jour à retrouver une information dans une base de données.

Dans cet article, je vais vous présenter un exemple qui met en jeu le stockage d'une information dans une base de données et puis la récupération de cette information.

Pourquoi PHP ?

Pour faire des CGI actuellement il y a un standard : le Perl. J'ai essayé de regarder à quoi cela ressemblait, je n'ai rien compris. Microsoft a son standard : les ASP, basés sur du Visual Basic, malheureusement je ne parle pas ce langage et ça ne m'a pas plus parlé que le Perl.

On m'a parlé de PHP pendant les premières journées Linux organisées par le LUG de Strasbourg. Pourquoi ça m'a plu :

  • c'est 100% spécialisé pour faire des CGI et du HTML dynamique
  • j'ai réussi à lire le code : ça ressemble fortement à du C
  • on trouve bon nombre d'exemples (mais pas trop non plus... ça évite de perdre du temps), la documentation est bonne.

Thème de l'exemple

Pour les fêtes de fin d'année, tout le monde envoie des cartes de voeux. Ayant à disposition quelques belles photos de Strasbourg, j'ai pensé à en faire des cartes de voeux électroniques.

Vous pouvez tester en live : http://www.cigogne.net/cartes/nouvelle.html pour créer une carte. Vous pouvez voir un exemple de carte à http://www.cigogne.net/cartes/?n=16

Fonctionnement général

L'utilisateur A veut envoyer une carte à l'utilisateur B:

A se connecte sur la page " nouvelle.php ". Il remplit le formulaire : son nom, son adresse email, le nom, l'adresse email de son correspondant B, un texte et choisit la photo. Après avoir validé ce formulaire, toutes ces informations sont stockées dans la base de données, un email est envoyé à B et une page HTML de confirmation est affichée pour A.

Dans l'email envoyé à B il y a un petit message l'invitant à se connecter sur l'adresse 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ée en paramètre (n=32).
Quand B se connecte sur la page " index.php " la carte numéro 32 est recherchée dans la base de données et affichée pour B.

Installation de PHP 3

Sur votre serveur linux, vous devez avoir trois éléments installés (entre parenthèses, les versions que j'utilise) :
- 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ées SQL.

L'installation d'Apache et MySQL ne pose 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.

Installation facile d'Apache + PHP + MySQL sur RedHat 5.2

- 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
Miroir 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érifiez qu'Apache 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 sur votre CD. Si vous ne l'avez pas, 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 le 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écupérer 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 fournis avec la 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 n'est 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

    Editez le fichier spec :
    vi /usr/src/redhat/SPECS/mod_php3.spec

    Dans la section %build, rajoutez 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 d'Apache ... c'est plus simple.

    Après, vous aurez quelque chose qui ressemble à ça :
    %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

    Enlevez le # devant
    LoadModule php3_module modules/libphp3.so
    AddModule mod_php3.c

    vi /etc/httpd/conf/srm.conf

    Enlevez le # devant
    AddType application/x-httpd-php3 .php3
    AddType application/x-httpd-php3-source .phps

    Redémarrez Apache : kill -HUP `cat /var/run/httpd.pid`

    Et ça 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 n'oubliez pas de nommer le fichier avec l'extention .php

Création de la table dans la base de données

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 n'y a même pas besoin de s'en 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 l'expéditeur (en soi, ils ne sont pas indispensables mais servent uniquement à informer le destinataire).
" nom_dest " et " email_dest " sont les nom et email du destinataire (l'email est indispensable pour envoyer le message).
" message " est le texte d'accompagnement de la carte.
" signature " est un petit texte qui sera mis en gras à la fin de la carte.
" carte " est le nom de l'image qui sera sur la carte.
" numero " est défini comme étant la clef d'index.

Explication du code

Le code PHP est intégré au HTML entre des balises ("tags") spécifiques. Il en existe plusieurs formes mais elles ont les mêmes fonctions :

    <?PHP
    code_php();
    ?>

    ou sa forme raccourcie : <? code_php(); ?>

    ou sa forme longue qui permet d'éviter les problèmes avec les éditeurs HTML wysiwyg :
    <script language="php">
    code_php();
    </script>

Même si ce n'est pas dans l'ordre logique, commençons par le plus simple !
Index.php est la page qui affiche la 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.

Ouverture

Un certain nombre de choses pourraient être ajoutées à cet exemple :

  • Un contrôle des champs saisis serait intéressant. La construction de la page mi-formulaire, mi-CGI permettrait de faire ça très facilement.
  • Un numéro aléatoire pourrait être généré à la place de la clef d'index pour retrouver la carte : au moins, il y aurait un peu de confidentialité.
  • On pourrait même imaginer que la carte serait envoyée en pièce jointe sous forme d'image avec l'email. C'est tout a fait faisable avec PHP.

Tout cela n'est qu'une question de temps. Pour information, j'ai consacré 4 heures au développement, test et mise en ligne de cet exemple (moins longtemps que pour écrire ces quelques lignes)

 

N'hésitez pas à me faire parvenir vos commentaires concernant cette page : olivier@cigogne.net

Et passez voir mon site à http://www.cigogne.net/: toutes les sorties à Strasbourg (concerts, expositions, conférences, etc) + l'annaire des web alsaciens.

Références

Historique

le 23/02/99 (V1.02) : oups ... il faut aussi installer le RPM apache-devel pour que ça marche ! Corrigé dans la procédure d'installation.

le 22/02/99 (V1.01) : correction d'URL défaillante.

Version 1.0 : rajouté l'installation complète de PHP pour Linux. Modifié quelques termes utilisés.

Version 0.1 : version initiale.

 

 

 

Olivier Martineau

De formation mi-commerciale, mi-informatique, il travaille comme ingénieur technico-commercial pour un revendeur informatique de Strasbourg. Par ailleurs, il gère depuis 3 ans le serveur web cigogne.net qui a démarré sous Mac, puis a tourné pendant quelques mois sous NT, et enfin utilise Apache + PHP sous Linux depuis mai 98.

Email : olivier@cigogne.net
Web : http://www.cigogne.net/

 

 

 

 

 

 

News

Amiga

BeOS

Liens
 



Index | News | Amiga | BeOS | Linux | Liens
(c)1999-2000, Lignes Alternatives