Académique Documents
Professionnel Documents
Culture Documents
●
Animateur
– Jean-Marc Vanel
– Consultant Logiciels libres, Java & XML
– Email: mailto://jmvanel@free.fr
– Site: http://jmvanel.free.fr/
●
Déroulement
– Horaires
– Déjeuner
– Pauses
– Questions
Les bases PHP : le menu
• Historique, Points forts, Principe
• Syntaxe: Variables, tableaux, constantes, Opérateurs
• Les blocs de contrôle: if, boucles while, for, foreach, switch
• Les fonctions, PHP Objet
• Formulaires
• Base de Données MySql
• Sessions, Cookies
• Images
• Upload de fichier
• Les templates
• Configuration PHP: php.ini
• Resources – Vers la version 5
PHP – C'est....
Développé en C
Soutenu par la Apache Fundation Software
("édité" par Zend technologies http://www.zend.com)
Site officiel http://www.php.net
Ressources en français:
http://www.phpindex.com
http://dev.nexen.net/
Ressources en anglais
http://www.phpbuilder.com
http://www.allhtml.com
PHP – Historique
7 000 000 de noms de domaine aujourd'hui
Sources netcraft : http://www.php.net/usage.php
PHP – Nouveautés V4
Un nouveau moteur...
Performances accrues
Des outils supplémentaires
Compiler, Caches et Optimiseurs
(parfois payants...)
Meilleur compatibilité
Un module ISAPI pour IIS
Nouvelles fonctionnalités
Prise en charge native des sessions
Nouveaux type de boucles
...
PHP – Points forts
Pourquoi Php ?
Performances élevées.
Multibase (MySQL, PostgreSQL, mSQL, Oracle, dbm,
Filepro, Hyperware, Informix, Interbase, Sybase, ODBC,
JDBC, Oracle ... )
Bibliothèques de fonctions, de scripts
conçu pour le Web
Simplicité d'apprentissage
Portabilité
Gratuité, Open Source
PHP – Principe
Principe de fonctionnement
Traitement coté serveur
Interprète le code PHP
(généralement génère une page
HTML)
Page PHP ?
Demande Serveur
PHP
de page http Requête
Résultat du BD?
traitement Résultat
Page
requête
résultante
Navigateur
Base de données
Schéma simplifié du déroulement d’une requête
mettant en jeu une page PHP
PHP – Principe, conclusions
Visibilité
Seul le code HTML est disponible coté utilisateur
<? Page PHP (sur serveur)
echo ‘<p>’;
echo ‘bonjour’;
Page générée
echo ‘</p>’;
et transmise
?> <p>bonjour</p>
Résultat dans
le navigateur
bonjour
Client
PHP –Syntaxe
Généralités
Très proche du C, C++, Java
Directement intégré dans les pages HTML
Entre les balises <?php Et ?>
Lignes d’instructions terminées par ‘;’
Simplicité de l’écriture
Typage faible
Pas de forte structuration du code
Allocation / libération de mémoire automatique
! Seul le développeur est garant de la
lisibilité du code
PHP –Structure type
Installer Php et créer la page « hello the world »
PHP – Variables, concepts
Variables
•Précédée d’un ‘$’
•Affectation avec '='
•Pas de « déclaration » (automatique)
•Faiblement typé
Portée
Script
Locale
Globale
Superglobale
Constantes
PHP – Variables, utilisation
Utilisation
Numériques Chaînes Tableaux
<? <? <?
$a = 2; $chaine = ‘Bonjour’; $tableau[0] = 10;
//(a vaut 2) $qui = ‘ Aston’; $tableau[1] = 20;
Une variable peut contenir une liste de valeur, qui sont alors
stockées sous forme de tableau.
Une variable devient tableau dès lors que l'on utilise le mot clé
array pour définir son contenu:
$tab=array( 45, 'toto');
Exemple : <?
define('TAUX_EURO', 6.55957);
Concept
•Utiliser une variable dont le nom est le contenu d’une variable
<?
$NomVariable = ‘Prenom’;
$$NomVariable = ‘Pierre’;
echo ‘bonjour ’.$Prenom;
// affiche ‘Bonjour Pierre’
?>
! Attention à la lisibilité du code lors de
l'emploi de cette méthode
PHP – Opérateurs
Arithmétiques
+ Addition
Soustraction
* Multiplication
/ Division
% Modulo
Affectation combinée
+= $a+=$b $a = $a+$b
= $a=$b $a=$a$b
*= $a*=$b $a=$a*$b
/= $a/=$b $a=$a/$b
%= $a%=$b $a=$a%$b
.= $a.=$b $a=$a.$b Concaténation
PHP – Opérateurs (2)
Incrémentation /
décrémentation
++$a $a++
$a $a
Négation
$a = true;
$b = !$a; ($b == false)
Référence
$a = &$b;
$a = 5;
$b a pour valeur 5
PHP – Opérateurs (3)
Comparaison
== Egal
!= Différent
<> Différent
< Inférieur
<= Inférieur ou égal
> Supérieur
>= Supérieur ou égal
Logiques! Les opérateurs sont court circuit
&& et à gauche
|| ou
and et (priorité inférieure)
or ou (priorité inférieure)
PHP – Opérateurs (4)
& et binaire
| ou binaire
~ non binaire
^ ou exclusif binaire
<< décalage à gauche
>> décalage à droite
Il est très rare d'avoir recours à ces opérateurs
I
dans un contexte classique
PHP – Les blocs (if)
Test if
If ($condition){
...Traitement si vrai
}else{
...Traitement si faux
}
Exemple
If ($UtilisateurConnu){
echo «Bienvenue $Utilisateur »;
...Contenu de la page...
}else{
header ("location: http://monsite.fr/login.php");
exit;
}
PHP – Boucle (while)
Boucle while
while ($condition){
...Traitement
}
Exemple ! Attention aux conditions de boucle
$i = 0;
(boucles infinies)
$NotFinished = true;
while ($NotFinished){
if (!isset ($Tableau[$i])){
$NotFinished = false;
}else{
$Tableau[$i] = $Tableau[$i]*2;
$i++;
} Php aborde les pages trop longue à exécuter
}I
(paramétrage du fichier ini)
PHP – Boucle (for)
Boucle for
for (départ; condition; passage){
Traitement unitaire
}
Exemple
function TableMulti ($TableDe){
for ($i=0; $i<=10; $i++){
echo 'TableDe [' . $i . ']=' . $TableDe[$i] . "\n";
}
}
PHP – Boucle (foreach)
Boucle foreach
Idéal pour parcourir des éléments de type tableau.
foreach ($Tableau as $Clef=>$ElementUnitaire){
// $Clef référence l'indice du tableau
// $ElementUnitaire référence la valeur de $Tableau[$Clef]
}
$Clef=> est facultatif
Exemple
function ShowTableau ($MonTableau){
foreach ($MonTableau as $Key=>$Elem){
echo 'Clef: '.$Key.' Valeur: '.$Elem."<br/>\n";
}
}
PHP - Structure de contrôle (switch)
Exemple : switch($var){
case 'toto': echo "c'est toto !"; break;
case 'marc': echo "marc est là"; break;
default:
echo "connais pas";
}
PHP – Les fonctions
Fonctions
•Mot clef « function »
•Ne spécifie ni le type de retour, ni les types en entrée
<?
function Carre ($nombre=10) Possibilité de donner un
Paramètre par défaut
{ De la droite vers la gauche
return $nombre*$nombre;
}
echo "Le carré de 2 est : ".Carre(2);
?>
Cet exemple affiche « le carré de 2 est :4 »
PHP – « Php Objet »
Déclaration
•Mot clef « class »
•Pas de niveau d’accès, tout est « public ».
•Les variables de classes (propriétés) sont déclarées par « var »
•Mot clef « $this »
•Constructeur: méthode du même nom que la classe
<?
class Carre {
var $nombre;
function Execute () {
echo « <br> ».$this>nombre*$this>nombre;
}
}
?>
! Il est obligatoire de faire référence aux méthodes
et propriétés de classe via '$this'
PHP – Objets (2)
Utilisation
•Mot clef « new »
•Pas de « delete » !
•Référence aux propriétés / méthodes par « > »
<?
$ObjCarre = new Carre();
$ObjCarre>nombre = 10;
$ObjCarre>Execute (); // affiche 100.
$AutreCarre = $ObjCarre; // ici copie
$AutreCarre>nombre = 2;
$AutreCarre>Execute (); // affiche 4.
$ObjCarre>Execute (); // Affiche 100.
?>
! Les objets sont implicitements passés en copie.
Il faut forcer un passage par référence si besoin.
PHP – Objets Héritage
Héritage
•Mot clef « extends »
Personne
•Pas d’héritage multiple
•Possibilité de surcharge
maFonction()
<?
class Chef extends Personne {
var $secretaire; // Personne
function maFonction () {
Personne::maFonction();
echo "prérogatives en plus";
}
}
?> Chef
secretaire
PHP – Formulaires
Avantages
Permettre à l'utilisateur de saisir des données libres
Interactivité
Mise en oeuvre facile
Développement Compatibilité
PHP – Formulaires (2)
Page « interface »
Formulaire HTML classique
Les variables reçues porteront le nom des champs
Exemple
Page « réception »
Variables automatiquement globales
si register_globals = true; (php.ini)
Dans les variables spécifiques Php
HTTP_GET_VARS, HTTP_POST_VARS
( _GET, _POST depuis Php 4.1.0 )
Le « Php group » recommande aujourd'hui l'emploi
I de _GET et _POST, puis de définir register_globals à false
PHP – Formulaires (4)
Objectifs :
Objectifs :
php02_b.php
php02_a.php
PHP – Dialogue application<-> serveur web
Pourquoi ?
• Stockage permanent des saisies formulaire
• piocher dans de gros volumes de données Php
• intégration avec systèmes existants
●
structuration
●
persistence
●
intégrité SGBD
●
sécurité
●
requêtes
Support
• Adabas, Dbase, DBM, ICAP, Informix, SQL serveur, MSQL,
MySQL, ODBC, Oracle, PostgreSQL, Sybase.
• Support natif de MySQL
PHP – BD, Utilisation
Connexion
<?
$IdConnexion = mysql_connect (« host », « user », « password »);
?>
$IdConnexion pourra être réutilisé par la suite lors des requêtes,
c'est un identifiant de connexion
En règle générale, les fonctions de connexion
I
aux bases de données sont de la forme
BD_connect ();
PHP – BD, Utilisation (2)
Interrogation
<?
$IdRequete = mysql_db_query (‘test’, ‘select * from employe’);
// Cette fonction est obsolète
// ou mieux:
mysql_select_db (‘test’);
$IdRequete = mysql_query (‘select * from employe’);
?>
$IdRequete est un identifiant de requête,
il poura être utilisé pour le parcours des résultats.
! Les « select * », bien que pratiques, sont dangereux
à utiliser. (casse et ordre des champs, performances)
PHP – BD, Utilisation (3)
Lecture et retour de l'enregistrement
Parcours Pointe sur l'enregistrement suivant
• mysql_fetch_assoc (); Retourne false en fin de parcours
Un tableau associatif avec le nom des champs
• mysql_fetch_row ();
Un tableau indicé dans l'ordre des champs
• mysql_fetch_object();
Un objet dont les prop. sont les noms des champs
Exemple
while ($row = mysql_fetch_object ($IdRequete)) {
echo $row>champ1;
}
while ($row = mysql_fetch_row ($IdRequete)) {
echo $row[0];
}
while ($row = mysql_fetch_assoc ($IdRequete)) {
echo $row["champ1"];
}
PHP – MySql
Restrictions
•Non respect des clefs étrangères
•Requêtes imbriquées impossibles
•Gestion des droits limité
Fonctions utiles
DATE_FORMAT – formatage de la date
SELECT DATE_FORMAT("%d%m%Y") la_date FROM maBase;
Cryptage d'une information (e.g. : pour stocker les mots de passe)
PASSWORD ("chaîne à crypter");
PHP – Sessions
Avantages
•Conserver des données d’une page à l’autre
•Très simple d’utilisation
Pour placer un objet en session, il doit être déclaré avant son démarrage
Les modifications aux variables de session sont enregistrées automatiquement
Fonctions...
session_start ()
démarrage de la session
session_register ()
enregistrement d'une variable en session
session_unregister ()
déréférencement d'une variable de session
session_destroy ()
détruit la session de l'utilisateur actuel
PHP – Sessions, exemple
Page1.php
<?
session_start (); // crée la session si inexistante
$valeur = 10;
session_register ("valeur"); // stocke $valeur dans la session
$valeur = 20;
?>
Page2.php
<?
session_start ();
echo $valeur; //affiche 20.
?>
PHP – Cookie
Avantages
•Placer des données (non sensibles) côté client
•Cibler les attentes de l'internaute
Fonctions...
Setcookie («nom_cookie », valeur_cookie);
Définition du cookie et de sa valeur
$HTTP_COOKIE_VARS[«nom_cookie »]
Permet de tester la valeur du cookie.
Pour supprimer un cookie, faire un setcookie ("nom_cookie") en
ne spécifiant aucune valeur.
PHP – Cookies, exemple
<?
$Last = false;
if (isset ($HTTP_COOKIE_VARS['date_connexion'])){
$Last = $HTTP_COOKIE_VARS['date_connexion'];
}
setcookie ('date_connexion', date ("dmY H:m:s"));
if ($Last)
echo "Votre dernière connexion: ".$Last;
?>
PHP - Les cookies
La fonction setcookie :
int setcookie ( string name [, string value [, int expire
[, string path [, string domain [, int secure]]]]])
Objectifs :
Ecrire une page PHP de saisie de login/mot de passe, qui vérifie la
validité de la saisie. Si le login est bon, créer un cookie contenant un
nombre indiquant que l'utilisateur est bien identifié et une autre
contenant le login. Faire une deuxième page qui vérifie la présence des
cookies : elle affichera alors un message avec le login si c'est ok, ou
redirigera vers la page d'identification le cas échéant.
Essayer avec des cookies de session (sans date de validité) et des
cookies normaux.
php03_b.php
php03_a.php
PHP – Images, rappels
Les formats...
•JPEG – Idéal pour les images complexes (photographie)
•GIF – Idéal pour les images simples (graphes, texte, ...)
Le format gif est payant.
(les logiciels qui génèrent du gif doivent payer une licence)
•PNG – « Amélioration » du format gif, gratuit.
Pas de perte de données.
PHP – Images, génération
Génération en 4 étapes
1 – Création d'une zone de dessin
ImageCreate ($largeur_px, $hauteur_px)
ImageCreateFromPNG/JPEG/GIF ($FileName)
2 – Dessin (textes / formes) dans la zone.
Allocation des couleurs : ImageColorAllocate ($img, $R, $V, $B)
ImageLine ($img, $startx, $starty, $width, $height, $color)
ImageString ($img, $police /*entier*/, $startx, $starty, $txt, $color)
ImageRectangle ($img, $x, $y, $long, $haut, $color)
ImageFilledRectangle ($img, $x, $y, $long, $haut, $color)
3 – Génération de l'image
ImagePNG/JPEG/GIF($img, [$filename])
4 – Libération des ressources.
ImageDestroy ($img)
PHP – Upload de fichier
Coté client
Une zone fichier dans le formulaire.
<input type='file' name='fichier'>
Un formulaire « enctype/multipart »
<form enctype='multipart/form-data' method='post'>
Coté serveur
if (is_uploaded_file ($fichier)){//réussite de l'upload ?
move_uploaded_file ($fichier,'./destination/'.$nom_fichier);
//déplacement de l'upload
}
Il est nécessaire de donner à Php les droits
I
d'écriture à « destination ».
PHP – Les templates
Objectif
Dissocier les traitements de la présentation.
Principe
Page Php Fichier
Traitement
préparation template
des données Code HTML
Objet template Rapprochement
des donneés
Résultat
PHP – Les templates (2)
Avantages
Travail avec des graphistes
Possibilité de modifier l'aspect de l'application sans l'endommager
Possibilité de profiter des outils de présentation
Quelques noms
PhpLib
Xtemplate
FastTemplate
Phtemplate
Modelixe (modelixe.phpedit.com)
Smarty (smarty.php.net)
Solutions évoluées
PHP – Les templates (3)
Solutions évoluées
Cache de templates
Cache de données
« Language » de programmation (conditions, boucles, ...)
Traçage des données, déboggage
PHP – Les templates (4)
Exemple standard
Page.php
<?php
$tplObj = new Template();
$tplObj>assign («Variable », « Test » );
$tplObj>display («fichier_tpl.tpl » );
?>
Fichier_tpl.tpl
Page résultante <HTML>
<HTML> {$Variable}
Test </HTML>
</HTML>
PHP – Php.ini
Role
Il est possible de paramétrer de nombreux aspect de Php
au travers du fichier php.ini
Paramètres
Magic_quotes_gpc (on) Ajout automatique de slashes devant
les caractères spéciaux Sql
short_open_tag (on) Permet l'emploi de <? au même titre
que <?php
output_buffering (4096) Permet de bufferiser la sortie Php.
Une sortie bufferisée permet de définir
des informations d'en tête après avoir écrit
des informations dans le corps.
PHP – Php.ini (2)
Paramètres... suite
max_execution_time (30)
Temps maximum d'exécution autorisé pour une page.
Passé ce délais, le script est abordé.
memory_limit (8M)
Ressource mémoire maximale pour un script donné.
error_reporting
Les types d'erreurs a signaler.
display_errors
Faut il afficher les messages d'erreur ?
register_globals (off >= 4.2.0 on <= 4.1.0)
s'il faut déclarer automatiquement les variables globales GPC
PHP – Php.ini (3)
Paramètres... et fin
include_path
les chemins d'inclusion à parcourir.
file_uploads (on)
Permission d'uploader des fichiers.
upload_max_filesize (2M)
Taille macimale des fichiers uploadés.
session.save_path
Chemin où sauvegarder les fichiers de session.
session.autostart (off)
démarrage automatique des sessions
mysql.allow_persistent (1)
Autorisation de créer des connexions persistentes.
PHP – >= 4.1.0
La version 4.1.0 de Php intègre plusieurs variables
implicitement globales (destinées à remplacer les variables
désormais obsolètes $HTTP_X_VARS)
_SESSION (variables de session)
_GET (variables get)
_POST (variables post)
_REQUEST (rassemblement de post + get + cookie)
_COOKIE (données provenant des cookies)
_SERVER (contient les variables serveur (ex: REMOTE_ADDR))
_ENV (variables d'environnement)
Sites sur PHP
• www.php.net : le site officiel de php. Très utile pour la
documentation en ligne (en anglais, français…)
• www.zend.com : le site de la société à l'origine de la
refonte du moteur de PHP4.
• www.phpinfo.net : site d'information avec de
nombreux tutoriaux/scripts et un forum très actif
(français)
• www.phpindex.com : autre site d'information
(français)
• www.phpbuilder.com : site d'information avec de
nombreux tutoriaux et scripts (anglais)
• www.allhtml.com: portail dédié aux webmasters
traitant tout les langages : HTML, PHP, javascript etc…
(français)
• dev.nexen.net : manuels en français PHP et MySQL
PHP – Vers la version 5
La version 5 de Php, en cours d'élaboration,
sera basé sur la ZendEngine 2 et verra naitre nombres d'évolutions.
• Support plus avancé de l'objet.
• Constructeurs / Destructeur
• Passage par référence automatique des objets
• Différentiation de la casse (systématique)
• Gestion des exceptions