Qu'est-ce que PHP ? Annie Danzart
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Sites web dynamiques avec PHP
Qu'est-ce que PHP ?
Annie Danzart
Annie.Danzart@enst.fr
http://www.infres.enst.fr/~danzart/php/
http://www.infres.enst.fr/~danzart/php/exemples/
1Plan
• Historique
• Fonctionnement
• Création de Formulaires
• Script php
• Manipulation de fichiers
• Variables, opérateurs
• Manipulation d’Images
• Tableaux
• Utilisation de Cookies
• Fonctions
• Les Sessions
• Conditionnelles, boucles
• Variables d’environnement
• Les Objets
• Envoi de Mail
• Fichiers inclus
• Téléchargement de fichiers
2Qu'est-ce que PHP ?
• 1994 : Rasmus Lerdorf, Personnal Home Pages
Pre Hypertext Processor
• Langage de scripting traité par le serveur, orienté web
• Module mod_php d'Apache
• Gratuit, libre de droits (license GNU GPL)
• Nombreuses extensions (sgbd, ldap, gif, pdf, smtp, …)
• Syntaxe proche de celle de C, Java, Perl
• Comparable à ASP, asp2php
• Extensible
• Des milliers de sites de par le monde
• Versions 3, 4, 5, 6 ?
3Comment ça marche ? affichage sans serveur
file:///infres.enst.fr/~danzart/exemple.html
Poste client
firefox
Javascript
3
Le navigateur affiche les pages html
1 2
Serveur de fichiers Il est capable d’interpréter des scripts
perso.enst.fr javascript
~danzart/public_html/exemple.html
4Comment ça marche ? utilisation d’un serveur
http://www.infres.enst.fr/~danzart/exemple.html
Poste client Serveur Apache
firefox www.infres.enst.fr
1
httpd
4
2
Serveur de fichiers 3
perso.enst.fr
Le serveur reçoit la requête
et la traite en envoyant au client
la page demandée
~danzart/public_html/exemple.html
5Comment ça marche ? interprétation d’un script
http://www.infres.enst.fr/~danzart/exemple.php
Poste client Serveur Apache
firefox www.infres.enst.fr
1
4 httpd
5 mod_php5
2 3
Serveur de fichiers Le serveur passe le fichier
perso.enst.fr au module php avant de le
retourner au client
~danzart/public_html/exemple.php
6Comment ça marche ? Les bases de données
http://www.infres.enst.fr/~danzart/exemple2.php
Poste client Serveur Apache
firefox www.infres.enst.fr
1
47 httpd
8 mod_php5
5 6
2 3
Serveur de fichiers Serveur Mysql
perso.enst.fr
mysql.infres.enst.fr
mysqld
bases
~danzart/public_html/exemple2.php
7Les scripts, les variables
– Page html, extension du fichier
- Formulation des scripts
– Environnement, résultat
- !Variables, types des variables, constantes
Page php
ü Une page html
ü Des scripts php.
ü L’ensemble des scripts d’une page utilise le même contexte
ü Chaque script peut générer du code html qui s’intègre à sa place
üL’extension de la page doit être php, ou php3, phtml, php4, php5
sinon le serveur ne sait pas qu’il doit interpréter des scripts
8Les scripts, les variables
– Page html, extension du fichier
- Formulation des scripts
– Environnement, résultat
-
Variables, types des variables, constantes
Ecriture la plus standard
Encore très utilisée.
…
A la Javascript …
Compatible avec ASP
Ecriture raccourcie, pas toujours
correctement interprétée
9Les scripts, les variables
– Page html, extension du fichier
- Formulation des scripts
– Environnement, résultat
-
Variables, types des variables, constantes
!
Bienvenue!
!
!
Exemple : http://www.infres.enst.fr/~danzart/
!
Bonjour !
Remarque : la fonction date :
! http://www.infres.enst.fr/~danzart/php/
Il est phpplus.php%23dates
!
!
!
10Les scripts, les variables
– Page html, extension du fichier
- Formulation des scripts
– Environnement, résultat
-
Variables, types de variables, constantes
üTypes de base: entiers, réels, chaînes de caractères
üTableaux, tableaux associatifs
üObjets
üLes noms de variables commencent par le caractère $
üphp est sensible à la casse
üUn nom peut commencer par une lettre ou un _
üIl peut comporter des caractères, des chiffres et _
üLes variables ne sont pas typées, n’ont pas besoin d’être déclarées
üElles ont une valeur par défaut qui dépend du contexte d’utilisation
11Les scripts, les variables – Page html, extension du fichier - Formulation des scripts – Environnement, résultat - Constantes, variables, types de variables ! Bienvenue! ! ! Exemple: http://www.infres.enst.fr/ ! ! - insertion de balises html ! - échappement de caractères 12
Les variables
– Affectation d’une valeur
- Tests sur les variables
– Opérateurs arithmétiques, logiques
- Référence, déréférencement
$chaine = "0"; // chaîne !
"0" (ASCII 48)! Simple et double quote
$nombre = 0;! Chaîne dynamique
$nombre++; // nombre 1 !
(entier)! $val = 'Rusti';!
$nombre+=1; // entier (2)! echo "Hello $val"; // Hello
$nombre = $nombre + 1.3; ! Rusti!
// réel (3.3)! echo 'Hello $val'; !
$nombre = 5 + "3 petits // Hello $val!
cochons"; ! !
// entier (8 !) effet de bord! Exemple:
$nombre = (int) "3 petits http://www.infres.enst.fr/~danzart/php/
cochons"; ! exemples/variables_test.php
// 3 : conversion en entier!
!
13
!Les variables
– Affectation d’une valeur
- Tests sur les variables
– Opérateurs arithmétiques, logiques
- Référence, déréférencement
isset($a): teste si la variable est définie. (0=non, 1=oui)
!
unset($a): supprime la variable et désalloue la mémoire utilisée
!
gettype($a):retourne le type de la variable
➞string, integer, double, array, object!
➞string si la variable n'est pas définie
is_double, is_string, is_int, is_float,is_object :!
testent le type de la variable!
14Les variables
– Affectation d’une valeur
- Tests sur les variables
– Opérateurs arithmétiques, logiques
- Référence, déréférencement
Arithmétiques! Concaténation!
$a + $b - $c !! $chaine="votre nom est ".$val;!
$a * $b / $c !! !
$a % $b !! Logiques!
$a++ !Incrément de 1
not, !, &&, ⎥⎥, AND, XOR, OR!
$b-- !Décrément de 1
!
rque : précédence de or sur ⎥⎥!
! $a = foo() ⎥⎥ bar() or die();!
Assignation de valeur!
=, +=, -=, *=, /=, %=, .=!
Binaires bitwise!
&, ⎥, ^, ~, >>,Les variables
– Affectation d’une valeur
- Tests sur les variables
– Opérateurs arithmétiques, logiques
- Référence, déréférencement
!
!Bienvenue!
!! Création de variables
! dynamiques dont on neLes tableaux
– Tableaux, tableaux dynamiques
- Fonctions sur les tableaux
– Parcours
- Tableaux associatifs
$fruits[0]= "pomme";! A priori, les indices commencent à 0.
$fruits[1]= "banane";! Pas besoin de déclarer la dimension ni le type
! des valeurs.
$fruits[] = "orange"; ! Si on ne donne pas d’indice, l’indice pris en
// équivaut a! compte sera celui qui suit la valeur la plus
haute (0 si rien n’a encore été mis).
$fruits[2]= "orange"!
L’initialisation peut se faire « en bloc », en
! précisant ou non les indices.
$fruits= array(0=> "pomme",
1=>"banane",2=> "orange" );!
Les tableaux dynamiques sont très utiles lors
! de l’utilisation de champs de type
$fruits= array( "pomme", « checkbox » dans un formulaire.
"banane", "orange" );! Exemple : http://www.infres.enst.fr/~danzart/php/
! exemples/tableaux_test.php
!
17Les tableaux
– Tableaux, tableaux dynamiques
- Fonctions sur les tableaux
– Parcours
- Tableaux associatifs
sizeof($t) = !count($t) ! ➞ Taille d’un tableau
is_array($t) !! ➞ Est-ce un tableau ?
reset($t) end($t) !current($t) !➞ Positionnement dans un tableau :
next($t) !prev($t)! représenté par une liste de doublets
! (indice,valeur)
!
sort, rsort, ksort, krsort, ➞ Tri ascendant, descendant sur la valeur,
sur la clé, avec une fonction utilisateur
usort!
shuffle($t)! ➞ Mélange aléatoire
max($t) !min($t)! ➞ Calcul des valeurs extrêmes
!
➞ Applique une fonction à toutes les valeurs
arraywalk($t,"nomfonction")!
d’un tableau
!
!
18Les tableaux
– Tableaux, tableaux dynamiques
- Fonctions sur les tableaux
– Parcours
- Tableaux associatifs
$t = array("I","N","F","3","4","7");! L’ajout de "\n" dans l’affichage
sort($t);! introduit un saut à la ligne dans le
for ($i=0;$iLes tableaux
– Tableaux, tableaux dynamiques
- Fonctions sur les tableaux
– Parcours
- Tableaux associatifs
$mois["Janvier"]= 1;! Les indices du tableau sont alors
$mois["Février"]= 2;! des chaînes de caractères qui
$mois[] = ! pourront être traitées en tant que
array("Janvier"=>1,"Février"=>2, telles.
"Mars"=>3);!
! L’emploi de la fonction each
while (list($cle,$val) = each($mois))! s’avère importante pour parcourir
echo " No de $cle : $val ";! les tableaux associatifs.
!
On peut aussi utiliser la boucle
foreach ($mois as $cle => $val)! foreach.
echo " No de $cle : $val ";!
!
Exemple:
key($t):index de l'élément courant du tableau
http://www.infres.enst.fr/~danzart/
uasort($t,"f_comp"): tri à l’aide d’une fonction php/exemples/
en gardant les indices associés
tableaux_associatifs_test.php
! 20Les instructions
– Instructions conditionnelles
- Booléens
- Boucles
– foreach
- Ruptures de séquence
if ($a > $b) {! $jour=date("l");!
echo "a supérieur à b";! $mois=date("F");!
} elseif ($a == $b) {! switch ($mois) {!
echo "a égal à b";! case "January" : … ;break;
} else {! case "February": … ;break; !
echo "a inférieur à b";! . . . .!
}! case "November": … ;break;
case "December": … ;break;}
!
printf(date(" Y ")); !
if ($a > $b):!
echo "a supérieur à b";! !
elseif ($a == $b) :! switch ($mois)!
echo "a égal à b";! case "January" : … ;break;!
else :! . . . .!
echo "a inférieur à b";! case "December": … ;break;!
endif! endswitch!
! 21Les instructions
– Instructions conditionnelles
- Booléens
- Boucles
– foreach
- Ruptures de séquence
Opérateurs
:
de comparaison entre expressions : ==, !=, , =!
!
Logiques : not, !, &&, ⎥⎥, AND, XOR, OR!
!
Valeurs logiques par défaut:
Entier
0 è false !≠0 è true!
Réel
0.0 è false! ≠0.0 è true!
Chaîne de caractères
"" è false! ≠ "" è true!
Tableau ou objet
Null è false! ≠ Null è true!
22Les instructions
– Instructions conditionnelles
- Booléens
- Boucles
– foreach
- Ruptures de séquence
!
endwhile;!
?>
?>!
23Les instructions
– Instructions conditionnelles
- Booléens
- Boucles
– foreach
- Ruptures de séquence
! }!
! ?>!
est équivalent à :
est équivalent à :
! ?>! 24Les instructions
– Instructions conditionnelles
- Booléens
- Boucles
– foreach
- Ruptures de séquence
continue :!
arrêter l'itération
passer à la suivante
!
break [n] :!
arrêter l'itération courante
sortir de la boucle courante
(ou des n boucles imbriquées)
!
exit() :!
interruption inconditionnelle du script!
!
A utiliser avec modération !!!
25Les fonctions
– Déclaration, valeur de retour
- Variables locales/globales/statiques
– Transmission des arguments
- Transmission par référence
! 26Les fonctions
– Déclaration, valeur de retour
- Variables locales/globales/statiques
– Transmission des arguments
- Transmission par référence
Variables locales:
N’existent que dans le corps de la fonction
Variables globales:
Exemple: http://www.infres.enst.fr/~danzart/
php/exemples/fonctions_variables_test.php
Précédées du mot clé global!
Établissent un lien direct avec des variables
déclarées à l’extérieur de la fonction
Variables statiques:
Précédées du mot-clé static!
27Les fonctions
– Déclaration, valeur de retour
- Variables locales/globales/statiques
– Transmission des arguments
- Transmission par référence
Arguments :
La transmission des variables se fait par valeur
Exemple: http://www.infres.enst.fr/
~danzart/php/exemples/
fonctions_arguments_test.php
Transmission par référence, 2 possibilités :
Soit le nom de la variable est précédé d’un & au
moment de l’appel!
Soit le nom de la variable est précédé d’un & au
moment de la déclaration de la fonction
(standard)
Depuis php5, les arguments par défaut peuvent être
transmis par référence
28Les objets
– Déclaration, attributs, méthodes, constructeur, instanciation
– Héritage, redéfinition de méthodes
class sortie {! instanciation et référenciation!
var $titre="Bonjour";! $a = new sortie("Hello");!
// constructeur! $a->debut();!
function sortie($init="Coucou")! echo " il est ".date
{ $this->titre=$init; }! ("H:i")."";!
! $a->fin();!
function debut()!
{echo "!
$this->titre";! Exemple: http://www.infres.enst.fr/~danzart/php/
echo "";}! exemples/classes_test.php
function fin()!
{echo "";}!
}
29Les objets
– Déclaration, attributs, méthodes, constructeur, instanciation
– Héritage, redéfinition de méthodes
class sur_s extends sortie {! !
function sur_s($titre="coucou")! instanciation et référenciation
{ !
//constructeur! $a = new sur_s("Hello"); !
parent::sortie($titre);}! $a->debut();!
! $a->prg("il est ".date("H:i"));!
function prg($texte)! $a->fin();!
{!
echo "!
$texte";!
echo "";}! Exemple: http://www.infres.enst.fr/~danzart/php/
! exemples/classes_heritage_test.php
function debut()!
{!
parent::debut();!
echo "debut de page";!
}!
!
}
30Les fichiers inclus
!
include(nomfichier ) :! le fichier inclus débute en html pur !
inclut systématiquement le fichier à l'endroit !
indiqué
Il faut toujours donner un nom et une
extension qui comportent une indication sur :
require(nomfichier ) :!
l'inclusion (inc) : permet de savoir que
ne l'inclut que si c'est justifié (cas d'une
instruction conditionnelle)
c'est un fichier à inclure
le type de fichier (php) : évite que ce
include_once(nomfichier ), fichier soit lisible intégralement
require_once(nomfichier ):!
Ne fera l’inclusion qu’une seule fois (cas Par exemple : bibli_inc.php!
d’appels multiples de bibliothèques de
fonctions
Exemple: http://www.infres.enst.fr/~danzart/php/
exemples/inclusion_test.php
31Les formulaires
– Déclaration, balises, méthode
- Récupération des valeurs transmises
– Cas particulier du type image !- Les checkbox!
! La balise form délimite le formulaire
Questionnaire! Son attribut method détermine le mode de
Prénom ? ! L’attribut action précise le programme qui
Votre nom ? !
Votre couleur favorite ?! Balises:
! form, input (type, name,
blanc! value), select (name), option
jaune! (value), …!
orange!
vert!
! Les balises d'un formulaire
Cliquez sur pour valider.! exemples/formulaire_test.html
!
32Les formulaires
– Déclaration, balises, méthode
- Récupération des valeurs transmises
– Cas particulier du type image !- Les checkbox!
! !
Formulaire2 ! L’image remplace le bouton de soumission du
! formulaire.
!
Les coordonnées du point où l'utilisateur aura
Questionnaire! cliqué seront : $im1_x et $im1_y!
Votre prénom ? !
!
Exemple : http://www.infres.enst.fr/~danzart/php/
Cliquez sur pour
valider.!
!
!
33Les formulaires
– Déclaration, balises, méthode
- Récupération des valeurs transmises
– Cas particulier du type image !- Les checkbox!
! !
! Le nom du champ de type checkbox
! dans un tableau dynamique.
Questionnaire : votre choix!
Pommes! !
Poires! ($fruits) permettra de savoir combien de
Cliquez sur pour valider.! valeurs sont dans le tableau.
!
!
!
! Exemple : http://www.infres.enst.fr/~danzart/php/
exemples/checkbox_test.php
Source du script
34Les fichiers
– Ouverture/fermeture
- Lecture/écriture
– Traitement de chaînes !- Fichiers locaux!
! $cible=fopen($nom_cible,"w+");!
/* ouverture en lecture */! /* lecture de lignes faisant au
$fichier=fopen($nom_f,"r");! plus 255 caractères */!
!
/* lecture d'une ligne faisant au
while ($ligne=fgets($source,255))!
plus 255 caractères */!
{!
$ligne=fgets($fichier,255);! // copie de la source sur la cible!
! fputs($cible,$ligne);!
/* fermeture du fichier */! }!
fclose($fichier);! fclose($source);!
fclose($cible);!
?>!
?>!
!
35Les fichiers
– Ouverture/fermeture
- Lecture/écriture
– Traitement de chaînes !- Fichiers locaux!
Le fichier traité a la structure suivante :
// premier élément !
nom prenom;dept/bureau/poste! $nom = strtok($ligne,$sep);!
!Les fichiers
– Ouverture/fermeture
- Lecture/écriture
– Traitement de chaînes !- Fichiers locaux!
/* affichage des entrées d'un
répertoire */!
$repertoire="rep";! On peut utiliser la liste de ces entrées pour
$d = dir($repertoire);! créer des liens vers ces fichiers ou répertoires
echo "chemin : $d->path";! !
while ($entry = $d->read())! echo "Environnement
– Les cookies
- Les sessions
– Les variables d’environnement!
Création d’un cookie, Durée de validité
- Il est prudent d'utiliser un nom qui ne soit
pas aussi celui d’une autre variable (d’un
int setcookie (string name, string formulaire par exemple)
value , int expire , string path ,
string domain , int secure )! - La date calculée dépend de celle du client !
! - Les cookies ne seront accessibles qu'au
Le code PHP suivant doit impérativement avoir été
envoyé avant l'envoi de tout code html, c'est à dire chargement de la prochaine page, ou au
en début du fichier).
rechargement de la page courante.
! - Il est possible de stocker un tableau dans unEnvironnement
– Les cookies
- Les sessions
– Les variables d’environnement!
Fonctions de gestion de session
Exemple
! !
l'identificateur
!
Les variables de session sont ensuite rque: ce mécanisme fonctionne aussi avec des
accessibles grâce au tableau associatif tableaux
$_SESSION[].
Exemple : http://www.infres.enst.fr/~danzart/php/
! exemples/session1_test.php
39Environnement
– Les cookies
- Les sessions
– Les variables d’environnement
- phpinfo()!
!
->> données stockées dans des variables permettant $_GET[], $_POST[], $_COOKIE[], !
au programme d'avoir des informations sur son $_SESSION[]!
environnement.
Mais aussi:
->> informations sur le type de serveur, son $REMOTE_ADDR : adresse du client qui a fait la
administrateur, la date à laquelle le script a été requête
appelé, l'adresse IP et le type de navigateur du
client, …
$REMOTE_REFERER : nom de la page qui a
référencé celle qui s'affiche
->> créées par le serveur à chaque fois que le script
PHP est appelé, le serveur les lui fournit en $USER_AGENT : nom du navigateur utilisé ainsi
paramètres cachés lors de l'exécution de que sa version
l'interpréteur.
$LAST_MODIFIED : dernière date de modification
->> deux catégories :
$_SERVER, $_REQUEST, …!
celles qui dépendent du client
celles qui dépendent du serveur!
! 40Images
– Formats acceptés: png, gif, jpg
- Fonctions de gd
– Tracés, sauvegardes
- Images dynamiques
Analyse d'une image ! Récupération de la couleur en (x,y)
! !
!
switch ($c[2]){! !
case 1 : print("gif");break;! Couleur la plus proche dans une image
!
case 2 : print("jpeg");break;! !
default : printf("non reconnu");! !
}! Couleur de transparence dans une image
! !Images
– Formats acceptés: png, gif, jpg
- Fonctions de gd
– Tracés, sauvegardes
- Images dynamiques
Incrustation d'un texte en un point
!
imagestring($im,$font,$x,$y,! $nom="livre.png";!
$texte,$coul);! printf("");!
Tracés sur une image
$im=imagecreatefrompng($nom);!
//quart d'ellipse! !
imagearc($im,$x,$y,$l,$h,0,90,$coul);! $couleur=imagecolorclosest($im, !
//ligne! 0,0,0);!
imageline($image,$x1,$y1,$x2,$y2,! imagecolorset($im,$couleur,!
$coul);! 255,0,0);!
//polygone imagepolygone . . . .!
($im,array($x1,$y1,$x2,$y2,! imagepng($im,"nouveau.png");!
$x3,$y3),3,$coul);! !
// attention aux droits sur les
//polygone plein!
fichiers ainsi créés!
imagefilledpolygone($im,array($x1,$y1,!
!
$x2,$y2,$x3,$y3),3,$coul);!
!
//rectangle! !
imagepolygone($im,$x1,$y1,$x2,$y2, !
$coul);! 42Images
– Formats acceptés: png, gif, jpg
- Fonctions de gd
– Tracés, sauvegardes
- Images dynamiques
Génération d'une image ! !
! !
! !
!
Dans ce cas, le fichier ne doit contenir que le
script php de génération d'image.
Il sera ensuite utilisé exactement comme un
nom de fichier image dans une page html.
43Envoi de mails
Attention aux envois de mails automatiques en nombre important
qui encombrent les boîtes aux lettres !!!!php
Tutoriel:
http://www.infres.enst.fr/~danzart/php/
Merci de votre attention !!!
Les exemples du cours:
http://www.infres.enst.fr/~danzart/php/exemples/
45Vous pouvez aussi lire