Déploiement d'un module PHP sur un serveur web

Objectifs

Dans ce module nous verrons comment travailler avec des fichiers php dans le cadre de l'utilisation d'un serveur web.

Introduction

Dans ce module nous verrons comment installer et utiliser php-fpm qui est une interface permettant à un serveur web de renvoyer le résultat d'un code php.

Problématique du php

Introduction

Pour cet partie il vous faut vous munir d'un serveur web déjà fonctionnel. Un seul site suffira.

Présentation du PHP

Naissance du PHP

Le langage PHP fut créé en 1994 par Rasmus Lerdorf pour son site web. C'était à l'origine une bibliothèque logicielle en C7 dont il se servait pour conserver une trace des visiteurs qui venaient consulter son CV. Au fur et à mesure qu'il ajoutait de nouvelles fonctionnalités, Rasmus a transformé la bibliothèque en une implémentation capable de communiquer avec des bases de données et de créer des applications dynamiques et simples pour le Web (Source Wikipédia).

Pourquoi faire du PHP

Ce langage de programmation libre descendant du C est exécuté du côté serveur pour pouvoir finalement générer autant du code (HTML ou CSS par exemple) ou des données (PNG, GIF,...) qui seront envoyées au navigateur du client capable des les interpréter. Une autre force du PHP est qu'il est très utile pour envoyer des données à une base de données. Il est multi-plateforme : autant sur Linux qu'avec Windows il permet aisément de reconduire le même code sur un environnement à peu près semblable (prendre en compte les règles d'arborescences de répertoires qui peuvent changer). Sa puissance en fait un élément central de sites très connus tels que Facebook ou Wikipédia. Avec le temps, le PHP est devenu la référence pour créer des sites dynamiques ou des applications web.

Présentation de la syntaxe PHP

Lorsque PHP traite un fichier, il cherche les balises d'ouverture et de fermeture (<?php et ?>) qui délimitent le code qu'il doit interpréter. Notons que comme en C (le PHP étant un descendant du C), le "//" permet de faire que la ligne qui le suit soit seulement un commentaire.

<?php
echo "Bonjour le monde !";
// ... encore du code
echo "Dernière instruction";
// le script se termine ici, sans la balise de fermeture PHP
?>

De cette manière, cela permet à PHP d'être intégré dans toutes sortes de documents, car tout ce qui se trouve en dehors des balises ouvrantes / fermantes de PHP est ignoré. Par exemple ci-dessous on intègre du HTML qui ne sera pas interprété par le serveur et qui sera directement transmis au client

<h1>Mon Site Web</h1>
<?php
//Du code
?>

Test du PHP

Création d'un fichier php

Dans la racine de votre site, créer un fichier simple contenant du php.

sudo nano /home/www/monsite.fr/home.php
<?php
echo "<h1>Hello World !<h1>";
?>

Test du fichier

Rendez vous sur votre site et ajouter à l'url le nom du fichier que vous venez de créer. Dans mon cas cela donne monsite1.fr/home.php

Téléchargement fichier php

On voit que le site nous propose de télécharger le fichier au lieu de nous afficher le "Hello World !". Nous allons voir dans ce module comment faire pour afficher les fichiers PHP sur notre site.

Installation du module php

Installation

Nous allons devoir installer un paquet permettant à Nginx de traiter les fichiers PHP. Pour cela il suffit d'entrer la commande :

sudo apt-get install php-fpm

Configuration

Le fichier de configuration de php-fpm se trouve à l'adresse /etc/php/8.1/fpm/php.ini . Le fichier est très complet et bien expliqué (en anglais), la configuration de base est très bien pour l'utilisation que nous allons en faire, il est cependant recommandé d'aller remplacer display_errors = off par display_errors = on , ce qui peut être très utile en cas d'erreurs lorsque l'on est en phase de développement. Cette variable est à laisser off dans un environnement de production, car on veut en général cacher au maximum les éventuelles erreurs PHP pour des raison d'ergonomie, de présentation mais également de sécurité.

Pour notre cas, nous allons activer l'affichage des erreurs pour nous aider à débugger notre application le temps du développement

sed -i "s|^display_errors = Off|display_errors = On|g" /etc/php/8.1/fpm/php.ini
sed -i "s|^display_startup_errors = Off|display_startup_errors = On|g" /etc/php/8.1/fpm/php.ini
systemctl restart php8.1-fpm.service

Nous allons aussi devoir effectuer des modifications dans nos configuration nginx pour lui dire quoi faire avec nos fichier php.

Voici une configuration minimale pour nginx utilisant du php :

server{
        listen 80;
        server_name monsite.fr;
        root /home/www/monsite;
        index index.php index.html;
        location / {
                try_files $uri $uri/ =404;                        #on indique au serveur qu'on essaye d'abord de charger le fichier demandé dans l'url (avec $uri) ou sinon le dossier ($uri/) ou de renvoyer une erreur 404 si il ne trouve pas le fichier
                }
        location ~ \.php$ {                                       #on explique à nginx ce qu'il doit faire si on lui demande un fichier terminant par .php
                include snippets/fastcgi-php.conf;                #on inclut une configuration nginx situé dans /etc/nginx/snippets/ 
                fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;   #on indique à nginx quel processus s'occupe du php, on peut trouver la liste des processus dans /var/run
}
        error_log /home/logs/monsite.error.log;
        access_log /home/logs/monsite.log;
}

On peut ensuite à la racine de notre site créer un fichier phpinfo.php contenant le code ci-dessous :

<?php phpinfo(); ?>

Enfin on peut se rendre sur notre site et ajouter /phpinfo.php à l'url et observer que notre site reconnaît désormais les fichiers php.

La page affichée est une page récapitulative de la configuration de php sur notre serveur.

Quel est l'intérêt d'utiliser php sur un serveur web ?

Avoir des sites dynamiques

Supporter de nombreuses bases de données

PHP est compatible avec de nombreux systèmes d'exploitation

Collecter des données de formulaire

Quel est l'intérêt d'utiliser php sur un serveur web ?

Avoir des sites dynamiques

Supporter de nombreuses bases de données

PHP est compatible avec de nombreux systèmes d'exploitation

Collecter des données de formulaire

PHP peut réaliser toutes ces choses et bien plus encore. De façon générale on l'utilise afin d'avoir un site dynamique et pouvoir gérer des bases de données.

Pour plus d'informations vous pouvez consulter la documentation officielle.

Site en PHP

Quel est l'interêt d'un fichier html par rapport à du simple texte ?

Le language HTML permet de structurer notre texte, avoir des titres et des paragraphes. C'est un langage qui est interprété par le navigateur.

Testez la configuration de php-fpm en créant un fichier index.php contenant le code suivant :

<?php
$prenom = Anthony;
echo "<h1>Bonjour".$prenom." !</h1>";
?>

Quelle est la différence entre le code donné précédemment et celui ci :

<?php
echo "<h1>Bonjour Anthony !</h1>";
?>

Dans le premier code nous avons une notion de variable, c'est à dire que nous affectons un prénom à la variable $prenom et on peut ensuite l'utiliser à plusieurs endroits différents. Cela nous permet de changer le nom à un seul endroit lorsque nous souhaitons effectuer des modifications.

Comment récupérer une variable dans une URL ?

$_GET

Tout d'abord pour faire passer des variables par l'url il faut l'écrire sous la forme :

monsite.fr/bonjour.php?variable1=valeur1&variable2=valeur2

Ensuite côté code php il faut utiliser $_GET comme ci-dessous :

<?php
$a = $_GET['variable1'];
$b = $_GET['variable2'];
echo $a;
echo $b;
?>

Donner l'URL ainsi que le code php d'une page qui affiche le nom et le prénom du client.

monsite.fr/bonjour.php?nom=Bocquet&prenom=Anthony

<?php
$nom = $_GET['nom'];
$prenom = $_GET['prenom'];
echo "<h1> Bonjour ".$prenom." ".$nom." !</h1>";
?>
Page web dynamique

Une page web dynamique est une page web générée à la demande, par opposition à une page web statique. Le contenu d'une page web dynamique peut donc varier en fonction d'informations (heure, nom de l'utilisateur, formulaire rempli par l'utilisateur, etc.) qui ne sont connues qu'au moment de sa consultation. À l'inverse, le contenu d'une page web statique est a priori identique à chaque consultation.

Source : Wikipédia

Liste des raccourcis clavier

Liste des fonctions de navigation et leurs raccourcis clavier correspondant :

  • Bloc Suivant : flèche droite, flèche bas, barre espace, page suivante, touche N
  • Bloc Précédent : flèche gauche, flèche haut, retour arrière, page précédente, touche P
  • Diapositive Suivante : touche T
  • Diapositive Précédente : touche S
  • Retour accueil : touche Début
  • Menu : touche M
  • Revenir à l'accueil : touche H
  • Fermer zoom : touche Échap.