Cours PHP
Cours PHP
1 Introduction
1.1 Définition
PHP est un langage de script HTML exécuté du côté du serveur. Il veut dire « PHP : Hypertext Preprocessor ». Sa syntaxe est largement inspirée du langage C, de Java et de Perl, avec des améliorations spécifiques. Le but du langage est d'écrire rapidement des pages HTML dynamiques.
1.2 Historique
L'origine de PHP remonte à 1995 quand Rasmus Lerdorf a créé PHP/FI, une librairie de scripts Perl utilisés pour la publication de son CV sur son site personnel. Au fur et à mesure des évolutions, la librairie a été portée en C et agrémentée de nouvelles fonctionnalités pour créer des pages dynamiques simples pour le web et accéder à quelques sources de données. PHP/FI signifie Personal Home Page/Forms Interpreter.
PHP/FI 2.0 sort en 1997, toujours développé par une seule personne. C'est le succès : 50000 sites (1% des noms de domaines) disent l'utiliser ou le supporter. Les contributeurs affluent.
PHP 3.0 sort en juin 1998, c'est la première version développée conjointement par Rasmus Lerdorf, Andi Gutmans et Zeev Suraski et entièrement réécrite (les versions précédentes étaient trop lentes pour une application commerciale). Outre les performances, PHP 3 est modulaire et extensible, permettant de lui greffer des API supplémentaires, ce qui n'a pas manqué avec le support de nombreuses bases de données, de formats et de protocoles, une syntaxe plus cohérente et un support basique de l'objet. Il a été installé sur 10% du parc mondial des serveurs web avec des dizaines de milliers de développeurs et des centaines de milliers de sites.
Le moteur de PHP 4 a été repensé afin d'en améliorer les performances pour des applications complexes et d'augmenter encore la modularité. Un nouveau moteur a vu le jour, appelé Zend Engine (contraction de Zeev et Andi). PHP 4 sort officiellement en mai 2000 et apporte des performances accrues, le supports de plusieurs serveurs web, les sessions, une sécurité accrue. C'est actuellement la dernière version stable (nous ne comptons pas les 4.1, 4.2 et 4.3).
Et PHP 5 ? Actuellement en version beta, un cycle qui peut durer
plusieurs mois, le but de PHP 5 est une amélioration des performances du moteur
Zend (Zend Engine 2), un modèle objet étendu et très proche du C++, une
compatibilité accrue avec de nouveaux standards et les anciens (RPC, XML, .NET,
...)
1.3 Utilisation pratique
– Forums et
Messageries
– Commerce
électronique
– Banque /
Comptes en ligne
– Publication
en ligne
– Moteurs
de recherche
– Tout ce que vous voulez, (sauf les jeux)
Résumons
quelques sigles que nous allons utiliser par la suite.
• HTML : Hypertext Markup Language
• PHP : People Hate Perl... Non : PHP, Hypertext PreProcessor
• SQL : Structured Query Language
1.4 Pages statiques vs pages dynamiques
Une page statique et une page écrite directement en HTML. Elle peut éventuellement incorporer du code Javascript lui donnant un semblant de 'dynamisme' mais uniquement du côté du navigateur et des données locales.
Pour des traitements plus lourds nécessitant l'accès à une base de
données, un formatage de tableau en fonction de résultats, une recherche
poussée, du graphisme, il faut passer par des pages dynamiques et par un
langage qui sera exécuté du côté du serveur : ASP sur les serveurs
Microsoft/IIS, Perl, PHP...
1.5 Scripts CGI
PHP peut être utilisé comme langage CGI. Pour rappel, un script ou
programme CGI est un programme comme un autre mais dont la sortie est dédiée à
un navigateur, par exemple un programme shell, C ou Perl qui sort du HTML. PHP
étant un langage script comme un autre on peut l'utiliser dans ce cas, mais ce
n'est pas forcément le mieux.
1.6 Pages dynamiques et PHP
PHP est un langage Server Side ou côté serveur. Lors du chargement d'une page PHP, c'est le serveur qui va lire, interpréter et exécuter le code. Puis il renvoie le résultat, généralement sous la forme de code HTML au navigateur. Ainsi le navigateur et l'utilisateur ne voient jamais le véritable code PHP exécuté. De plus le résultat étant une page web classique en HTML, pas besoin d'installer sur le client des composants spécifiques (java, ...). Il n'y a donc pas de notion de vitesse d'exécution du côté du client, mais celle du serveur est prépondérante.
1.7 Pourquoi préférer PHP à d'autres langages comme ASP ?
ASP n'est pas entièrement un langage puisque ASP veut dire Active Server
Page. ASP dispose bien entendu de ses propres API mais qui peuvent être
accessibles via un autre langage. Il s'agit d'utiliser un langage (quelconque)
pour créer des pages dynamiques. Nativement disponible avec IIS sous Windows,
il ne l'est pas par défaut avec les autres systèmes ou serveurs web comme
Apache. Il existe cependant des modules de compatibilité ASP pour Apache comme
Apache::ASP qui reprend les API ASP en les étendant et en programmation PERL.
Sous Windows, le code ASP se fait généralement en VBScript ou en Jscript. C'est
aussi possible sous Unix/Linux et Apache, mais il faut alors se tourner vers
des solutions commerciales (Sun One ASP, Instant ASP, ...). Sous
Windows ASP et VBScript sont utilisés pour l'accès aux ActiveX, composants bien pratiques mais véritables gruyères pour la sécurité. Il n'existe pas à ce jour de portage de ActiveX sur d'autres systèmes que Windows.
PHP est disponible pour toutes les plate-formes et permet de faire la même chose, sinon plus, que ASP et VBScript. N'oublions pas que PHP dispose de plus de 2700 APIs !
1.8 Ce que vous devez déjà connaître
Vous devez connaître HTML ainsi qu'un langage de programmation procédural (C par exemple). Une connaissance basique du SQL peut être nécessaire mais sera abordée.
1.9 Le nécessaire serveur
PHP ne sert pas seulement à faire des pages dynamiques. C'est un langage interprété qui au même titre que Perl, Python ou TCL est capable de lancer des scripts intéractifs ou non. On peut même utiliser PHP pour créer des interfaces graphiques (extension GTK). Le minimum nécessaire et vital pour apprendre PHP est donc l'interpréteur PHP lui-même sur un environnement supporté (Unix, Windows, Mac, ...).
Si on parle de LAMP, on voit bien la référence. Un système Linux, un serveur Web Apache, un serveur de bases de données MySQL et un interpréteur PHP. La version 4 de PHP permet de fonctionner avec IIS, et MySQL existe aussi pour Windows. On peut donc utiliser une architecture WIMP (Windows, IIS, MySQL, PHP) ou WAMP (Windows, Apache, MySQL, PHP). Ajouter PHP à IIS, c'est laisser la porte ouverte à tous les vents, on préférera donc la seconde solution.
Les distributions Linux disposent déjà du nécessaire pour l'architecture LAMP et le paramétrage est assez simple. De plus le mode « user_mod » de Apache permet à chaque utilisateur de créer son site web dans un répertoire spécifique de son répertoire personnel.
Sous Windows, c'est déjà un peu plus complexe à mettre en oeuvre
manuellement. On emploie donc des distributions toutes faites, la meilleure se
nommant EasyPHP. Les versions 1.6 et 1.7 sont les meilleures pour développer.
On peut ainsi développer son site sous Windows et le porter tel quel sur un
serveur Unix.
1.10 Le nécessaire client
Pour développer il suffit d'un simple éditeur mais il vaut mieux préférer un éditeur plus évolué supportant la coloration syntaxique et quelques fonctions évoluées. L'éditeur HAPEdit 3 est parfait pour développer en PHP. L'accès aux bases MySQL peut se faire soit depuis un navigateur (phpMyAdmin) soit depuis une interface MySQLCC ou encore DBDesigner pour la conception.
Pour les tests : un simple
navigateur respectant les standards du web.
1.11 Le respect des standards
Le W3C est l'organisme international faisant loi
dans le monde des standards du web. Il a défini une série de normes dont le
HTML, le XML, le XHTML, les CSS, etc. Pourquoi respecter un standard ? C'est la
garantie d'un bon fonctionnement et du bon affichage de manière identique de
vos pages sur
Tous les navigateurs supportant ce standard.
Avec une bonne déclaration (entête HTML) les navigateurs IE6, Mozilla 1.5, Opera 7, Galeon, Konqueror, etc, sont compatibles avec ces standards.
L'utilisation de balises propriétaires à un navigateur (blink par exemple) ou de vbscript (sous IE) est à proscrire. La dernière norme HTML valide est HTML 4.01 STRICT. XHTML qui à terme remplacera définitivement HTML est aussi bien supporté. La dernière norme CSS et la 2. Cependant dans ce cas préférez CSS-1 car seul Opera supporte CSS-2.
Prenez l'habitude quand c'est possible de tester votre site sur deux ou trois navigateurs : IE6 car c'est le plus répandu, Opera car il est extrêmement respectueux des standards et Mozilla car c'est LE challenger et probablement remplaçant à terme de IE (qui n'aura plus d'évolution de version avant LongHorn).
2 Bases :Présentation
PHP est langage très souple prenant ses sources dans divers langages
comme le C, le Perl, le C++. Il est donc possible d'avoir plusieurs styles de
scripts (programmation classique dite procédurale ou programmation objet, ou
programmation bordélique). Cette souplesse permet une très grande liberté, un
peu comme en Perl. L'inconvénient est qu'on peut très vite obtenir du code
illisible (bordélique), même si ça marche très bien. Prenez donc l'habitude de
commenter votre code, de l'indenter et de ne placer qu'une instruction par
ligne.
2.0.1 Syntaxe de base
2.1 Intégration à HTML
Une page php porte l'extension « .php ». Une page PHP peut être entièrement programmée en PHP ou mélangée
avec du code html. PHP est un langage « Embedded HTML », c'est à dire qu'il
apparaît à n'importe quel endroit de la page HTML. Pour ça on le place dans des
balises particulières : <?php et ?>. On peut aussi utiliser les
balises <script language="php"> et </script>. La première forme est préférable pour plus de simplicité
et une compatibilité XHTML. On écrit donc une page HTML dans laquelle on intègre du
code PHP.
<html>
<head>
<title>Titre</title>
</head>
<body>
<?php
echo
"Hello World !";
?>
</body>
</html>
Le code HTML généré sera le suivant
<html>
<head>
<title>Titre</title>
</head>
<body>
Hello
World !
</body>
</html>
L'utilisation de balises pour l'intégration de code dans une page web est très souple et permet de jongler facilement avec du code PHP et du code HTML :
<?php
if ( expression ) {
?>
<strong>Ceci est vrai.</strong>
<?php
} else {
?>
<strong>Ceci
est faux.</strong>
<?php
}
?>
Comme en C une instruction se termine par un point-virgule « ; ». Notez
que la balise fermante ?> implique la fin d'une instruction.
<?php
echo "Ceci est un test";
?>
<?php echo "Ceci est un test" ?>
2.3 Bloc d'instructions
Un bloc d'instructions se place entre accolades { et }. Un bloc
d'instructions peut contenir du code de n'importe quelle longueur et est
considéré dans le reste du code comme une instruction unique. Si c'est une
expression (qui a une valeur) on peut donc assigner le bloc, faire des calculs,
...
2.4 Commentaires
Les commentaires s'utilisent comme en C et en C++ avec /* .. */ et //. Notez qu'une balise fermante
ferme le commentaire en cours.
<?php
/* echo "salut !" */
//
Commentaire
sur cette ligne
?>
3 Travailler avec des variables
3.1 Déclarer une variable
Une variable commence par un dollar « $ » suivi d'un nom de variable. Les variables ne sont pas typées au moment de leur création. Attention PHP est sensible à la casse : var et Var ne sont pas les mêmes variables ! Voici les règles à respecter :
Une variable peut commencer par une lettre
Une variable peut commencer par un souligné (underscore) « _ »
Une variable ne doit pas commencer par un chiffre.
// Déclaration et règles $var=1; // $var est à 1 $Var=2; // $ Var est à 2 $_toto='Salut'; // Ok
$3petitscochons=5; // Invalide : commence par
un chiffre
Leur type dépend de leur valeur et de leur contexte d'utilisation. Mais
on peut forcer (cast) ponctuellement une variable à un type de données, ce qui
s'appelle le transtypage. De même comme le type de variable peut changer en
fonction de son utilisation ou du contexte, PHP effectue automatiquement un
transtypage, ce qui peut parfois fournir des résultats surprenants. On affecte
une valeur à une variable avec le signe égal « = » avec ou sans espace avant ou
après.
// Déclaration et transtypage $var='2'; // Une chaîne 2
$var+=1; // $var est maintenant un entier 3
$var=$var+0.3; // $var est maintenant un réel de type
double 3.3 $var=5 + "3 petits cochons"; //
$var est un entier qui vaut 8
Par défaut les variables sont assignées par valeur : la valeur assignée à la variable est recopiée dans la variable. PHP peut aussi travailler par référence. Une variable peut donc référencer une autre variable. On dit alors que la variable devient un alias, ou pointe sur une autre variable. On assigne par référence en utilisant le signe « & » devant la variable assignée
$var=2;
$ref=&$var; // $ref devient une référence de $var echo
$ref; // affiche 2
$var=3;
echo $ref; //
affiche 3
$ref=4;
echo $var; // affiche 4
Attention à la valeur constante NULL insensible à la casse. Affecter une
valeur NULL à une variable signifie ne pas puis affecter de valeur.
3.2 Portée des variables
La portée d'une variable dépend du contexte. Une variable déclarée dans
un script et hors d'une fonction est globale mais par défaut sa portée est
limitée au script courant, ainsi qu'au code éventuellement inclus (include,
require) et n'est pas accessible dans les fonctions ou d'autres scripts.
function foo() {
echo $a; // c'est une variable locale à la fonction : n'affiche rien
}
Pour
accéder à une variable globale dans une fonction, il faut utiliser le mot-clé global.
$a=1; // globale par défaut
$b=2; // idem
function foo() {
global $a,$b; // on récupère les variables globales $b=$a+$b;
}
echo $b; //
affiche 3
PHP accepte les variables statiques. Comme en C une variable statique ne
perd pas sa valeur quand on sort d'une fonction.
function test_static() {
static $a=0;
echo $a; // +1 à chaque passage dans la fonction $a++;
}
3.3 Variables prédéfinies
PHP dispose d'un grand nombre de variables prédéfinies. Ces variables
sont généralement de type scalaires ou des tableaux. Elles sont souvent de type
superglobales, c'est à dire accessible depuis n'importe où sans notion de
portée. Voici quelques tableaux prédéfinis (voir au point Tableaux pour
comprendre leur utilisation).
• $_GLOBALS : tableau des variables globales. La clé est le nom de la variable.
• $_SERVER : variables fournies par le serveur web, par exemple 'SERVER_NAME'
• $_GET : variables fournies par HTTP par la méthode GET (formulaires)
• $_POST : idem mais pour la méthode POST
• $_COOKIE : les variables fournies par un cookie
• $_FILES : variables sur le téléchargement d'un fichier (upload)
• $_ENV : accès aux variables d'environnement du serveur
• $_SESSION : les variables de session (voir cours sur les sessions)
Note :
Avant la version 4.2.0 de PHP, les variables passées par la méthode GET, POST (formulaires et URL) et ainsi de suite étaient automatiquement créées dans le script de destination.
http://www.toto.fr/page.php?action=enr créait automatiquement la variable $action qui prenait la valeur 'enr'.
<input type="hidden" name="cache" value="toto"> créait dans la page cible (action du form) une variable $cache de valeur "toto".
Ce n'est plus automatique depuis PHP 4.2.0. Il faut passer par les tableaux superglobaux ci-dessus.On peut cependant passer outre en modifiant la valeur register_globals dans le php.ini.
Commentaires
Enregistrer un commentaire