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