Sommaire du site
Présentation
Comment apprendre
L'équipement
La page web
Styles et CSS
HTML, structure de la page
HTML, éléments du corps
Le langage JavaScript
JavaScript, objets "core"
JavaScript, DOM, les bases
JavaScript, DOM, node
JavaScript, compléments
Le langage PHP, les bases
PHP, fonctions utiles
PHP pour le web
PHP, compléments
SQL, introduction
MySQL et PHP pour le web
MySQL, plus loin...
Applications AJAX
Annexes utiles
Fichier .htaccess
Sécurité des sites web
Conception d'un site web
Référencement,
syndication
Page mise à jour le : 12-08-2015
PHP est le sigle de "Hypertext Prepocessor". Il s'agit d'un langage de programmation.
Cela signifie qu'il dispose :
Bien qu'il s'agisse d'un langage d'usage général, il est très utilisé pour produire des pages web car il est souvent associé à un serveur web avec lequel il peut communiquer. Ici nous ne verrons que ce cas d'utilisation.
Dans ce contexte, le code PHP est intégré à l'écriture de la page dans la balise "<?php ... ?>".
Il est fondamental de comprendre que le code PHP sera traité par le serveur web qui le remplacera par ce qu'il a produit avant d'envoyer à page au navigateur de l'utilisateur.
Voici un fragment de page placée sur le serveur (ici la partie PHP est présentée en rouge) :
La partie PHP est évaluée par le serveur : l'instruction "echo" produit l'information qui la suit.
Donc le serveur enverra à la machine de l'utilisateur :
Par conséquent, l'utilisateur du site ne peut pas avoir connaissance des instructions PHP qui ont généré sa page, il n'en a que le résultat.
On vient de voir que la page est générée à partir du travail d'interprétation du code PHP fait par le serveur.
Par conséquent, si l'on veut vérifier les pages qui contiennent du code PHP, il est nécessaire de passer par un serveur capable d'interpréter le PHP. Lors des tests, il n'est donc plus possible d'envoyer la page écrite telle quelle au navigateur.
Il est possible que le code PHP ne produise pas d'information en sortie. Dans ce cas, bien sûr, rien ne sera inséré dans la page envoyée par le serveur. Cela est utilisé, entre autres, lorsque l'on comptabilise les accès à la page à des fins statistiques. L'information calculée est uniquement enregistrée sur le serveur.
On vient de voir que l'on intégrait souvent du code PHP au sein des pages HTML.
Habituellement, les noms de fichiers des pages ont pour extension ".htm" ou ".html".
Certains serveurs ne reconnaissent pas de telles pages comme pouvant contenir du PHP et ne font pas appel à l'interpréteur de ce langage. Dans ce cas, le code PHP n'est pas exécuté et la page est envoyée telle quelle.
Pour éviter ce type de problème, il est nécessaire d'utiliser l'extension ".php" pour ces pages.
L'écriture se fait, comme pour l'HTML, avec un éditeur de texte usuel. Le langage en lui-même ne connait que les caractères latins non accentués (code ASCII standard). Les identificateurs que l'on crée (noms de variables, de fonctions) peuvent utiliser des caractères accentués, mais il est préférable pour faciliter la portabilité et la lisibilité entre plates-formes d'en rester à l'ASCII standard. Cependant dans les textes que l'on produit (chaînes de caractères) d'autres codes sont possibles (ISO, UTF, ...).
ATTENTION, le PHP fait la distinction entre majuscules et minuscules pour certains identificateurs (les variables mais pas les fonctions). Dans le doute, il vaut mieux respecter la casse des caractères.
Les caractères d'espacement : saut de ligne, tabulateur, espace, peuvent être librement utilisés pour la mise en page. Ils n'ont pas d'incidence sur le déroulement du programme.
Pour l'écriture du script (le programme PHP) dans la page HTML, il est préférable d'utiliser un éditeur de texte spécialisé. Certains de ces logiciels, libres et gratuits, analysent le texte en temps réel afin de détecter les erreurs de syntaxe éventuelles, complètent automatiquement le code (utile pour les longs noms de fonctions intégrées du PHP) sans risque d'erreur et contiennent la documentation du langage intégrée.
L'interpréteur PHP peut rencontrer des erreurs lors de l'exécution du programme : erreur de syntaxe, instruction non reconnue ou invalide...
Si l'erreur empêche la poursuite de l'exécution du programme celui-ci sera abandonné et la production de la page en restera à cet emplacement.
Il est aussi possible que l'interpréteur détecte une anomalie qui n'empêche pas la poursuite du programme : fonction obsolète, paramètre erroné. Il s'agit d'une alerte
Dans les deux cas, l'interpréteur produit en sortie un message d'erreur qui sera transmis au navigateur de l'utilisateur. Selon l'emplacement de ce message dans le code HTML, il est probable qu'il soit affiché par le navigateur.
Si l'on s'attend à ce qu'une fonction poduise un message d'alerte on peut l'éviter en préfixant la fonction par l'arobase '@'.
Ils sont très utiles pour documenter le programme ou pour empêcher provisoirement l'exécution d'une de ses parties.
Les commentaires PHP ne sont bien sûr par évalués par l'interpréteur et celui-ci ne les transmet pas dans la page envoyée par le serveur.
Il y a trois façons de noter un commentaire :
Le code PHP est composé d'instructions, chaque instruction doit être terminée par le caractère "point-virgule" : ';'.
Il existe plusieurs catégories d'instructions.
Ces instructions indiquent à l'interpréteur que certains éléments existent. Car, avant d'être utilisés, il est souvent utile que l'interpréteur en connaisse l'existence et la structure.
Ainsi certaines variables et fonctions doivent être déclarées avant d'être utilisées (les concepts de variable et de fonction seront éclaircis plus loin).
Très souvent, on trouve en début de script tout un groupe de déclarations.
PHP est adapté à la programmation objet, il dispose du mécanisme de classes avec leurs méthodes et propriétés. Cela passe par des déclarations particulières.
Toutefois, la programmation objet n'est pas obligatoire en PHP et comme il s'agit d'une technique qui peut être assez déroutante il n'en est pas fait plus mention sur ce site.
Une fonction est une instruction qui réalise une action. Il en existe un grand nombre qui sont prédéfinies dans le langage et d'autres que l'on peut créer soi-même par une déclaration.
Une fonction possède un nom (généralement en minuscules). Pour appeler (exécuter) une fonction on écrit son nom suivi de parenthèses. Celles-ci peuvent contenir des informations qui seront transmises à la fonction : paramètres. Une fonction peut aussi renvoyer une valeur.
Voici quelques exemples de fonctions prédéfinies.
Notons que certaines fonctions acceptent plusieurs paramètres, voire un nombre variable de paramètres. Dans le cas où il y a en plusieurs, ils doivent être séparés par une virgule.
Par exemple : round (3.1416) renvoie 3, mais round(3.1416, 2) donnera 3.14 (le second paramètre indique le nombre de décimales).
L'instruction d'assignation ou d'affectation simple donne une valeur à une variable.
L'assignation combinée modifie la valeur d'une variable.
En fait, au sens strict, il s'agit d'opérateurs.
Ces instructions modifient le déroulement séquentiel du programme selon une condition.
Certaines permettent l'exécution d'une partie ou d'une autre du script en fonction du contexte (valeur d'une variable par exemple).
D'autres sont prévues pour un déroulement répétitif d'une section jusqu'à la réalisation d'une condition.
Elles seront détailles plus bas dans cette page.
Lors d'utilisation d'une structure de contrôle, il est souvent nécessaire de réaliser, selon la condition, une séquence de plusieurs instructions. Afin que cette séquence ne soit vue par la structure que comme une seule instruction, on l'entoure d'accolades.
{instruction1; instruction2; ....}
Les données que peut traiter PHP sont de plusieurs types :
Il s'agit des nombres, ils peuvent être entiers ou à virgule flottante (décimaux). Un nombre négatif est préfixé du signe '-'.
Les nombres "flottants" utilisent le point '.' comme séparateur des parties entière / décimale. Le caractère 'E" (majuscule ou minuscule) indique la puissance de 10.
1.2E3 vaut 1200, 45e-4 vaut 0.0045 .
La conversion entre entier et flottant est généralement implicite.
Ils ne disposent que de deux valeurs : vrai ou faux, notées respectivement TRUE ou FALSE. Majuscules ou minuscules sont permises.
Il s'agit de texte. On le note entre guillemets ou apostrophes. Les deux notations ne sont pas complètement équivalentes.
Entre apostrophes le texte est traité tel quel sauf l'apostrophe qui doit être noté \' et la barre oblique
inverse (anti-slash) notée \\ :
'Aujourd\'hui j\'ai modifié c:\\fichier.txt'.
Entre guillemets, les variables simples incluses seront évaluées et remplacées. En plus de la barre oblique inverse (anti-slash) notée \\, d'autres caractères d'échappement existent : le guillemet noté \", le saut de ligne : \n, le retour ligne \r et quelques autres.
Il s'agit d'une structure d'ensemble ordonné de valeurs. A chaque valeur est associée une clef qui permet d'y accéder. Ces clefs peuvent être textuelles ou numériques (indice ou index).
Un tableau est défini avec le mot 'array' suivi de parenthèses renfermant la description de son contenu. Si l'on ne sait pas encore quel sera son contenu, on utilise des parenthèses vides.
Voici deux exemples à partir des premiers mois de l'année.
Ici, on associe à chaque numéro de mois son nom. |
|
Ce tableau sera défini par :
Là, on associe à chaque nom de mois son nombre de jours. |
|
Ce tableau sera défini par :
Dans le cas où les indices sont des entiers consécutifs, il est possible de n'indiquer que le premier dans la
définition. Le premier exemple aurait pu être :
Où même :
Mais dans ce dernier cas, 'janvier' aurait été à l'indice 0, février à 1, etc.
Il s'agit d'une constante associée à tous les types, elle indique l'absence de valeur.
Le mot 'null' peut être écrit en majuscules ou minuscules.
Une variable contient une information (une valeur) de l'un des types vu plus haut. Comme son nom le laisse penser, le contenu d'une variable peut être modifié.
Les variables sont identifiées par un nom qui doit commencer par le caractère '$' et être suivi de lettres, chiffres ou '_'. Le PHP distingue dans les noms de variable les majuscules des minuscules.
Un certains nombre de variables sont prédéfinies par le système : variables externes. Elles commencent par le souligné et sont suivi de lettres majuscules. Par conséquent, pour éviter des rencontres inopinées, il est judicieux de définir des variables avec des lettres minuscules. Une variable spéciale, prédéfinie et interne, ne suit pas cette règle : la variable "$this". Nous n'aurons pas à en reparler sur ce site.
Voici quelques nom de variable valides :
$total, $somme_a_reporter, $telephone1 .
Pour accéder à un élément d'une variable de type tableau, on suffixe la variable de crochets dans lesquels est indiqué la clef/indice de cet élément.
Exemples.
Ces variables sont définies et initialisées par le serveur, ce sont des variables de type tableau.
Les tableaux $_POST, $_FILES et $_GET sont utilisées pour le traitement des formulaires.
$_GET permet de retrouver les données supplémentaire de requête transmises dans l'URL. Par exemple, soit l'URL
:
http://www.serveur.com/dossier/page.php?nom=toto&prenom=riri
$_GET['nom'] contiendra 'toto' et $_GET['prenom'] contiendra 'riri'.
Le tableau $_SERVER fournit des informations du serveur, par exemple :
$_SERVER['PHP_SELF'] donne le chemin d'accès, depuis la racine du site, à la page en cours.
$_SERVER['USER_AGENT'] indique la signature du navigateur de l'utilisateur.
D'autres variables externes concernent les informations de session ou les cookies.
Pour une liste précise voir : http://www.php.net/manual/fr/reserved.variables.server.php
Important. Ces variables externes n'existent pas toujours cela dépend du serveur et du contexte, par exemple certains navigateurs ne transmettent pas leur signature et, dans ce cas, $_SERVER['USER_AGENT'] n'est pas présente. Afin de ne pas avoir d'erreur lors de l'exécution il est utile de tester avec la fonction PHP "isset()" l'existence de la variable à utiliser.
Comme on peut s'y attendre, ils réalisent des opérations, mais pas uniquement arithmétiques. Dans tous les cas, ils renvoient une valeur.
Les opérateurs arithmétiques, sur les bits et d'incrémentation / décrémentation renvoient un nombre, les opérateurs de comparaison et logiques donnent un booléen, l'opérateur de concaténation renvoie une chaîne de caractères et l'opérateur d'assignation peut produire tout type de valeur.
Il n'est pas utile de donner ici la liste fort longue des opérateurs et de leur rôle car cela est très bien
expliqué dans le manuel de référence :
http://www.php.net/manual/fr/language.operators.php
La lisibilité n'est pas gagnante !
Les structures de contrôle d'exécution affectent le déroulement du script. Il y en a de deux sortes :
Les instructions de contrôle permettent la création de ces structures, en voici une présentation par l'exemple.
Remarquez l'utilisation des parenthèses et, parfois, l'utilisation de blocs d'instruction {..).
Notez, dans le dernier exemple que ce qui est produit donnera la valeur des variables ($a ou $b) car à l'intérieur de guillemets la variables sont évaluées. On aurait obtenu quelque chose comme :
Le plus grand est 15
Si on doit exécuter conditionnellement plusieurs instructions, il faut les grouper dans un bloc. Voici un exemple de comptage décimal :
Les accolades sont nécessaires pour que le PHP séquence bien les instructions.
Et l'indentation (décalage des lignes) n'est là que pour faciliter la lecture.
L'instruction "if" est souvent utilisée dans des passages où l'on intercale PHP et HTML. Dans ce cas les accolades sont obligatoires.
Voici un exemple simpliste mais (on l'espère) explicite :
Le PHP est ici écrit en gras.
Plus rarement utilisée que la précédente elle évite les imbrication de "if", "elseif" pour les tests d'égalité.
L'instruction "break" sert à sortir du "switch". Si on l'avait oubliée, tous les mois auraient 31 jours !
Notez (dans "case 2") l'utilisation de l'opérateur "? :" qui évite une structure "if".
Il y en a plusieurs, pour différents usages commençons par la plus simple
Teste une condition, si elle est vraie exécute l'instruction (ou le bloc d'instructions) de la boucle et réitère le processus. Lorsque la condition est fausse, passe à l'instruction qui suit celle de la boucle.
Si la condition est fausse du début, l'instruction de boucle n'est pas exécutée. Naturellement, si on veut sortir de la boucle, il faut que cette condition devienne fausse.
Exemple, affiche les multiples de 7 inférieurs à 100 :
Si la condition de boucle ne devient jamais fausse, le programme ne se terminera pas.
En fait, le serveur dispose d'un mécanisme de protection. Si l'exécution du programme dépasse une certaine durée (fixée à la configuration du serveur), cette exécution est stoppée.
Dans tous les cas c'est un point à bien étudier pour éviter que l'utilisateur ne soit perplexe devant cette situation.
Assez rarement utilisée, cette boucle est proche de "while", voici le même exemple :
Mais ici, comme le test est fait à la fin, on est assuré que l'instruction de boucle est exécutée au moins une fois.
Cette instruction, très fréquente, est un raccourci de la boucle "while" car elle englobe, dans ses parenthèses, l'initialisation, la condition et une instruction d'itération.
Voici encore le même exemple :
C'est rigoureusement équivalent à l'exemple sur l'instruction"while" (et non pas "do-while").
Cette instruction est adaptée au parcours des tableaux, elle existe sous deux formes.
La première donne les valeurs des cases du tableau, reprenons l'exemple du tableau des mois pour en afficher la liste :
Mais si nous voulions le nom des mois et leur nombre de jours voici l'autre forme en partant de l'autre exemple
sur le tableau de mois:
On a déjà vu l'instruction "break" pour sortir de "switch", cette instruction peut aussi être utilisée dans une boucle pour la quitter prématurément.
L'instruction "continue" est utilisée dans les boucles pour ignorer la suite de l'instruction bloc de boucle en relançant un tour : soit revenir au test.
La bibliothèque interne du PHP dispose de nombreuses fonctions mais parfois il est utile d'en créer. Souvent, il a été dit que créer une fonction était intéressant pour ne pas avoir à répéter des parties de code qui devaient être exécutées à plusieurs endroits du script, mais la création de fonction a d'autres avantages.
Déclarer une fonction est assez simple : on écrit le nom que l'on veut donner à la fonction suivi de parenthèses, puis entre accolades on écrit les instructions qui composent la fonction. Là on peut mettre tout ce qui est possible dans un script PHP, y compris des déclarations.
Dans les parenthèses qui suivent le nom de la fonction, il est possible de mettre des noms de variables. Ces variables seront initialisées par les paramètres transmis lors de l'appel à la fonction et seront, bien sûr, utilisables par la fonction.
Si la fonction doit renvoyer une valeur, on indique dans le corps de la fonction, à l'endroit où son travail est terminé, l'instruction "return" suivi de l'expression de la valeur à renvoyer. Dans tous les cas, "return" termine l'exécution des instructions de la fonction. Si "return" n'est pas présente, la fonction se termine à l'accolade la fermant.
Exemple : calculer la moyenne de deux nombres.
Autre exemple : insérer dans la page HTML un passage de texte encadré avec un fond.
On remarque qu'il a deux passages PHP dans ce fragment de page. le premier définit la fonction, le second qui l'appel est intégré dans le texte (en gras dans l'exemple de code).
Cela produira :
Cet animal est un : chat noir
Les variables définies à l'intérieur d'une fonction lui sont locale, y compris ses paramètres. Ces variables n'ont aucun rapport avec celles de l'extérieur.
Le premier affichage est celui fait par la fonction, il donne : "4 14".
Le second donne les valeurs d'origine des variables soit : "3 4".
Cependant parfois on a besoin d'une variable externe dans une fonction, il est nécessaire de la définir
explicitement comme telle avec le mot "global".
(Dans l'exemple attention aux deux lignes en gras)
Le premier affichage est celui fait par la fonction, il donne : "4 8".
Le second donne : "3 8" car la valeur de $b a été changée dans la fonction.
Ce dernier exemple n'est pas à reproduire. Il faut éviter de modifier des variables globales dans une fonction car par la suite il est difficile de s'y retrouver.
Nous allons voir les principales fonctions de la bibliothèque PHP