Vous êtes sur la page 1sur 9

Serveur Web

M2204-SERVEUR WEB avec PHP

Patrice Gommery – Octobre 2020

Consignes Générales pour le TP

Pendant tout le TP, remplacez VMID par le numéro de votre machine virtuelle.

Votre serveur est aussi accessible avec la commande : ssh root@172.16.VM.ID


Votre serveur se nomme serveur.domVMID.net

SERVEUR WEB - M2204 1


Préambule : Etat des Lieux
Lors du TP précédent vous avez installé Apache2 et avez configuré plusieurs sites
accessibles aux adresses suivantes :

• mmis2.domVMID.net
• tp03.domVMID.net

Avant de continuer , vérifiez que les deux sites fonctionnent à partir de votre navigateur.
Dans le cas contraire, essayez de corriger le problème avant de continuer.
(Une correction des exos du tp03 est à la fin de ce document).

Partie 1 : et un de plus !!!


Pour commencer ce nouveau TP, nous allons créer un nouveau site (tp04.domVMID.net)
qui nous servira de base de travail. Pour rappel, la procédure à suivre est la suivante :

1. Placez-vous dans le dossier /etc/apache2/sites-available (commande cd)


2. Dupliquez le fichier 000-default.conf en 004-tp04.conf (commande cp)
3. Modifiez les Directives du fichier 004-tp04.conf comme suit : (commande nano)

ServerName tp04.domVMID.net
DocumentRoot /var/www/tp04
DirectoryIndex index.php

4. Créez un nouveau dossier /var/www/tp04


5. Dans ce dossier, créez une page index.php avec le contenu suivant :

<?php
echo "Adresse IP du Serveur : ".$_SERVER['SERVER_ADDR']."<br />";
echo "Adresse IP du Poste : ".$_SERVER['REMOTE_ADDR'];
?>

6. Activez votre nouveau site (Commande a2ensite)


7. Rechargez la configuration d'Apache (Commande service ou systemctl)
8. Ouvrez votre navigateur, testez votre nouveau site avec l'adresse : tp04.domVMID.net

Vous devriez afficher les Adresses IP de votre serveur et de votre poste.


Si tout est OK, passez directement à la partie 2 (une goutte de PHP), sinon essayez de
corriger le problème en vous aidant des instructions de la page suivante.

SERVEUR WEB - M2204 2


Pour tous les cas, et après chaque modification de la configuration , n'oubliez pas de
relancer apache avec la commande : service apache2 reload

Cas 1 : Apache ne se recharge pas

a) Vérifiez le contenu de votre fichier 004-tp04.conf, vous devez y trouver les 3 lignes
suivantes (sans # devant )

ServerName tp04.domVMID.net
DocumentRoot /var/www/tp04
DirectoryIndex index.php

b) Si vous ne voyez pas d'erreur à corriger, saisissez la commande : journalctl -xn


et essayez de comprendre l'erreur par vous-même avant d'appeler l'enseignant.

Cas 2 : C'est un ancien site qui s'affiche

a) Vérifiez la Directive ServerName de votre fichier de configuration.


(il ne doit pas y avoir de # devant, ce symbole met la ligne en commentaire)

b) Vérifiez la Directive ServerName des autres fichiers de configuration.


Elles doivent être configurées comme suit :

dans 002-mmis2.conf : ServerName mmis2.domVMID.net


dans 003-tp03.conf : ServerName tp03.domVMID.net

c) Vérifiez aussi votre Directive DocumentRoot .


Elle doit pointer sur votre dossier /var/www/tp04

Cas 3: Rien de s'affiche (Page Blanche)

a) Vérifiez que vous avez bien installé php7.0 et le module apache lors
des TP précédents :

apt-get update
apt-get install php7.0
apt-get install libapache2-mod-php7.0

b) Vérifiez votre code php. ATTENTION au ; et à la balise <?php

c) Vérifiez que le module php7.0 est bien actif dans apache2 : a2enmod php7.0

SERVEUR WEB - M2204 3


Partie 2a : Une Goutte de PHP
Normalement vous avez correctement installé php et la page index.php de la partie 1
s'affiche correctement. Sinon reprenez la correction de la page précédente.

php se présente comme un module d'Apache et son fonctionnement est contrôlé par deux
fichiers de configuration :

• /etc/apache2/mods-available/php7.0.conf
Ce fichier permet de régler l'activation de l'interpréteur php dans certains modules
d'Apache comme par exemple userdir que vous avez utilisé lors du premier TP.
En effet l'utilisation de php dans les dossiers personnels (public_html) est
désactivée par défaut.

• /etc/php/7.0/apache2/php.ini
Ce fichier contient toutes les directives de configuration de php.
Quelques exemples de directives couramment utilisées :

• display_errors : Permet d'afficher les erreurs PHP. Off par Défaut.


• error_reporting : Définit quels types d'erreurs sont affichés
• upload_max_filesize : Taille maximale des fichiers "uploadés".
Par défaut : 2Mo.
• max_file_uploads : Maximum de fichiers "uploadés" en même temps.
Par défaut : 20
• post_max_size : Taille maximale des données acceptées par PHP lors de
l'envoi d'un formulaire (POST). Par défaut : 8Mo

Partie 2b : phpinfo()
Pour visualiser l'état de ces paramètres, php dispose d'une fonction : phpinfo()
Pour voir le résultat de cette fonction, créez une page info.php dans le dossier tp04
et appelez simplement la fonction sans aucun argument : phpinfo();
(mais entre les deux balises php !!!)

Visionnez ensuite votre page à l'adresse : tp04.domVMID.net/info.php

SERVEUR WEB - M2204 4


Le résultat obtenu vous donne toutes les informations sur l'environnement PHP
installé sur votre serveur et utilisé par votre site.

Avant de continuer relevez les informations suivantes et insérez-les sous forme de


tableau dans votre page index.php (sans effacer les lignes de la partie 1) :

OPTIONS VALEURS
Version de PHP
Emplacement du fichier php.ini
display_errors
file_uploads
upload_max_filesize
max_file_upload
post_max_size
max_execution_time
SMTP
APACHE_RUN_USER

La page phpinfo vous indique aussi les variables de SESSIONS actives (Section PHP
Variables), ainsi que les différents paramètres des librairies PHP spécialisées comme par
exemple : calendar, ftp, hash, mcrypt, mysql etc ...).

Un simple affichage de cette page permet donc de savoir quelles sont les fonctions
utilisables sur votre installation de PHP et comment les paramètres de chacune d'entre-
elles sont initialisés.

Partie 2c : display_errors
Pour illustrer l'intérêt de connaitre et de modifier les options de PHP commençons par
celle qui à sauver plus d'un développeur : display_errors. Pour bien comprendre son
usage commencez par créer une page test.php avec le contenu suivant (sans corrigez les
erreurs de code ) :

<?php
toto=1
echo "Ceci est une page pleine d'erreurs"
echo toto$;
?>

Ouvrez ensuite votre navigateur et appelez la page : tp04.domVMID.net/test.php


Normalement, vous devriez avoir une page blanche (sauf si vous avez corrigé les erreurs du code)

Maintenant, modifions la valeur de l'option display_errors.


Toutes les options de PHP sont gérées dans le fichier php.ini et comme vous avez pu le
voir dans la partie précédente, celui actif pour votre configuration se nomme :
/etc/php/7.0/apache2/php.ini (Option Loaded Configuration File)

Éditez ce fichier avec nano et passez la valeur de display_errors à On

SERVEUR WEB - M2204 5


ASTUCE ET REMARQUE :
Pour trouver la ligne display_errors , utilisez la recherche de nano avec CTRL+w
Ensuite, ne modifiez pas les lignes précédées d'un ; , cherchez la ligne display_errors=Off
et modifiez la en display_errors=On

Relancez apache2 pour prendre en compte la modification.

Ouvrez de nouveau votre navigateur avec la page : tp04.domVMID.net/test.php


Normalement, vous devriez une erreur php s'affichée, comme par exemple :

Parse error: syntax error, unexpected '=' in test.php on line 2

Bien entendu, il vous reste encore à interpréter correctement le message pour corriger les
erreurs, mais admettez tout de même que c'est plus simple que de chercher directement
les erreurs dans le code (surtout quand il y a quelques centaines de lignes).

Génial, me direz-vous mais comment faire si on n'a pas accès au fichier php.ini ?
Encore une fois, c'est le fichier htaccess qui vous sauvera (à condition que la gestion d'un tel
fichier soit activée sur le serveur comme nous l'avons vu dans le TP précédent)
Il suffit d'ajouter la ligne : php_flag display_errors On
dans le fichier htaccess de la racine de votre site.

Partie 2d : Upload de Fichiers


Télécharger un fichier vers le serveur à partir d'un formulaire en php est une chose assez
courante sur un site web, ne serait-ce que pour permettre à un utilisateur de mettre sa
photo ou son avatar sur son profil par exemple. Mais comment éviter que l'utilisateur
"upload" une image de plusieurs GigaOctet et occupe trop d'espace disque sur le serveur ?

L' option : upload_max_filesize va nous permettre de limiter (ou d'augmenter) la taille


acceptable par le serveur. Par défaut , cette option est à 2Mo, ce qui limite assez vite la
taille des fichiers.

PETITE DEMONSTRATION :

Dans votre dossier /var/www/tp04


Créez une page form.html avec le contenu suivant :

<!DOCTYPE html>
<html>
<head>
<title>FORMULAIRE UPLOAD</title>
<meta charset="utf-8" />
</head>

<body>
<h1>FORMULAIRE DE TELECHARGEMENT TP04</h1>
<form method="POST" action="upload.php" enctype="multipart/form-data">
<p>
<input type="file" name="fichier" /><br />
<input type="submit" value="ENVOYER" />
</p>
</form>
</body>
</html>

SERVEUR WEB - M2204 6


Créez une page upload.php avec le contenu suivant :

<?php
move_uploaded_file($_FILES['fichier']['tmp_name'],'uploads/'.basename($_FILES['fichier']['name']));
if ($_FILES['fichier']['error'] == 0) {
echo "Votre fichier est dans /var/www/tp04/uploads";
} else {
echo "UPLOAD ERROR";
}
?>

Créez ensuite un dossier uploads pour recevoir les fichiers


Donnez les droits à www-data pour qu'il puisse écrire dans ce dossier
(chown www-data uploads)

Ouvrez votre navigateur avec la page : tp04.domVMID.net/form.html


Choisissez un fichier (pas plus de 2Mo) sur votre machine et cliquez sur ENVOYER
Vérifiez que le fichier est bien présent dans votre dossier uploads.
Pour l'instant pas de souci, si le fichier est inférieur à 2Mo tout va bien.

Essayez maintenant d'uploader le fichier PHOTO.jpg qui se trouve sur votre poste dans
(Répertoire Personnel/Documents). Là , ça ne fonctionne plus. Le fichier est supérieur à
2Mo, le système refuse de le télécharger.

Corrigeons le problème en modifiant le fichier php.ini

Éditez le fichier php.ini et augmentez la valeur de upload_max_filesize à 4Mo .


Rechargez apache2 et testez de nouveau l'envoi du fichier.
Vérifiez que le fichier PHOTO.jpg est bien dans le dossier uploads.
D'autres options de php.ini permettent de gérer l"upload" des fichiers.
Par exemple :

file_upload peut être passé à Off pour interdire tout téléchargement vers le serveur.
max_file_uploads permet de gérer le nombre de fichiers téléchargeables en une seule fois.
post_max_size définit la taille maximale des données reçues par la méthode POST.
Cette option affecte également les fichiers chargés. Pour charger de gros fichiers, cette
valeur doit être plus grande que la valeur de upload_max_filesize .

Et dans le fichier htaccess ? Pas de souci, ces valeurs peuvent aussi être géré dans le
fichier htaccess avec la Directive php_value. Exemples :
php_value upload_max_filesize 4M aurait le même effet que notre modification
php_flag file_upload Off interdirait le téléchargement des fichiers.

SERVEUR WEB - M2204 7


Partie 3 : max_execution_time
Pour illustrer cette dernière partie, nous allons reprendre un exercice que vous auriez pu
voir dans une autre matière : La suite de Fibonacci .

Par défaut ce script permet de calculer une suite de Fibonacci à un rang donné , mais il
n'arrive jamais à s'exécuter complètement car la complexité du calcul génère un nombre
trop important d'appels récursifs à la fonction initiale.

Le code à exécuter est le suivant, saisissez le dans une page nommée fibo.php
et exécutez-le en appelant la page avec l'url : tp04.domVMID.net/fibo.php

<?php
function fibo( $n ) {
if ($n==0) {
return 0;
} else if ($n==1) {
return 1;
} else {
return (fibo($n-1)+fibo($n-2));
}
}

$tab=array(1,3,10,30,40,42,44);

foreach ($tab as $n) {


$debut = microtime(true);
$valeur = fibo($n);
$fin = microtime(true);
$temps = $fin - $debut;
echo '<p>Temps de calcul : '.number_format($temps,6);
echo ' secondes.</p>'."\n"; // on affiche le résultat

echo '<p>Valeur Fibonacci de '.$n.' : '.$valeur.'</p>'."\n";


}
?>

L'exécution du code se termine généralement par un beau message du type :


Fatal error: Maximum execution time of 30 seconds exceeded in fibo.php on line ....

30 seconds étant le temps maximum d'exécution accordé à un traitement php. Ce temps est défini
par l'option : max_execution_time et peut bien sûr être augmenté en modifiant sa valeur dans le
fichier php.ini ou dans le htaccess .

Votre dernier exercice va donc consister à faire exécuter le code de la page suivante dans sa totalité
sans changer ni le code, ni le fichier php.ini .

Pour faire exécuter le code, vous devez appeler la page par l'adresse :

INDICE : Vous devez réutiliser des concepts vus dans les parties précédentes, mais aussi dans le
TP précédent.

SERVEUR WEB - M2204 8


CORRECTION RAPIDE DES EXERCICES DU TP03 :

Votre Objectif : créer un Site avec les caractéristiques suivantes :

Nom du Site : tp03.domVMID.net


Nom du fichier de Configuration : 003-tp03.conf
Dossier des pages : /var/www/tp03
Page index par défaut : tp03.html

mkdir /var/www/tp03
nano /var/www/tp03/tp03.html (Contenu de votre choix)
nano /var/www/tp03/error404.php (Pour la page d'erreur 404)
cd /etc/apache2/sites-available
cp 000-default.conf 003-tp03.conf
nano 003-tp03.conf avec les directives suivantes :

ServerName tp03.domVMID.net
DocumentRoot /var/www/tp03
DirectoryIndex tp03.html

<Directory /var/www/tp03>
Options -Indexes (Pas d'affichage de la liste des fichiers)
ErrorDocument 404 /error404.php (Gestion de l'erreur 404)

#Authentification de usermmi sans fichier htaccess

AuthName "Ce Site est sous protection"


AuthType Basic
AuthUserFile "/var/www/passwords"
Require valid-user

</Directory>

a2ensite 003-tp03.conf
systemctl reload apache2

PAS BESOIN DE DIRECTIVE AllowOverride puisqu'il n'y a pas de fichier htaccess


Tout est géré dans le fichier de configuration

ATTENTION : Le site ne s'affichera correctement que si la Directive ServerName est


aussi correcte dans les autres fichiers de configuration de site et si le fichier passwords
(généré pendant le TP) est bien présent dans le dossier /var/www

Commande : htpasswd –c passwords usermmi


à faire dans le dossier /var/www si le fichier n'existe pas.

SERVEUR WEB - M2204 9

Vous aimerez peut-être aussi