Transcript Cours 4 PHP

Cours 4
PHP
Informatique M2
Nils Schaefer ([email protected])
Nils Schaefer
Informatique M2
Introduction
●
●
●
Acronymes
–
Personal HomePage
–
People Hate Pearl
–
PHP Hypertext Preprocessor
Langage de script
–
Exécution côté serveur
–
Génération de code dynamiquement
Langages concurrents
–
–
Nils Schaefer
ASP avec VB.NET, C#... (Microsoft)
JSP avec Java (Sun)
Informatique M2
x/x
Fonctionnement sans PHP
●
Le navigateur demande un document
●
Le serveur Web envoie le document
●
Le document peut être
●
–
Une page HTML
–
Une image
–
Une feuille de style CSS
–
Un fichier Javascript
–
…
Le serveur Web se cantonne à envoyer les
fichiers demandés
Nils Schaefer
Informatique M2
x/x
Fonctionnement avec PHP
●
Le navigateur demande une page PHP
●
Le serveur Web va lancer l'interpréteur PHP
●
●
L'interpréteur exécute le script PHP et envoie le
résultat au serveur Web
Le serveur Web envoie la page générée
–
Cette page est le résultat de l'exécution du
script PHP
–
Elle ne contient plus de code PHP mais du
HTML, du CSS, du Javascript...
x/x
Nils Schaefer
Informatique M2
Avantages/Inconvénients
●
●
Avantages
–
Récupération de données
–
Accès aux bases de données
–
Manipulation de fichiers côté serveur
Inconvénients
–
Besoin de plus de ressources
●
–
Exécution de programmes
Problèmes de sécurité
●
Exécution de programmes
x/x
Nils Schaefer
Informatique M2
Environnement de développement
●
●
Besoin d'installer un serveur Web
–
En local sur son poste
–
Déploiement des pages sur le serveur Web
–
Exemple : WAMP Serveur, EasyPHP...
Accès aux pages : ATTENTION !!!
–
URL : http://localhost/mapage.php
–
Surtout pas : file:///C:/wamp/www/mapage.php
●
●
Pas d'exécution du code PHP
Se remarque car on voit les balises PHP
x/x
Nils Schaefer
Informatique M2
Fichier de configuration
●
Fichier php.ini
●
Nombreux paramètres
Nils Schaefer
–
disable_functions
–
disable_classes
–
max_execution_time
–
max_input_time
–
memory_limit
–
error_reporting (E_ALL, E_NOTICE,
E_ERROR)
–
...
x/x
Informatique M2
Syntaxe
●
Similaire à celle du C/C++, Java
–
●
●
Donc similaire à celle de Javascript !
Quelques différences
–
Pas de déclaration des variables
–
Symbole $ devant les variables
Intégration dans le HTML
–
<?php
// Mon code PHP
?>
x/x
Nils Schaefer
Informatique M2
Tableaux
●
Manipulation similaire à Javascript
–
●
$t=array(); $t[6]='Bonjour';
Tableaux dynamiques
–
Taille variable
–
Manipulations aisées
●
●
$t[]='Nouveau';
Tableaux associatifs
–
La clé est une donnée quelconque
●
$t['UnTexte']='UneDonnée';
x/x
Nils Schaefer
Informatique M2
Génération du résultat
●
Un script PHP doit produire un résultat
–
●
Souvent du HTML/CSS/Javascript
Commandes echo et print
–
Envoi d'un texte en sortie
–
Exemples
●
Nils Schaefer
$monfichier='image.gif';
echo"<img src=$monfichier><div>Titre</div>";
echo'<img src=',$monfichier,'<div>Titre</div>';
echo'<img src='.$monfichier.'<div>Titre</div>';
print"<img src=$monfichier><div>Titre</div>";
print'<img src='.$monfichier.'<div>Titre</div>';
Informatique M2
x/x
Variables d'environnement
●
●
Tableaux associatifs contenant des infos sur
l'environnement du script PHP
Plusieurs variables
–
$_SERVER
●
●
●
●
●
–
SERVER_NAME : nom du serveur
SERVER_ADDR : adresse du serveur
REMOTE_ADDR : adresse du client
HTTP_REFERER : URL de provenance
...
$_GLOBALS, $_POST, $_GET, $_SESSION...
x/x
Nils Schaefer
Informatique M2
Récupération des données
●
●
●
Formulaire GET
–
Variable d'envrionnement $_GET
–
Tableau associatif contenant les champs
Formulaire POST
–
Variable d'envrionnement $_POST
–
Tableau associatif contenant les champs
Exemple
Nils Schaefer
–
En HTML : <form method=post>...<input
type=text name=Ville>...</form>
–
Récupéré en PHP : $_POST['Ville']
Informatique M2
x/x
Manipulation des variables
●
Fonction isset
–
Permet de savoir si une variable existe
–
Exemples
●
●
●
isset($a)
isset($_POST['id'])
Fonction unset
–
Permet de détruire une variable
–
Exemples
●
●
unset($a);
unset($t['MaCle']);
x/x
Nils Schaefer
Informatique M2
Cookies
●
Fichier déposé sur le poste du client
●
Récupéré ultérieurement
–
●
●
Date de validité
Fonction setcookie
–
Créer un cookie : setcookie('Info','Mes infos');
–
Supprimer un cookie : setcookie('Infos');
Cookies accessibles par $_COOKIE
x/x
Nils Schaefer
Informatique M2
Structuration du code PHP
●
Possibilité d'utiliser plusieurs fichiers PHP
–
●
Modularité = maintenance simplifiée
Différentes méthodes d'intégration
–
include et include_once
●
–
require et require_once
●
–
Echec non bloquant
Echec bloquant
Les versions postfixées avec _once s'assurent
que le fichier concerné ne sera inclus qu'une
seule fois même si on fait plusieurs inclusions
x/x
Nils Schaefer
Informatique M2
Authentification
●
Mécanisme qui permet d'accéder à des
données personnelles et/ou à des
fonctionnalités réservées
●
Basé sur le couple login/mot de passe
●
Principe fondamental
–
Ne jamais stocker un mot de passe en clair
–
Toujours stocker un mot de passe crypté
●
–
Généralement avec une fonction à sens unique
Sécurité bien plus importante
x/x
Nils Schaefer
Informatique M2
Authentification
●
●
●
Test du login/mot de passe
–
On crypte le mot de passe saisi
–
On compare les deux mots de passes cryptés
–
S'ils sont identiques l'authentification est ok
Fonctions de cryptage classiques
–
md5 (128 bits)
–
sha1 (160 bits)
–
hash (version générique)
Fonctions également utilisées pour les
empreintes
Nils Schaefer
Informatique M2
x/x
Sessions
●
●
●
●
Conserver des informations pendant toute la
durée de visite d'un site
Similaire aux cookies mais...
–
Données stockées sur le serveur
–
Données non accessibles côté client
–
Données qui expirent lorsque l'utilisateur se
déconnecte ou ferme le navigateur
Pas obligatoirement associé à un mécanisme
d'authentification !
Identifiant de session placé dans un cookie
Nils Schaefer
Informatique M2
x/x
Sessions
●
Ouverture d'une session
–
●
Fermeture d'une session (déconnexion)
–
●
session_start (modifie les en-têtes HTTP)
session_destroy
Quand une session est ouverte
–
Utilisation de $_SESSION pour stocker des
données
–
Exemples
●
●
Nils Schaefer
$_SESSION['Nom']="Brutus"
$mavar=$_SESSION['Nom']
Informatique M2
x/x
Manipulation des fichiers
●
●
Ouverture / Création
–
fopen (lecture, écriture ou ajout)
–
Retourne l'identifiant du fichier
–
Valable en lecture pour des URL !!!
Ecriture
–
●
Lecture
–
●
fwrite
fread
Fermeture d'un fichier
–
Nils Schaefer
fclose
x/x
Informatique M2
Upload de fichiers
●
Envoyer des fichiers avec un formulaire
●
Balise form avec enctype=multipart/form-data
●
Balise input avec type=file
–
●
●
Champ avec un bouton Parcourir
Temps d'attente pouvant être long lors de la
validation du formulaire en fonction de la taille
des fichiers envoyés
Exemple : mise en ligne d'une photo, choix d'un
avatar sur un forum...
x/x
Nils Schaefer
Informatique M2
Upload de fichiers
●
●
●
●
Récupération dans $_FILES
Tableau associatif qui contient tous les fichiers
uploadés (noms utilisés dans les balises input)
Pour chaque fichier un tableau associatif
–
name : nom d'origine
–
tmp_name : nom lors de l'upload sur le serveur
–
size : taille en octets
–
type : type MIME du fichier
–
error : erreurs éventuelles
Déplacement avec move_uploaded_file
Nils Schaefer
Informatique M2
x/x
SGBD et SQL
●
●
Système de Gestion de Bases de Données
–
Gère physiquement les bases de données
–
Permet leur manipulation
Structured Query Language
–
Langage normalisé
●
Base compatible entre les différents SGBD
–
Langage pour créer des bases de données
–
Langage pour manipuler des données
x/x
Nils Schaefer
Informatique M2
Requête SQL d'extraction
●
Requête SELECT
●
Retourne une ou plusieurs lignes
–
Avec un ou plusieurs champs par ligne
●
Aucun impact sur les données
●
Exemple
–
●
SELECT nom,prenom FROM utilisateurs
Nombreuses possibilités de sélection,
d'agrégation et de tri des données extraites
x/x
Nils Schaefer
Informatique M2
Requêtes SQL de modification
●
●
Requête qui ont un impact sur une ou plusieurs
données d'une base de données
Ajout de données
–
●
Mise à jour de données
–
●
INSERT INTO
UPDATE
Suppression de données
–
DELETE
x/x
Nils Schaefer
Informatique M2
Interactions entre PHP et MySQL
●
PHP est associé au serveur Apache
●
Le SGBD MySQL est un autre serveur
–
●
PHP envoi des requêtes SQL vers MySQL
–
●
Souvent physiquement sur la même machine
que le serveur Apache
Extraction ou modification
MySQL renvoi le résultat des requêtes
–
Echange de données
●
Attention aux volumes des échanges
x/x
Nils Schaefer
Informatique M2
Interactions entre PHP et MySQL
●
●
Ouverture de la connexion au SGBD
–
mysql_connect
–
Localisation du SGBD
–
Identification de l'utilisateur
–
Retourne un identifiant
Choix d'une base de données
–
●
mysql_selectdb
Fermeture de la connexion au SGBD
–
mysql_close
x/x
Nils Schaefer
Informatique M2
Interactions entre PHP et MySQL
●
Réaliser une requête
–
●
Dans le cas d'une requête de modification
–
●
mysql_query
Retourne un booléen
Dans le cas d'une requête d'extraction
–
Retourne un identifiant du résultat
–
mysql_fetch_assoc
●
●
Nils Schaefer
Extrait une ligne de résultat et la place dans un
tableau associatif
mysql_fetch_xxx
Informatique M2
x/x
Méthode de travail
●
Modélisation de la base de données
–
●
Exportation au format SQL
–
●
Logiciel MySQL Workbench
Instructions SQL pour la création de la base de
données
Construction de la base données sur MySQL
–
Mode console
–
PHPMyAdmin
x/x
Nils Schaefer
Informatique M2
Requêtes SELECT avancées
●
Utilisation de WHERE
–
Filtrage des lignes de la requête
–
Test réalisé ligne par ligne
●
●
–
●
Si le test est vrai la ligne est conservée
Si le test est faux la ligne n'est pas conservée
Penser à l'indexation !
Exemple
SELECT * FROM Salaries
WHERE Salaire>20000 AND
(Nom='Durand' OR Nom='Dupond')
Nils Schaefer
Informatique M2
x/x
Requêtes SELECT avancées
●
Utilisation de GROUP BY
–
Fusionne les lignes de résultat
●
–
Couplé à un agrégat
●
●
Basé sur un ou plusieurs champs
Dénombrement, somme, moyenne...
Exemple
SELECT Salaire,COUNT(*)
FROM Salaries
WHERE Salaire>20000
GROUP BY Salaire
Nils Schaefer
Informatique M2
x/x
Requêtes SELECT avancées
●
Utilisation de HAVING
–
Couplé à un GROUP BY
–
Equivalent du WHERE
●
–
●
Intervient APRES le GROUP BY
Possibilité d'utiliser les agrégats
Exemple
SELECT Salaire,COUNT(*)
FROM Salaries
WHERE Salaire>20000
GROUP BY Salaire
HAVING COUNT(*)>5
Nils Schaefer
Informatique M2
x/x
Requêtes SELECT avancées
●
●
Utilisation de JOIN
–
Fusionne deux tables sur égalité d'un ou
plusieurs champs
–
Plusieurs JOIN successifs possibles
–
Entre deux tables qui ont une relation PK/FK
Exemple
SELECT Nom,Prenom FROM Utilisateurs AS u
JOIN CommandesUtilisateurs AS cu ON u.idUtilisateur= cu.idUtilisateur
JOIN Commandes AS c ON cu.idCommande=c.idCommande
WHERE montant>=500
x/x
Nils Schaefer
Informatique M2
Requêtes SELECT avancées
●
●
Utilisation de ORDER BY
–
Réalisation d'un tri des données
–
Un ou plusieurs champs
–
Croissant ou décroissant
–
Plus efficace qu'en PHP grâce aux index !
Exemple
SELECT Nom,Prenom,Salaire
FROM Salaries
ORDER BY Nom,Prenom,Salaire DESC
x/x
Nils Schaefer
Informatique M2
Index
●
●
Optimiser le temps d'exécution des requêtes
–
Trouver des lignes associées à un WHERE
–
Ecarter des lignes du résultat
–
Réaliser des jointures
–
Trouver des valeurs min et max
–
Trier des lignes
Attention coût de mise à jour des index
–
●
Ne pas tout indexer !
Création d'un index avec CREATE INDEX ou
dès la création de la table
Nils Schaefer
Informatique M2
x/x