# SPARQL Protocol and RDF Query Language/Travail pratique/Initiation à PHP
## Pourquoi utiliser PHP ?

Dans le chapitre précédent, vous avez configuré votre serveur HTTP et créé une petite page HTML. Vous allez maintenant essayer de la rendre dynamique en y insérant du PHP pour afficher le contenu d'une base de données MySQL ou SPARQL par exemple. Pour cela, il faudra installer PHP, MySQL... et un triplestore !
Mais commençons par le début : il vous faut savoir utiliser PHP.

## À savoir avant de commencer
### Que fait PHP ?

* HTML avec CSS sont des langages pour afficher des pages Web statiques, c'est-à-dire des pages qui ne changent pas dans le temps.
* PHP est un langage de programmation Web car il produit généralement du code HTML.
* Le code HTML que produit PHP change en fonction des circonstances que vous avez programmées.
Donc PHP permet de faire des pages Web dynamiques.

### Quand PHP intervient-il ?

Il intervient à chaque chargement (et donc rafraîchissement) d'une page Web écrite en PHP.
Un rafraîchissement de page, c’est par exemple :
* le clic de l’utilisateur sur le bouton Envoyer d'un formulaire (voir la leçon formulaire en HTML)
* une première arrivée sur une page Web.

### Documentations
#### Le cours PHP

Les cours sur PHP dans Wikiversité sont déjà bien avancés, lisez-les si vous en avez le temps. Les TP ne feront que survoler les concepts de base.

#### Le site officiel de PHP

Le site officiel de PHP est extrêmement bien fait. La documentation de n’importe quelle fonction est accessible depuis l'URL : http://php.net
N'oubliez pas de consulter les commentaires utilisateurs, car de très nombreux commentaires donnent des conseils très utiles. La documentation complète de PHP est disponible en français à l’adresse : http://www.php.net/manual/fr/

## Installation de PHP

Nous installons les paquets PHP ainsi que le paquet qui peut nous permettre de lancer des scripts PHP via une ligne de commande.
Sous Ubuntu
Sous Fedora ou CentOS

## PHP via ligne de commande

Il est souvent indispensable de savoir faire des scripts automatiques au sein d'un serveur Linux.
Il existe des tas de langages pour le faire. Si vous souhaitez apprendre à utiliser PHP, autant savoir l’utiliser aussi pour l'écriture de scripts.

### Afficher Hello World

Comme toutes commandes sous Linux, PHP possède sa documentation à travers la commande man :
Sous Ubuntu & Fedora ou CentOS
Pour quitter le mode man, tapez sur la lettre q du clavier.
Question : À l'aide de la documentation PHP, trouvez la commande pour afficher "Hello World" ?

### Configurer PHP

À de nombreuses reprises, vous aurez à configurer PHP, pour :
* modifier la taille maximale d'un fichier téléchargé via un formulaire
* changer la configuration du débogueur (qu'on verra dans un autre TP)
* configurer le fuseau horaire pour éviter de le faire dans le code
* indiquer l'adresse mail de l'administrateur pour recevoir les alertes
* etc.
Faire du développement en PHP, c’est aussi savoir faire un minimum d'administration du serveur.
Dans la réalité, vous n'aurez que rarement une console Windows vers votre serveur. La plupart du temps, vous aurez une console ssh, c'est-à-dire que vous n'aurez rien d’autre qu'une ligne de commande pour configurer le serveur.
Pour ce TP, bien que nous pourrions utiliser gedit sous Ubuntu, nous allons utiliser la commande vim pour nous entraîner à utiliser le mode console uniquement.

#### Savoir utiliser VIM

On va donc commencer par installer vim : Sous Ubuntu
Sous Fedora ou CentOS
Il faut savoir que VIM, à tout moment, possède un mode :
* standby : il attend une commande
* insert : il insère ce que vous tapez au clavier à l'endroit du curseur
* replace : il remplace le caractère devant le curseur avec ce que vous tapez au clavier
On peut voir en bas de l'écran le mode dans lequel vim se trouve :
* rien n’est affiché en bas de l'écran, à part la position du curseur : mode standby
* -- INSERT -- : mode insert
* -- REPLACE -- : mode replace
Pour revenir au mode standby, pressez la touche Esc (en haut à gauche du clavier, ou touche échap.). Pour passer au mode insert, il faut presser la touche Inser (à côté du bouton retour arrière, ou delete). Pour passer au mode replace, tapez deux fois sur la touche Inser.
Pour quitter vim, il faut être en mode standby et taper : et q
Avant de quitter, vim vous indique si vous avez modifié le fichier et vous demande de préciser si vous voulez sauver ou non vos modifications :
* En mode standby, pour quitter sans sauver => :q!
* En mode standby, pour quitter et sauver => :x
Dernière commande pratique à connaître, la recherche d'une ligne :
* En mode standby, pour chercher un texte => /timezone
* En mode standby, pour chercher l’occurrence suivante => n
Voilà le minimum à savoir sur vim pour survivre en mode console pour ce TP. (pour plus de commandes)
Exercice : Dessiner un bateau avec vim dans le fichier testvim. Ouvrir ce fichier comme indiqué ci-dessous (le tilde ~ est un raccourci pour indiquer la racine de votre répertoire personnel).

#### Exemple : configuration du fuseau horaire

Pour afficher le contenu d'une variable sous PHP, vous pouvez utiliser la fonction print_r.
Nous allons afficher le contenu de l’objet DateTime avec la ligne suivante :
Qui affiche :
Vous pouvez remarquer que le fuseau horaire n’est pas correct.
Nous pouvons également vérifier la configuration du fuseau horaire à travers la commande suivante, qui cherche le paramètre timezone à travers la sortie de la fonction phpinfo.
Nous allons changer ce paramètre dans le fichier de configuration de PHP.
Pour trouver où se trouve le fichier php.ini :
Avec vim, ouvrir le fichier php.ini et remplacer dans ce fichier la ligne :
par la ligne (attention bien retirer le ; du début de ligne pour que ce ne soit plus un commentaire)
Retaper ensuite cette commande pour vérifier que la modification a été prise en compte :

### Mon premier script

La ligne de commande permet de faire quelques commandes, mais le plus efficace est d'écrire un fichier avec les commandes à exécuter.
Un script PHP doit au moins contenir le texte suivant :
Exercice : Écrire un script pour afficher "Hello World".
Ouvrir le fichier :
Écrire:
Exécuter le script :

## PHP via un site Web

Un site Web est un service qui envoie à un navigateur Web (ou browser) des fichiers HTML. Une page Web dynamique en PHP va donc, à l'aide de PHP, construire un fichier HTML.
Nous allons donc utiliser comme base de nos pages PHP ce modèle de page :

### Ma première page Web

Dans le TP précédent, nous avons créé un site Web "http://moncv" qui est prêt à recevoir nos pages HTML. Le répertoire de destination de nos fichiers est : /var/www/moncv/
Exercice : Remplacer, modifier ou créer le fichier index.html pour écrire "Salut tout le monde !" (utiliser le modèle HTML vu plus haut).
Ouvrir le fichier (vim ouvre le fichier s’il existe déjà, ou le crée) :
Recopier le fichier :
Tester avec un navigateur.Attention, il faut peut-être rafraîchir la page.
Exercice : « pour le fun » si vous avez le temps : afficher le dessin suivant dans votre fichier HTML en lisant la documentation du W3C. indice : c’est sur cette page)
Ouvrir le fichier (vim ouvre le fichier s’il existe déjà, ou le crée) :
Recopier le fichier :
Tester avec un navigateur. Attention, il faut peut-être rafraîchir la page.

### Ma première page dynamique

Nous allons maintenant, comme exemple, utiliser notre modèle HTML et y insérer le code PHP echo "Hello World\n";.
Nous créons non pas un fichier avec une extension .html, mais .php pour bien indiquer au serveur que le fichier doit être généré par PHP avant d'envoyer le fichier HTML.
On supprime le fichier index.html pour qu'index.php soit le fichier par défaut du site.
Vérifier le résultat avec votre navigateur :
Votre première page dynamique est en ligne !

### Afficher la configuration du serveur PHP

PHP offre aussi la possibilité d'afficher les informations de configuration à travers une page Web. C'est indispensable avec les hébergeurs qui n'offrent qu'un accès FTP à un site Web. Exercice : créer une page info.php sur le serveur et qui ne contiendra que :
Vous devez retrouver le paramètre du créneau horaire que nous avons modifié plus haut.
Ces deux écritures sont équivalentes :
L'élément fermant n’est pas nécessaire s'il n'y a que du code PHP dans le fichier.
En production, il ne faut pas laisser ce fichier info.php avec cette fonction phpinfo, car il contient le paramétrage du serveur et peut donc indiquer les failles de sécurité du service (version des logiciels, etc.).
Nous n'irons pas plus loin dans ce TP, car nous reviendrons sur PHP dans les prochains TPs avec SPARQL.

## Exercice avec Docker

* Reprendre l'image Docker de l'exercice précédent et y rajouter PHP7 comme dans ce TP.
| Faire un serveur Web | Initiation à MySQL |