Cours PHP


Cours PHP


Versions 4.x et 5.x

 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

      MySQL : serveur de base de données et les outils pour y accéder

      LAMP : Linux – Apache – MySQL – PHP, le quatuor gagnant des serveurs web.





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

}

 ?>


2.2 Séparateur d'instructions


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.


$a=1; // globale par défaut

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