Développement PHP4 Programmation avancée. PHP niveau 2: le menu PHP niveau 2: le menu Programmation Objet Accès système de fichier Upload de fichiers.

Slides:



Advertisements
Présentations similaires
Novembre 2005 – Michel Desconnets PHP : théorie Objectif : introduire les concepts globaux permettant d'aborder la programmation en PHP.
Advertisements

LE LANGAGE JAVASCRIPT LES FENETRES.
TOUQUET Arnaud ▪ GI05 BLONDEEL Igor ▪ GM05
C.
! 1 CREATION D'UNE MAQUETTE EXPORT / IMPORT
Formulaire HTML Introduction. Définition de formulaire.
Suite à de nombreuses remarques concernant le projet de structures de données 'Gestion d'un Aéroport' , voici un polycopié de cours concernant la gestion.
FLSI602 Génie Informatique et Réseaux
Introduction aux Web Services Partie 1. Technologies HTML-XML
La balise <FORM>:
Oct.-2000DESS IIDEE © B. BAH 1 ASP Caractéristiques dun fichier ASP Son extension : « *.asp » La balise: Son indépendance vis à vis de toute plate–forme,
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
SECURITE DU SYSTEME D’INFORMATION (SSI)
Mars 2013 Grégory Petit
Module 1 : Préparation de l'administration d'un serveur
Algorithmique et Programmation
1 Sécurité Informatique : Proxy Présenter par : Mounir GRARI.
Les instructions PHP pour l'accès à une base de données MySql
Création d'un diaporama Création d'un diaporama
28 novembre 2012 Grégory Petit
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Introduction au langage PHP Réfs : Chap 3 p 49. Présentation PHP (Hypertext PreProcessor) est un langage de développement Web créé en 1994 par Rasmus.
Module 6 : Gestion du stockage des données
FICHIERS : Définition : Algorithme général:
Structures de données IFT-2000
Le langage Javascript pour le web
Manipulation de formulaires en Javascript
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Web dynamique PhP + MySQL AYARI Mejdi 2006
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
Feuilles de styles CSS Syntaxe d'application d'un style à une balise HTML : Les différents types de style : Pourquoi utiliser un style ? Possibilité étendue.
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
Animateur : Med HAIJOUBI
PHP 1° PARTIE : LES BASES © BTS IRIS 2002 [tv] Présentation Historique
Javascript 1° PARTIE : LES BASES
PHP & My SQL.
Jean-Michel ILIE - novembre SIL - module M12 Programmation Internet en PHP SIL module M12 Jean-Michel Ilié IUT Paris 5 - département informatique.
JavaScript Nécessaire Web.
Tester un fichierManipuler un fichierManipuler un répertoire Les données disponibles Les fichiers On peut obtenir sur un fichier toutes les informations.
Pourquoi est-il nécessaire d'installer de nouveaux logiciels sur votre ordinateur ? J'exclus de cette présentation l'installation de nouveaux matériels.
PHP 3° PARTIE : GESTION DE FICHIERS ET DE REPERTOIRES
La notion de type revisitée en POO
PHP 5° PARTIE : LES COOKIES
JavaScript.
Créer des packages.
Un survol du language C.
Les balises HTML et les objets JavaScript correspondants Objet document L'objet document est important dans la mesure ou il contient tous les objets du.
 Objet window, la fenêtre du navigateur
 Syntaxe du langage PHP
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Tutorat en bio-informatique
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
S'initier au HTML et aux feuilles de style CSS Cours 5.
Cours LCS N°4 Présenté par Mr: LALLALI
PHP 6° PARTIE : LES SESSIONS 1.Introduction 2.Identificateur de session 3.Variables de session 4.Client / Serveur 5.Principe 6.Ouverture de session 7.Enregistrement.
Les fichiers 1ère partie
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
 Formulaires HTML : traiter les entrées utilisateur
Initiation au JavaScript
CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003.
1 PHP 5 Notions fondamentales (niveau 1 cours #3) Formation continue – Cégep de Sainte-Foy François G Couillard.
Principes et variables
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
** Flash séance 2 Action script. ** Action Script Ajoute de l’interactivité Permet de contrôler les clips  Langage de programmation orienté objet.
Dreamweaver le retour Avec Les Formulaires Les Calques
DREAMWEAVER MX2 - Séance 2 Les calques Les comportements Les scénarios Les formulaires Les feuilles de style Les modèles Les cadres Mise en ligne Jérôme.
Les calques Les Template (modèles) Les Comportements Les scénarios Les formulaires Les CSS Le serveur Web de l’UTC Présentation.
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Valérie Bellynck, Benjamin Brichet-Billet, Mazen.
Transcription de la présentation:

Développement PHP4 Programmation avancée

PHP niveau 2: le menu PHP niveau 2: le menu Programmation Objet Accès système de fichier Upload de fichiers Traitement d'images Envoi d' s Sécuriser un serveur PHP

Programmation Objet en PHP ● Notion d'Objet ● déclaration ● instanciation / utilisation des objets ● constructeur ● héritage ● méthodes statiques ● sérialisation ● fonctions sur les objets

Programmation Objet Notions Il est possible de représenter dans un langage tel que PHP tout ce qui peut être assimilé à un objet : ● Un compte en banque, ● une voiture, ● une connexion ou un curseur de base de donnée ● etc.. On utilise pour cela une structure de donnée spéciale, appelée classe, qui contient à la fois : ● des variables (des propriétés), et ● des fonctions (méthodes) qui agissent sur ces variables. On définit donc par une classe, un type d’objet.

Programmation Objet Déclaration En PHP, pour définir une classe, on utilise le mot clé class, suivi, entre crochets, de la liste des propriétés (avec le mot-clé var) et des méthodes de la classe (avec le mot-clé function) Class nomClasse { var $propriete1; var $propriete2; function methode1(...){ // corps de la methode 1 } function methode2(...){ // corps de la methode 2 }

Programmation Objet Déclaration class compteBanque { var $solde=100; var $numero; function deposer($montant){ $this->solde += $montant; } function retirer($montant){ $this->solde -= $montant; } Exemple: Pour accéder aux propriétés dans les méthodes, il faut employer la variable réservée $this suivi de l ’opérateur -> puis du nom de la propriété.

Programmation Objet Instanciation Après avoir défini une classe, il est possible alors de créer des objets sur ce type (instanciation). On le fait avec le mot clé new. On exécute ensuite les méthodes et accède aux propriétés de l ’objet grâce à l ’opérateur -> <? // instanciation d’un objet $monCompte = new compteBanque; // affectation d’une valeur à une propriété $monCompte->numero=" "; // appel d ’une méthode $monCompte->deposer(50); ?>

Programmation Objet Constructeur Lors de l ’instanciation d ’un objet, il est utile de pouvoir automatiquement initialiser des propriétés avec des valeurs par défaut et/ou d'exécuter des traitements sur cet objet. On le fait dans une méthode spéciale appelée constructeur. Cette méthode porte le nom de la classe et peut recevoir des paramètres. Class compteBanque { var $solde; var $numero; function compteBanque($soldeInitial){ $this->solde=$soldeInitial; } //... } $monCompte = new compteBanque(100);

Programmation Objet Lors de la déclaration avec var, on ne peut initialiser les propriétés qu'avec des constantes. Si on veut les affecter avec des valeurs issues d'autres variables ou de fonctions, il faut le faire dans le constructeur. Si on veut accéder à un objet stocké dans une variable de session, il faut mettre la déclaration de la classe avant la première utilisation de cette variable de session. En comparaison avec d’autres langages objet : ● Il n ’y a pas de limitation d'accès (public, protégé, privé) aux propriétés et aux méthodes. Tout est public. ● Il n ’y a pas de destructeur. A noter :

Programmation Objet Héritage On peut avoir besoin de définir un objet qui ressemble à un autre objet avec quelques différences : ● propriétés et méthodes supplémentaires ● méthodes avec des traitements différents (=surcharge)... Plutôt que de réécrire une classe de A à Z, on va déclarer une classe (classe fille) qui hérite des propriétés et méthodes de la classe d’origine (classe mère). Cette déclaration se fait grâce au mot-clé extends. class compteASeuil extends compteBanque { var $soldeLimite; function compteASeuil($soldeInitial, $limite=0){ $this->soldeLimite=$limite; $this->solde=$soldeInitial; } function retirer($montant){ if($this->solde - $montant > $this->soldeLimite ) $this->solde -= $montant; }

Programmation Objet : Héritage Pour appeler les méthodes d'une classe mère, on utilise l'opérateur '::' et le mot clé parent parent::nomMethode(); class compteASeuil extends compteBanque { var $soldeLimite; function compteASeuil($soldeInitial, $limite=0){ $this->soldeLimite=$limite; parent::compteBanque($soldeInitial); } function retirer($montant){ if($this->solde - $montant > $soldeLimite ) parent::retirer($montant); }

Programmation Objet Méthodes statiques il ne faut pas que la méthode appelée utilise des propriétés non initialisées sous peine de dysfonctionnement (pas d'utilisation de $this-> dans cette méthode). Il est également possible d'appeler des méthodes d'une classe sans avoir à l'instancier, en indiquant le nom de la classe et l'opérateur '::'. maClasse::nomMethode(); class compteBanque { function aide(){ echo "voici de l'aide sur l'objet compteBanque"; } echo "vous voulez de l'aide ?"; compteBanque::aide();

Programmation Objet Objectif : Ecrire une classe qui représente un caddie d'une boutique online avec : Une propriété de type tableau contenant la liste des produits (clé=nom et valeur=quantité) Un constructeur Une méthode permettant d'ajouter un produit dans le caddie Une méthode affichant le contenu du caddie Instancier ensuite un objet de ce type, ajouter des produits et afficher le contenu du caddie. (exo_caddie.class.php et exo_caddie1.php)

Programmation Objet Sérialisation La sérialisation permet de transformer un objet en une représentation sous forme de chaîne, afin de pouvoir le stocker dans un fichier, une base de donnée, de le transférer sur le réseau etc.. La fonction serialize(), serialise l'objet (objet -> chaîne) tandis que la fonction unserialize() réalise l'inverse (chaîne -> objet). Avant de faire un unserialize(), il est nécessaire d'avoir déclaré au préalable la classe de l'objet. include("compteBanque.class.php"); $compte = new compteBanque(10); $s = serialize($compte); $fp = fopen("cpt.bin", "w"); fputs($fp, $s); fclose($fp); include("compteBanque.class.php"); $fp=fopen("data.bin", "r"); $s = fread($fp,filesize("cpt.bin")); $cpt = unserialize($s); fclose($fp); $cpt->credite(53); echo $cpt->solde; Page1.php Page2.php

Programmation Objet Sérialisation et session Lorsque l'on stocke un objet en session, celui-ci est sérialisé automatiquement, et dé-sérialisé lors du session_start(). La déclaration de la classe doit être faite avant le session_start() et doit être incluse sur toutes les pages utilisant les sessions, même si les objets en sessions ne sont pas utilisés. Il semble qu'il y ait quelques problèmes si les sessions sont automatiques (session.auto_start = 1 dans php.ini). Pour utiliser correctement les objets avec les sessions, mettre session.auto_start = 0 include("compteBanque.class.php"); session_start(); $compte = new compteBanque(10); session_register('compte'); include("compteBanque.class.php"); session_start(); $c=$HTTP_SESSION_VARS['cpt']; $c->credite(53); echo $c->solde; Page1.phpPage2.php

Programmation Objet Sérialisation : __sleep & __wakeup Les méthodes "magiques" __sleep et __wakeup, sont appelées respectivement juste avant la sérialisation et juste après la dé-sérialisation d'un objet. Elle peuvent servir à réaliser différentes tâches à ces moments là : fermer/retablir une connection de base de donnée ouverte par l'objet, "nettoyer" des propriétés qui n'ont pas besoin d'être sauvées, mettre à jour des propriétés etc... Class compteBanque { var $interet; function __sleep(){ $this->calculInteret(); } function __wakeup(){ }

Programmation Objet Objectif : Faire une page qui affiche le contenu d'un objet de type caddie (cf exercice précédent), stocké en session, et un formulaire permettant de saisir le nom d'un produit et sa quantité à ajouter au caddie. Bonus : faire la même chose mais en stockant l'objet dans le formulaire. Exo_caddie.class.php et exo_caddie2.php

Accès système de fichier ouverture / fermeture PHP dispose de fonctions similaires à d'autres langages pour lire et écrire dans des fichiers. $fp=fopen("nomFichier", "mode"); fopen : ouvre un fichier dans un mode et renvoie un pointeur sur le contenu du fichier Mode: "r" : lecture seule, pointeur au début "r+" : lecture /écriture, pointeur au début "w" : écriture seule, pointeur au début, taille ramené à 0 "w+" : lecture/écriture, pointeur au début, taille ramené à 0 "a" : écriture seule, pointeur à la fin "a+" : lecture/écriture, pointeur à la fin rajouter "b" (ex: "rb") pour travailler sur fichiers binaires pour les systèmes qui font la différence texte/binaire (Windows) Note : Il est possible d'ouvrir des fichiers distants par http (lecture seule) ou ftp (mode passif): "r"); fclose($fp); fclose : ferme un fichier après lecture, écriture etc..

Accès système de fichier lecture fread : lit dans le fichier ouvert, un certain nombre de caractères (ou octets), qui sont renvoyés dans une chaine. $contenu=fread( $fp, nombreCaractère); fgets : lit une ligne dans un fichier texte, jusqu'au saut de ligne ou le nombre de caractères spécifié sur la ligne courante. $ligne=fgets( $fp [, nombreCaractère ] ); fgetc : lit un seul caractère. Renvoie ce caractère ou false si la fin du fichier est atteint. $caractere=fgetc( $fp ); feof : permet de savoir si le pointeur est à la fin du fichier $booleen=feof( $fp );

Accès système de fichier écriture fwrite : écrit le contenu d'une chaîne dans un fichier, avec éventuellement un nombre maximum de caractères. Renvoie le nombre de caractères écrits. $nombre=fwrite( $fp, "contenu",[ nombreCaractere]); $montexte="Hello world"; $fp = fopen("readme.txt", "w"); fputs($fp, $montexte); fclose($fp); fputs : alias de fwrite $fp=fopen("readme.txt", "r"); $taille=filesize("readme.txt"); $contenu=fread($fp,$taille); fclose($fp); echo $contenu; Exemple : écriture lecture

Accès système de fichier divers readline() permet d'afficher tout le contenu d'un fichier texte (sans avoir à l'ouvrir et le fermer) file() renvoi toutes les lignes d'un fichier texte dans un tableau. fseek() fait avancer le pointeur vers une position précise dans le fichier. copy(), rename(), unlink() permettent respectivement de copier, renommer ou détruire un fichier. file_exists() indique si un fichier existe. filesize() donne la taille d'un fichier et fileperms() les droits d'accès d'un fichier. if(file_exists('readme.txt')){ copy('readme.txt', 'lisezmoi.txt'); } readline('lisezmoi.txt'); // affiche le contenu echo filesize('lisezmoi.txt'); // affiche la taille $fp=fopen('lisezmoi.txt','r'); fseek($fp,4, SEEK_CUR); // avance de 4 caractères echo fread($fp,5); // lit 5 caractères fclose($fp);

Accès système de fichier répertoires Des fonctions permettent de naviguer dans l'arborescence du système de fichier chdir permet de changer de répertoire courant. Pour obtenir la liste des fichiers d'un répertoire, on utilise les fonctions opendir, readdir, closedir. chdir("/tmp"); // pour filetype $dir = opendir("/tmp"); while ($file = readdir($dir)) { echo $file."(".filetype($file).") "; } closedir($dir);

Accès système de fichier L'accès à un fichier peut être conditionné par le niveau de sécurité configuré dans PHP. De plus il faut éviter de mettre ce genre de fonctionnalité (un explorateur) sur un site pour des raisons de sécurité... Objectif : Faire un explorateur de répertoire. Un lien sur un sous-répertoire affiche la liste des fichiers qu'il contient. Un lien sur un fichier affiche le contenu de celui-ci. Tout ceci dans la même page. Exo_explorer.php

Upload de fichiers Le protocole HTTP permet à l'utilisateur de télécharger des fichiers sur le serveur via un formulaire HTML. Ce formulaire doit contenir : Un attribut supplémentaire dans la balise : enctype="multipart/form-data" autant de balise que de fichier à télécharger. Le formulaire doit être envoyé avec la méthode POST. Eventuellement, une balise, qui précise la taille maximale du fichier accepté, en octets (à placer avant la balise file). <form name="saisie" action="upload.php" method="POST" enctype="multipart/form-data"> votre fichier : Exemple :

Upload de fichiers Une fois le formulaire posté, les fichiers indiqués par l'utilisateur sont téléchargés sur le serveur et enregistrés dans un répertoire temporaire (indiqué dans php.ini). La main est ensuite donnée à la page php indiquée dans l'action du formulaire. Une série de variables est pré-renseignée avec des informations sur les fichiers reçus, permettant de les traiter. Il s'agit de $HTTP_POST_FILES ou $_FILES (PHP ). Ces variables sont des tableaux, contenant des éléments dont la clé porte le nom de la balise file, et la valeur, un tableau contenant les informations sur le fichier. $_FILES['monfichier']['name'] : nom original du fichier $_FILES['monfichier']['type'] : mime-type du fichier $_FILES['monfichier']['size'] : taille du fichier (en octet) $_FILES['monfichier']['tmp_name'] : nom du fichier stocké dans le répertoire temporaire

Upload de fichiers Grâce à $_FILES, il est possible de vérifier ce qu'on a reçu. L'étape suivante consiste à copier le/les fichiers téléchargés dans un répertoire définitif. En effet, les fichiers reçus sont automatiquement effacés du répertoire temporaire après exécution de la page. Il faut dans ce cas soit utiliser la fonction copy() conjointement avec la fonction is_uploaded_file(), soit la fonction move_uploaded_file() if (is_uploaded_file($_FILES['monFichier']['tmp_name'])) { copy($_FILES['monFichier']['tmp_name'], "/chemin/destination/".$_FILES['monFichier']['name']); } else { echo "attaque upload !!! fic=".$_FILES['monFichier']['name']; } move_uploaded_file($_FILES['monFichier']['tmp_name'], "/chemin/destination/".$_FILES['monFichier']['name']);

Upload de fichiers Si vous utilisez copy, bien verifier que le fichier copié correspond à un fichier téléchargé avec is_uploaded_file et non un autre fichier : cela peut être dans certain cas un trou de sécurité. Avec PHP3, ou PHP4 quand register_globals=on dans php.ini, les informations contenues dans $_FILES, sont également disponibles dans des variables individuelles dont le nom commence par le nom du champs input file. $monFichier_name // = $_FILES['monfichier']['name'] $monFichier_type // = $_FILES['monfichier']['type'] $monFichier_size // = $_FILES['monfichier']['size'] $monFichier // = $_FILES['monfichier']['tmp_name'] Eviter d'utiliser ces variables, ou utiliser is_uploaded_file, pour des raisons impératives de sécurité !

Upload de fichier Objectif : Faire un formulaire qui propose l'upload d'une image. Dans la page cible, vérifier le type du fichier téléchargé, récupérer le fichier et le stocker dans un sous répertoire du site. Ensuite afficher l'image. Exo_upload_form.php Exo_upload.php

Traitement d'images PHP utilise une bibliothèque externe, GD, pour pouvoir générer les images. Il faut donc s'assurer en premier lieu (avec phpinfo() par exemple) que PHP soit configuré correctement : Soit compilé avec la bibliothèque GD Soit intègre le module GD via php.ini (extension=php_gd.dll ou php_gd.so) Depuis la version 1.6 de GD, il n'est plus possible de manipuler des images Gif (problème de licence). Il est possible d'utiliser un format similaire open source : PNG. PHP permet de générer à la volée des images dans différents formats. Cela est utile pour créer des graphes de statistiques issues d'une base de donnée, générer dynamiquement le format "vignette" des photos d'un album en ligne etc...

Traitement d'image ● Créer une image en mémoire, soit vierge (imagecreate), soit à partir d'un fichier image (imagecreatefromxxx où xxx = format) ● Utiliser les diverses fonctions pour dessiner, écrire dans cette image en mémoire (imagecolorallocate, imagestring, imageellipse, imagefill, imagerectangle etc…) ● enregistrer cette image mémoire sur disque ou l'envoyer directement au navigateur ● détruire l'image en mémoire (imagedestroy) Le principe est le suivant :

Traitement d'images Syntaxe de imagecreate : $Identifiant = imagecreate ( $largeur, $hauteur); imagecreate prend en argument 2 entiers indiquant la largeur et la hauteur. Renvoie un identifiant sur une image en mémoire dont le fond est blanc. On peut également créer une image à partir d'un fichier $identifiant = imagecreatefromjpeg( "fichier.jpg" ); $identifiant = imagecreatefrompng( "fichier.png" ); $identifiant = imagecreatefromgif( "fichier.gif" ); etc.. $im = imagecreate ( 200, 50 ); // créer une image de 200*50 exemple

Traitement d'images On "dessine" dans cette image grâce aux nombreuses fonctions disponibles, toujours en passant comme paramètre l'identifiant de l'image. Un paramètre souvent demandé est celui d'un code couleur que l'on peut récupérer grâce à imagecolorallocate : $codecouleur = imagecolorallocate( $im, $codeRouge, $codeVert, $codeBleu); Cette fonction ajoute une couleur dans la palette de couleur de l'image en question. Elle renvoie l'index de cette couleur dans la palette. Le premier appel à imagecolorallocate définit la couleur de fond de l'image.

Traitement d'images Formes géométriques imageellipse( image, x, y, larg, haut, couleur); imagepolygon( image, tableauPoint, nombrepoints, couleur); tableauPoint=array( x0, y0, x1, y1, …) imagerectangle( image, x1, y1, x2, y2, couleur); imageline( image, x1, y1, x2, y2, couleur); imagesetpixel( image, x, y, couleur); imagefilledellipse( image, x, y, larg, haut, couleur); imagefilledpolygon( image, tableauPoint, nombrepoints, couleur); imagefilledrectangle( image, x1, y1, x2, y2, couleur);

Traitement d'images Dessiner du texte imagestring(image, fonte, x, y, texte, couleur); Fonte est un identifiant de fonte (bitmap) chargé avec imageloadfont ou de fonte prédéfinie : de 1 à 5 Pour écrire avec une fonte TTF : imagettftext(image, taille, angle, x, y, couleur, chemin_fonte, texte);

Traitement d'images Une fois l'image construite, on appelle une des fonctions imagepng, imagegif, imagjpeg ou imagewbmp selon le format désiré. imageX(image [, nomfichier]); // X=png, jpeg, gif... Le paramètre nom de fichier est facultatif. S'il est présent, l'image est sauvegardée dans le fichier indiqué. <?php $im = imagecreate ( 100,50 ); $colfond = imagecolorallocate($im, 168,186,203); imagefill($im, 10,10,$colfond); $colrect = imagecolorallocate($im, 58, 47, 128); imagerectangle ($im, 5, 5, 95, 45,$colrect); $coltexte = imagecolorallocate($im, 255,255,255); imagestring ($im, 2, 20,15, "aston", $coltexte); imagepng($im, "logoaston.png"); imagedestroy($im) ?> Demo_logoaston.php

Traitement d'images Si un nom de fichier n'est pas indiqué, le contenu de l'image est directement envoyé vers le navigateur. Ce qui signifie que : ● il faut changer l'en-tête HTTP de la page en indiquant le bon type mime ● Ne rien écrire d'autre (pas d'echo, print et autre contenu HTML) <?php // page header("Content-type: image/png"); $im = imagecreate ( 100,50 ); //… imagestring ($im, 2, 20,15, $_GET['texte'], $coltexte); imagepng($im); ?> affichage image Voici l'image générée : Demo_buildlogo.php Demo_logo.php

Traitement d'images Objectif : Faire une page (exo_img_stat_build.php) qui génère une image représentant un graphe de statistique en barre à partir d'une série de valeur stockée dans une variable tableau. L'image doit être directement envoyée au navigateur. Exo_img_stat.php et exo_img_stat_build.php Bonus : ajouter un paramètre au script exo_img_stat_build.php pour indiquer si on veut un graphe en barre ou en ligne brisée L'afficher avec exo_img_stat.php

Envoi d' s PHP permet d'envoyer un grâce à la fonction mail(). Mail(destinataire, sujet, message, entete_additionnels); <? "confirmation d'inscription", "Nous confirmons l'inscription sur notre site..."); ?> Les en-têtes permettent de préciser des informations techniques. Chaque information doit être séparée par un \n <? // exemple d'en-têtes facultatifs $entete="From: Laurent \n"; $entete.="Cc: $entete.="Bcc: $entete.="Reply-to: \n"; $entete.="X-Mailer: PHP/".phpversion()."\n"; "confirmation d'inscription", "Nous confirmons l'inscription sur notre site...", $entete); ?>

Envoi d' s Pour envoyer des s au format HTML : <? $entete="MIME-Version: 1.0\n"; $entete.="Content-type: text/html; charset=iso \n"; $entete.="From: Laurent \n"; $entete.="Reply-to: \n"; $entete.="X-Mailer: PHP/".phpversion()."\n"; $contenu= " Confirmation "; $contenu.= "Nous confirmons votre inscription sur notre site"; $contenu.= " SOCIETE.COM "; $contenu.= " "; "confirmation d'inscription", $contenu, $entete); ?>

Sécuriser un serveur PHP Un serveur web est particulièrement visé par des attaques pirates (qui ne viennent pas forcément de l'extérieur), car il héberge des sites et des applications sensibles. Celles-ci peuvent ne pas être suffisamment robustes et offrir des portes grandes ouvertes à toutes personnes voulant s'introduire dans le système ou récupérer des données sensibles. Il est possible de configurer PHP de manière à limiter les dégâts si une application possède une telle faille. Les paramètres de PHP se trouvent dans php.ini. On peut aussi changer ces paramètres pour chaque site hébergé, auquel cas, on les indique dans le fichier httpd.conf pour apache par exemple, dans chaque section, avec la directive php_admin_value ou php_value.

Sécuriser un serveur PHP Les options de configuration sont visibles avec la fonction phpinfo(). Il est utile de les connaître car leurs valeurs influencent le fonctionnement de bon nombre de fonctions, en particulier celles qui manipulent des fichiers. allow_url_fopen booleen : autorise ou non de manipuler des fichiers distants. Ex : fopen(" open_basedir chemin : seul les fichiers se trouvant dans chemin pourront être accessible par les fonctions de fichiers (y compris include, require etc..). En règle général, dans php.ini, on fixe cette valeur avec le chemin du répertoire racine de tout les sites hebergés, et, dans le cas d'apache, on redéfinit open_basedir dans chaque. Ainsi, les scripts de chaque site ne peuvent aller lire les fichiers des sites voisins.

Sécuriser un serveur PHP magic_quote_gpc booleen : indique si lors de la réception des formulaires, les caractères ', ", et \ dans les champs de saisie sont échappés ou non avec le caractère \ post_max_size size : fixe la taille limite des données contenus dans un formulaire. A regarder s'il y a des problèmes lors d'upload de fichier. register_globals booleen : indique si les parametres GET, POST et COOKIE sont stockés dans des variables individuelles ou non. Pour des raisons de sécurité, il est préférable que la valeur soit false et d'utiliser les variables $_*. Dans les versions futures, cette option sera supprimée. track_vars booleen : permet l'utilisation des variables $_* ou $HTTP_*_VARS

Sécuriser un serveur PHP Safe mode Le mode "safe" a été introduit pour palier à de nombreux problèmes de sécurité. Quand safe_mode est à true, lorsque un script tente d'accéder à un fichier, il ne le peut que si le propriétaire du fichier est le même que le propriétaire du script. Certaines fonctions voient également leur comportement modifié et restreint. Voir la liste dans la documentation officielle: En particulier, cela peut poser problème pour les fichiers récupérés par upload. Ceux ci peuvent être enregistré avec le propriétaire du serveur web, et non avec le propriétaire du script. Du coup, ils ne peuvent plus être manipulés par la suite dans d'autres pages.

Sécuriser un site PHP Il se peut que l'on n'ait pas le contrôle total sur la configuration du serveur. Il est donc important de suivre quelques règles au niveau du développement pour limiter la casse. 1) Une règle avant tout : NE JAMAIS faire passer un nom de fichier en paramètre à une page. Celui-ci étant généralement ensuite manipulé (ouvert, copier, ou même détruit), cela peut poser d'énormes problèmes. exemple <? // mauvais_script.php include $_GET['fichier']; ?> Même si c'est un bout d'un nom de fichier... <? // mauvais_script.php include "/chemin/vers/include/".$_GET['fichier']."inc".php; ?>

Sécuriser un site PHP 2) toujours nommer ses fichiers avec l'extension.php, même les includes, pour éviter de voir leur code source affiché dans le navigateur si leur url est connu. Le mieux est de mettre tout les includes en dehors de l'arborescence du site : ils sont alors inaccessibles à partir d'un navigateur. 3) Dans la mesure du possible, vérifier dans les scripts le contenu des données reçues (par GET ou POST…). Si on attend par exemple un nombre, vérifier que c'est un nombre (is_numeric). Cela est d'autant plus important quand ces paramètres sont utilisés dans une requête SQL. <? // mauvais_script.php $sql="UPDATE matable SET nom='".$_GET['nom']."' WHERE id=".$_GET['id']; ?> mauvais_script.php?nom=toto&id=0%3B+DELETE+FROM+matable mauvais_script.php?nom=toto&id=0+AND+id+%3E+0

Sécuriser un site PHP 4) initialiser toutes les variables avec des valeurs par défaut avant leur utilisation. Quelque soit la technologie employée pour un site web, l'attitude à avoir en tant que développeur se résume en deux mot : soyez parano ! ;-)