Tester un environnement LAPP sur son ordinateur personnel

Pré-requis

La réalisation de cet exercice nécessite un ordinateur sous Linux avec un accès root et un serveur PostgreSQL installé. Les commandes sont spécifiées pour une distribution Ubuntu.

Serveur web

L'objectif de cette partie est d'avoir un serveur web capable de distribuer des page HTML.

Installez le serveur web Apache.

1
sudo apt-get install apache2

Tester l'accès au serveur Web en entrant l'adresse web dans un navigateur : http://localhost

Question

L'installation par défaut du serveur web permet de servir les fichiers situés dans le dossier /var/www/html.

Déposez un fichier HTML de votre choix dans ce dossier et accédez-y via votre navigateur Web.

Indice

Si votre fichier s'appelle example.html et qu'il se trouve à la racine du serveur web /var/www/html vous y accéderez par l'adresse http://localhost/example.html.

PHP

L'objectif de cette partie est d'avoir un interpréteur PHP en mode développement, c'est à dire qui affiche les erreurs quand il y en a.

Installez l'interpréteur PHP pour Apache.

1
sudo apt-get install php

Question

Créez le fichier example.php ci-après et déposez-le sur votre serveur web. Faites un test d'accès.

1
<?php
2
echo "Hello world";
3
?>

Question

Créez et testez le fichier test.php ci-après. Ce fichier permet de visualiser la configuration PHP du serveur.

1
<?php
2
phpinfo();
3
?>

Question

Par défaut l'installation d'un interpréteur PHP est en mode production et il n'affiche pas les erreurs. Il faut donc changer la configuration pour passer en mode développement.

  1. À l'aide du fichier test.php précédent trouvez l'endroit où est stocké sur votre ordinateur le fichier de configuration php.ini.

    Par exemple : /etc/php/7.0/apache2/php.ini

  2. Éditez ce fichier en tant que root: sudo nano php.ini

  3. Remplacez le paramètre display_errors = Off par display_errors = On

  4. Relancez le serveur web : sudo service apache2 reload

Question

Il est également nécessaire d'installer un complément à PHP pour qu'il se connecte à PostgreSQL.

1
sudo apt-get install php-pgsql
2
sudo service apache2 reload

PostgreSQL

L'objectif de cette partie est d'avoir une base PostgreSQL prête à être utilisée par un programme PHP.

Question

Connectez vous en tant qu'utilisateur postgres (su postgres).

Créez un utilisateur test et une base test. Connectez-vous à la base.

1
psql -c "CREATE USER test WITH ENCRYPTED PASSWORD 'test'";
2
psql -c "CREATE DATABASE test WITH OWNER test";
3
psql --host=localhost --dbname=test --username=test

Créez une table medicament et instanciez-la.

1
CREATE TABLE medicament (
2
nom varchar,
3
description varchar,
4
conditionnement integer,
5
PRIMARY KEY (nom)
6
);
7
8
INSERT INTO medicament (nom,description,conditionnement)
9
VALUES ('Chourix','Médicament contre la chute des choux',13);
10
11
INSERT INTO medicament (nom,description,conditionnement)
12
VALUES ('Tropas','Médicament contre les dysfonctionnements intellectuels',42);

L'objectif de cette partie est d'exécuter un programme PHP capable de lire le contenu de la table medicament de notre base de données test.

Question

Créez le fichier select.php suivant (avec l'éditeur gedit par exemple) et déposez-le sur votre serveur web. Accédez-y avec un client web pour exécuter le programme.

1
<?php 
2
3
/** Connexion **/
4
$connexion = new PDO('pgsql:host=localhost;port=5432;dbname=test', 'test', 'test');	
5
6
/** Préparation et exécution de la requête **/
7
$sql = "SELECT nom FROM medicament;";
8
$resultset = $connexion->prepare($sql);
9
$resultset->execute();
10
11
/** Traitement du résultat **/
12
while ($row = $resultset->fetch(PDO::FETCH_ASSOC)) {
13
	echo $row['nom'];
14
	echo " ";
15
	}
16
17
/** Déconnexion **/
18
$connexion=null;
19
20
?>

L'objectif de cette partie est d'exécuter un programme PHP capable de modifier le contenu de la table medicament de notre base de données test.

Question

Créez le fichier insert.php et testez-le (exécutez-le au moins deux fois).

1
<?php 
2
3
/** Connexion **/
4
$connexion = new PDO('pgsql:host=localhost;port=5432;dbname=test', 'test', 'test');	
5
6
/** Préparation et exécution de la requête **/
7
$sql = "INSERT INTO medicament (nom) VALUES ('Nouveau')";
8
$result = $connexion->prepare($sql);
9
$result->execute();
10
11
/** Traitement du résultat **/
12
if ($result) {
13
  echo "'Nouveau' inséré";
14
}
15
else {
16
  echo "Erreur lors de l'insertion";
17
}
18
19
/** Déconnexion **/
20
$connexion=null;
21
22
?>

Question

Vérifiez que l'insertion a fonctionné en appelant select.php.