Web Avec PHP
Web Avec PHP
Web Avec PHP
avec PHP
Fichiers et templates
Récupérer un cookie :
<? // On affiche la valeur de nickname
echo 'le cookie "lenom" a pour valeur : ';
echo $_COOKIE["lenom"];
?>
Les sessions PHP
• PHP propose un système intégré pour gérer le
passage d'information
• Il est basé sur la notion de session :
– Chaque visiteur accédant à un site se voit assigner
un identifiant unique, appelé "identifiant de
session".
– Il est soit stocké dans un cookie, soit propagé dans
l'URL.
Les sessions PHP
En pratique :
2 fonctions :
session_start();
session_destroy();
1 variable super-globale :
$_SESSION
Les sessions PHP
Exemple :
<?php
// On démarre la session
if(!isset($_SESSION))session_start();
if ( isset($_SESSION['toto'])) {
$_SESSION['toto'] +=1;
}
else {
$_SESSION['toto'] =1;
}
?>
Les sessions PHP
Exemple :
<?php
// On démarre la session
if(!isset($_SESSION))session_start();
$_SESSION['panier'][] = 'champignons';
?>
Application : authentification
Accés authentifié à certaines pages
Authentification.php
deconnexion.php
Application : authentification
Conseils de sécurité :
http://matthieu.developpez.com/authentification/
Upload de fichier
formulaire.html
telechargement.php
//////////////////////////////////////////////////////////
// l'extension du fichier :
$path_parts = pathinfo($_FILES['userfile']['name']);
// les echos juste pour montrer les resultats de pathinfo
echo $path_parts['dirname'], "<br />";
echo $path_parts['basename'], "<br />";
echo $path_parts['extension'], "<br />";
if(!preg_match('/(gif|jpg|jpeg|png|bmp)$/i',
$path_parts['extension'])){
// l'extension ne fait pas partie
// des extensions acceptees
exit("type de fichier non reconnu");
}
telechargement.php
//////////////////////////////////////////////////////////
// debut de l'upload
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
// le repertoire dans lequel le fichier va être uploade
$uploaddir = './upload/' ;
// le chemin complet du fichier :
// $uploaddir : le repertoire
// basename($_FILES['userfile']['name']) :
// le nom du fichier entré par l'utilisateur,
// sans le repertoire
$uploadfile = $uploaddir .
basename($_FILES['userfile']['name']);
//////////////////////////////////////////////////////////
// verification de l'existence du fichier
// par defaut le fichier existant est ecrasé
if(file_exists($uploadfile)){
exit("fichier deja telechargé");
}
telechargement.php
//////////////////////////////////////////////////////////
// $_FILES['userfile']['tmp_name'] :
// le nom du fichier temporaire
// $uploadfile : le nom du fichier
// (Si le fichier de destination existe déjà,
// il sera écrasé)
if (move_uploaded_file(
$_FILES['userfile']['tmp_name'],
$uploadfile)) {
echo "Le fichier est valide, et a été téléchargé
avec succès. Voici plus d'informations :\n";
}
else {
echo "Attaque potentielle
par téléchargement de fichiers.
Voici plus d'informations :\n";
}
telechargement.php
//////////////////////////////////////////////////////////
echo 'Voici quelques informations de débogage :';
print_r($_FILES);
//////////////////////////////////////////////////////////
if ($_FILES['nom_du_fichier']['error']) {
switch ($_FILES['nom_du_fichier']['error']){
case 1: // UPLOAD_ERR_INI_SIZE
case 2: // UPLOAD_ERR_FORM_SIZE
case 3: // UPLOAD_ERR_PARTIAL
case 4: // UPLOAD_ERR_NO_FILE
}
}
else {
// $_FILES['nom_du_fichier']['error'] vaut 0
//soit UPLOAD_ERR_OK
// ce qui signifie qu'il n'y a eu aucune erreur }
telechargement.php
Gestion des fichiers
<?php
$contenu = file_get_contents('name.txt');
echo $contenu;
?>
Ecriture rapide
<?php
$contenu = 'non rien de rien';
file_put_contents('name.txt', $contenu);
?>
Ouverture
Création d'un flux fichier :
<?php
$ressource = fopen($filename, $mode);
?>
Mode : ‘r’, ‘r+’, ‘w’, ‘w+’, ‘a’, ‘a+’
+ : lecture et écriture
r : lecture, pointeur au début du fichier
w : écriture, pointeur au début du fichier
a : écriture, pointeur à la fin du fichier
w, a : si le fichier n’existe pas, création
Adressage : absolu (http:// ou ftp://) ou relatif
fopen : faux en cas de problème (et warning)
Fermeture
Fermeture d'un flux fichier :
<?php
$succes = fclose($ressource);
?>
– true : no problem
– false : en cas de problème
• Fin de fichier :
<?php
while (feof($ressource)) ....
Lecture de « html »
$ligne = fgetss( $ressource, $length, $tag_ok )
– Idem que fgets, mais en supprimant les tag html, sauf ceux dans $tag_ok
Lecture d'octects
$octet50 = fread($ressource, 50);
$tout = fread($ressource, filesize('name.txt'));
Ecriture
– $length (optionnel) :
• $length octets maximum
– valeur finale :
• nombre d'octets écrits ou FALSE en cas d'erreur.
Accés concurrents
• Utilisation de verrous :
– utilisation de la ressource par ceux qui possède un verrou
• Prise de verrou :
– verrou partagé en lecture : LOCK_SH
– verrou exclusif en écriture : LOCK_EX
• Libération de verrou :
– quelquesoit le type : LOCK_UN
Accés concurrents
<?php
$ressource = fopen('name.txt', 'r');
flock($ressource, LOCK_SH);
...
flock($ressource, LOCK_UN);
fclose($ressource);
?>
remarque :
– script mis en attente d'un verrou
– flock($ressource, LOCK_SH, TRUE);
• pas d'attente
• valeur FALSE si le verrou n'est pas disponible
Positionnement
$suffix (optionel) :
• Si suffix est fourni, le suffixe sera aussi supprimé.
<?php
$path = "/home/html/index.php";
$file = basename($path); // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"
?>
Gestion des fichiers
• copy( $source , $destination)
– copy() fait une copie du fichier source vers le fichier destination.
– TRUE en cas de succès, FALSE en cas d'échec.
– Utilisez rename( ) pour un déplacement
• delete -- Effacer unlink
• dirname( $path )
– Renvoie le nom du dossier du chemin complet $path
– contraire de basename( )
• disk_free_space( $dossier )
– Renvoie l'espace disque disponible dans le répertoire $dossier
• disk_total_space ( $dossier )
– lit récursivement toutes les tailles du répertoire $dossier et retourne la somme.
– $dossier peut être aussi une partition de disque.
• file_exists ( $filename)
– Vérifie si un fichier $filename existe
– Le résultat est mis en cache
• fileatime ( $filename)
– renvoie la date (un entier) de dernier accès au fichier $filename ou FALSE en cas d'erreur.
– Utilisez date( ) sur le résultat
– Le résultat est mis en cache
Template PHPlib
Pourquoi ? Comment ?
• Simplifier la génération du code html
• Séparer le HTML du PHP
• Utilisation d'une bibliothèque : PHPlib
• Définition d'un template en html pur
• Ajout
Le fichier HTML
<html>
<head> <title>Ma page</title> </head>
<body>
<table width="600" border="0">
<tr> <td>Nom</td> <td>Tel</td> </tr>
<tr> <td></td> <td></td> </tr>
</table>
</body>
</html>
<html>
<head> <title>Ma page client</title> </head>
<body>
<table width="600" border="0">
<tr> <td>Nom</td> <td>Tel</td> </tr>
<!-- BEGIN personne -->
<tr> <td> {nom} </td> <td> {tel} </td> </tr>
<!-- END personne -->
</table>
</body>
</html>
Le fichier PHP
<?php
include "librairies/template.inc";
include("mysql_connect.inc");
mysql_select_db('repertoire');
$sql = 'SELECT nom,tel FROM Personne';
$req = mysql_query($sql) or die(mysql_error());
$tpl = new Template("."); // chemin vers template
$tpl->set_file("gliste","liste.html");
$tpl->set_block('gliste','personne','personnes');
while($data = mysql_fetch_array($req)) {
$tpl->set_var("nom", $data['nom']);
$tpl->set_var("tel", $data['tel']);
$tpl->parse('personnes','personne',true);
}
mysql_close();
$tpl->pparse("affichage","gliste");
?>
Les fonctions de template
Template($root = ".", $unknowns = "remove")
Création du template. $root : le chemin pour accéder au fichier
de template. $unknows : comment sont traitées les variables
template non définies ("remove", "comment", "keep").
set_root($root)
Définition du chemin d'accès aux fichiers template
set_unknowns($unknowns = "remove")
Définition de la manière de traiter les variables de template non
définies
Les fonctions de template
set_file($varname, $filename = "")
Création d'une variable template portant le nom défini par
$varname, à partir du contenu du fichier portant le nom
$filename.
set_var($varname, $value = "")
Création d'une variable template portant le nom défini par
$varname, à partir du contenu de la variable $value
set_block($parent, $varname, $name = "")
La variable bloc nommée $varname dans $parent est
remplacée par une variable template nommée $name. Une
variable template nommée $varname est crée à partir du
contenu du bloc.
Les fonctions de template
parse($target, $varname, $append = false)
Toutes les variables template apparaissant dans $varname sont
remplacées par leur valeur, et le résultat est soit la nouvelle
valeur de $target ($append : false), soit mis à la suite de $target
($append = true).
pparse($target, $varname, $append = false)
Même chose que parse, mais le résultat est en plus envoyé au
navigateur (print).
<html>
<head> <title>Ma page client</title> </head>
<body>
<table width="600" border="0">
<tr> <td>Nom</td> <td>Tel</td> </tr>
<!-- BEGIN personne -->
<tr> <td> {nom} </td> <td> {tel} </td> </tr>
<!-- END personne -->
</table>
</body>
</html> variable template
(emplacement)
<html>
<head> <title>Ma page client</title> </head>
<body>
<table width="600" border="0">
<tr> <td>Nom</td> <td>Tel</td> </tr>
<!-- BEGIN personne -->
<tr> <td> {nom} </td> <td> {tel} </td> </tr>
<!-- END personne -->
</table>
</body>
</html> bloc
(emplacement)
Le fichier PHP
<?php
Création template
include "librairies/template.inc"; Récupération fichier
include("mysql_connect.inc");
mysql_select_db('repertoire');
Création du bloc
$sql = 'SELECT nom,tel FROM Personne';
$req = mysql_query($sql) or die(mysql_error());
$tpl = new Template(".");
$tpl->set_file("gliste","liste.html"); Affectation variable
$tpl->set_block('gliste','personne','personnes');
while($data = mysql_fetch_array($req)) {
$tpl->set_var("nom", $data['nom']);
$tpl->set_var("tel", $data['tel']);
$tpl->parse('personnes','personne',true);
}
mysql_close();
$tpl->pparse("affichage","gliste"); Substitution des var
?>
$tpl->set_file("gliste","liste.html");
<html>
<head> <title>Ma page client</title> </head>
<body>
<table width="600" border="0">
<tr> <td>Nom</td> <td>Tel</td> </tr>
<!-- BEGIN personne -->
<tr> <td> {nom} </td> <td> {tel} </td> </tr>
<!-- END personne -->
</table>
</body>
</html>
gliste
$tpl->set_block('gliste','personne','personnes');
<html>
<head> <title>Ma page client</title> </head>
<body>
<table width="600" border="0">
<tr> <td>Nom</td> <td>Tel</td> </tr>
{personnes}
</table>
</body>
</html>
gliste
personnes
$tpl->set_var("nom", "tata");
$tpl->set_var("tel", "1112");
$tpl->parse('personnes','personne',true);
personnes
$tpl->set_var("nom", "titi");
$tpl->set_var("tel", "1113");
$tpl->parse('personnes','personne',true);
personnes
$tpl->pparse("affichage","gliste");
<html>
<head> <title>Ma page client</title> </head>
<body>
<table width="600" border="0">
<tr> <td>Nom</td> <td>Tel</td> </tr>
<tr> <td> toto </td> <td> 1111 </td> </tr>
<tr> <td> tata </td> <td> 1112 </td> </tr>
<tr> <td> titI </td> <td> 1113 </td> </tr>
</table>
</body>
</html>
affichage