Chaque partie de ce tutorial présente de nouvelles possibilités du PHP qui peuvent être utilisés dans beaucoup d'applications liées aux sites Web.
Beaucoup de fonctions PHP seront ainsi utilisées afin d'illustrer notre propos. Elles seront explicitées chaque fois que cela semblera nécessaire.
Récupérer les informations techniques sur le serveur et sur l'utilisateur
Informations générales (phpinfo())
Syntaxe : echo phpinfo()
Comme tous les systèmes sont configurés différemment, phpinfo() sert généralement à vérifier la configuration ainsi que les variables prédéfinies, pour une plate-forme donnée.
Informations spécifiques ($_SERVER)
$_SERVER est un tableau contenant des informations comme les en-têtes, dossiers et chemins du script. Les entrées de ce tableau sont créées par le serveur web.
Commandes
Commentaires
Résultats
$_SERVER['AUTH_TYPE']
Méthode d'authentification utilisée par le client pour accéder au script PHP
$_SERVER['PHP_AUTH_USER']
Avec l'authentification HTTP, cette variable est définie à l'utilisateur. Elle est fournie par l'utilisateur.
$_SERVER['PHP_AUTH_PW']
Avec l'authentification HTTP, cette variable est définie au mot de passe. Elle est fournie par l'utilisateur.
$_SERVER['CONTENT_TYPE']
Type Mine
$_SERVER['PHP_SELF']
Nom du script
/Tutoriaux/PHP/PHP_Applications01.php
$_SERVER['GATEWAY_INTERFACE']
Version du CGI(Common Gateway Interface) qu'utilise le serveur
CGI/1.1
$_SERVER['DOCUMENT_ROOT']
Racine du serveur
/mnt/154/sda/3/1/monwebfacile
$_SERVER['HTTP_ACCEPT_LANGUAGE']
Langage accepté par le navigateur
$_SERVER['SERVER_SOFTWARE']
Identification du serveur
Apache/ProXad [Jan 23 2019 20:05:55]
$_SERVER['SERVER_PROTOCOL']
Nom du protocole
HTTP/1.1
$_SERVER['HTTP_HOST']
Nom de domaine du serveur
monwebfacile.free.fr
$_SERVER['HTTP_USER_AGENT']
Type de navigateur
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
$_SERVER['PATH_INFO']
Chemin web du script
$_SERVER['PATH_TRANSLATED']
Chemin complet du script
$_SERVER['REQUEST_URI']
Chemin du script
/Tutoriaux/PHP/PHP_Applications01.php
$_SERVER['REMOTE_ADDR']
Adresse IP du client
216.73.216.60
$_SERVER['REMOTE_PORT']
Port de la requête HTTP
48527
$_SERVER['QUERY_STRING']
Liste des paramètres passés au script
$_SERVER['SERVER_ADDR']
Adresse IP du serveur
212.27.63.154
$_SERVER['SERVER_ADMIN']
Adresse de l'administrateur du serveur
$_SERVER['SERVER_NAME']
Nom local du serveur
monwebfacile.free.fr
$_SERVER['SERVER_SIGNATURE']
Type de serveur
Apache/ProXad [Jan 23 2019 20:05:45] Server at monwebfacile.free.fr Port 80
$_SERVER['REQUEST_METHOD']
Méthode d'appel du script
GET
Récupérer les paramètres URL
Les paramètres peuvent être passés de 2 façons principales.
Dans chacune des méthodes on utilisera la fonction "isset()" pour savoir si la clé du tableau est définie et est différente de NULL. Si la variable est non définie ou NULLE isset() retournera false.
Appui sur OK -------------------------> Les variables n_nom et n_prenom sont envoyées masquées en 2 requêtes
La variable genre=Mr est envoyée en clair lors de la première requête (longueur limitée à 256 octets).
go.php
<?php
// Récupération des informations du formulaire
if(isset($_POST['n_nom'])) $nom = $_POST['n_nom'];
if(isset($_POST['n_prenom'])) $prenom = $_POST['n_prenom'];
Guillemets dans les données en entrée de formulaires
Par défaut, l'interpréteur PHP est installé avec l'option magic_quotes_gpc. Ce qui signifie que des barres obliques inverses (antislash) sont placées devant tout caractère de type guillemets lu dans $_get, $_post ou cookies. Ce mécanisme est implémenté pour éviter des problèmes lorsque ces valeurs sont utilisées en chaines, dans des requêtes sur une base de données car SQL utilise aussi l'apostrophe pour délimiter les chaînes, et aussi \' pour mettre une apostrophe dans une chaîne.
Exemple : si l'utilisateur saisit O'Donnell dans le champ de nom d'un formulaire et que le champ est transmis par post :
$name = $_post['name']; # $name contient : O\'Donnell
Création de qrcode
Généralités sur les codes barres
Un code-barres, ou code à barres, est la représentation d'une donnée numérique ou alphanumérique sous forme d'un symbole graphique.
Il existe 3 familles principales de codes barres :
Les codes barres unidimensionnels ou linéaires qui sont principalement utilisés pour des numéros de série, des ID des produits, etc. dans le commerce et l'industrie. Ils sont constitués de barres et d'espaces d'épaisseurs variables en fonction de la règle utilisée (encodage et marqueurs de début et de fin d'information) et des données elles mêmes.
Code linéaire
Règle de code-11
Encode des données numériques [0..9] et [-]
Code linéaire
Règle de code-93
Encode [0..9 A..Z -.$/+% espace]
Code linéaire
Règle de code-39 Full ASCII
Encode des symboles ASCII [0..127]
Les codes barres linéaires empilés ainsi nommés car ils sont constitués de plusieurs codes-barres linéaires empilés les uns sur les autres. Ils sont lus verticalement avec un lecteur à balayage automatique.
Les codes à barres à deux dimensions sont codés et lus horizontalement ET verticalement. Ils permettent donc de représenter un plus grand nombre de données sur une même surface. C'est dans cette catégorie que ce trouve le code de type qrcode que nous allons générer via PHP. D'autres types existent tels que Code One, Code Aztec, DataMatrix, MaxiCode, Micro QR Code, etc.
Code en 2D
Règle DotCode
DotCode a été conçu pour l'impression d'étiquette haut débit.
Code en 2D
Règle MaxiCode
Encode des données alphanumériques (spécifique USPS)
Code en 2D
Règle QR Code
Encode des données alphanumériques (Latin-1, Kanji) et des bytes
Un qrcode c'est quoi?
Le code QR ou QR Code (qr pour Quick Response ou réponse rapide) est l'équivalent en 2 D du code barre classique. A la différence d'un code barres classique, le code QR peut contenir beaucoup d'informations: 7089 caractères numériques, 4296 caractères alphanumériques, contrairement au code barres normal qui ne peut stocker que de 10 à 13 caractères!
Ca sert à quoi?
L’utilisation des codes barres s’est développée de façon considérable au cours des quinze dernières années. Depuis l’adoption de la norme UPC par le commerce de
détail la fin des années 70, les codes barres font parti de notre quotidien.
Les codes barres offrent une méthode rapide, facile et précise pour saisir des données. Une utilisation judicieuse des codes barres peut réduire les délais
nécessaires aux employés pour effectuer certaines tâches et augmenter l’efficacité d'une équipe.
Un code QR est lisible à partir d'un téléphone portable, d'une tablette, d'un équipement équipé d'une caméra. Un programme doit-être téléchargé puis installé sur la machine, ensuite il suffit de prendre en photo le code pour voir son contenu.
Le code QR peut comporter du texte, un numéro de téléphone, un SMS, l'adresse d'un site, une adresse mail, une carte annuaire (vcard). Ce contenu peut-être ensuite être traité, exécuté, sauvegardé, imprimé etc..
Générer un qrcode avec la librairie GD PHP 5
Prérequis
D'une part votre serveur doit être en php version 5, et d'autre part cette version doit supporter la librairie gd pour la génération des images. Cela peut être vérifier avec phpinfo() vu précédemment.
Il faut aussi inclure la librairie phpqrcode.php : cette librairie est configurée pour ne nécessiter aucun autre fichier externe. Vous pouvez télécharger cette librairie ICI
Principe
Pour générer un qrcode PHP met à notre disposition la fonction QRcode() qui accepte 8 paramètres.
QRcode::Type
(
Contenu à mettre dans le QRcode,
Fichier sauvegarde du résultat ,
Niveaux de correction,
Taille des pixels,
Marge de l'image résultante,
false,
Couleur d'arrière plan,
Couleur des pixels
);
Type : format du résultat :
QRcode::png() pour générer une image de type png (par défaut).
QRcode::svg() pour générer une image de type png.
QRcode::jpeg() pour générer une image de type png.
QRcode::text() pour générer un fichier de type texte.
Contenu à mettre dans le QRcode : données que l'on veut insérer dans le QR code.
Fichier sauvegarde du résultat : nom du fichier à générer. Attention à lui donner la bonne extension (png ou jpeg) conforme au type défini précédemment.
Niveaux de correction : niveau de redondance pour la correction d’erreur. C’est ce qui fait que le QR code est plus ou moins dense et plus ou moins lisible. Il existe 4 niveaux de correction d’erreur du QR Code L, M, Q, H. L étant le niveau le plus bas.
L => niveau de redondance de 7%.
M => niveau de redondance de 15%.
Q => niveau de redondance de 25%.
H => niveau de redondance de 30%.
Par exemple la valeur H signifie que même si 30 % du qrcode peut être masqué, on retrouvera tout de même les informations.
Plus la redondance est grande, plus l’information est présente à de multiples endroits et, de ce fait, la perte d’informations est moins impactante sur la lecture complète des informations.
Taille des pixels : taille en pixels des carrés à l’intérieur du code (nombre).
Marge de l'image résultante : taille en pixels de la bordure autour du QR Code(nombre Min 0 pas de marge, Max 50).
false : ce paramètre semble inutilisé. Le mettre à false pour obtenir un fonctionnement correct dans tous les cas.
Couleur d'arrière plan : au format hexadecimal. Exemple 0xffffff pour du blanc (nombre hexa).
Couleur des pixels : au format hexadecimal. Exemple : 0xc0c0c0 pour du gris (nombre hexa).
Exemple : QRcode::png($donnees, $filename, $ErrorCorrectionLevel, $PointSize, $MargeSize, false, $BackColor, $PixelsColor); avec
$donnees = 'Je suis un petit qui roule';
$filename = 'xxx/kskjjsd/kjk/temp/resultat.png';
$ErrorCorrectionLevel = 'M'; // Niveaux de correction
$PointSize = 6; // Taille des pixels
$MargeSize = 3; // Taille de la marge
$PixelsColor = 0xff8000; // Pixels oranges
$BackColor = 0x000000; // Fond noir
Taille d’un QRCode ?
La taille varie en fonction de plusieurs paramètres :
Soit un qr code de base avec les spécificités suivantes : texte= Bonjour tout le monde, taille pixels = 3px, Niveau correction = L, marge = 0px.
En fonction du taux de redondance (d'informations) demandé
QR code de base
Le même avec un niveau de correction maximum (H)
En fonction de la quantité de données à coder
QR code de base
Le même avec plus de données : texte= Bonjour tout le monde, comment allez vous ce matin? Pensez vous qu'il va pleuvoir?
En fonction de la dimension des pixels.
QR code de base
Le même avec des pixels plus gros (7px)
En fonction de la marge.
QR code de base
Le même avec une marge maximun de 5px
Formats de données d'un qr code
Voici quelques formats de données parmi bien d'autres que l'on peut gérer par qr code.
URL
$donnees = "http://monwebfacile.free.fr";
Note : Le format exact est urlto::http://... mais cette syntaxe n'est pas reconnue comme url par certains lecteurs. Préférer coder du texte avec juste l'URL.
QRcode::Type
(
Contenu à mettre dans le QRcode,
Fichier sauvegarde du résultat ,
Niveaux de correction,
Taille des pixels,
Marge de l'image résultante,
false, Couleur d'arrière plan, Couleur des pixels
);
Un générateur de qr code et son code source
Exemple 1
Cette application utilise uniquement du php pour construire sa propre page HTML et afficher le résultat.
Création et modifications d'images à la volée
Présentation
La librairie GD de PHP comporte de nombreuses fonctions permettant d'agir sur les images. Cette librairie, permet entre autre de créer, modifier, editer les propriétés d'images, etc..
Afin de donner un aperçu des possibilités graphiques de GD2 et PHP, on donne ici la liste des fonctions disponibles et 2 exemples détaillés pour mieux en comprendre l'utilisation.
Fonctions
Commentaires
gd_info
Retourne des informations à propos de la bibliothèque GD installée
getimagesize
Retourne la taille d'une image
getimagesizefromstring
Récupère la taille d'une image depuis une chaîne
image_type_to_extension
Retourne l'extension du fichier pour le type d'image
image_type_to_mime_type
Lit le Mime-Type d'un type d'image
image2wbmp
Affichage de l'image vers le navigateur ou dans un fichier
imageaffine
Retourne une image contenant l'image source transformé, en utilisant optionnellement une zone de découpe
imageaffinematrixconcat
Concatène deux matrices
imageaffinematrixget
Retourne une image contenant l'image source transformée, en utilisant optionnellement une zone de découpe
imagealphablending
Modifie le mode de blending d'une image
imageantialias
Utiliser ou non les fonctions d'antialias
imagearc
Dessine une ellipse partielle
imagechar
Dessine un caractère horizontalement
imagecharup
Dessine un caractère verticalement
imagecolorallocate
Alloue une couleur pour une image
imagecolorallocatealpha
Alloue une couleur à une image
imagecolorat
Retourne l'index de la couleur d'un pixel donné
imagecolorclosest
Retourne l'index de la couleur la plus proche d'une couleur donnée
imagecolorclosestalpha
Retourne la couleur la plus proche, en tenant compte du canal alpha
imagecolorclosesthwb
Lit l'index de la couleur spécifiée avec sa teinte, blanc et noir
imagecolordeallocate
Supprime une couleur d'une image
imagecolorexact
Retourne l'index de la couleur donnée
imagecolorexactalpha
Retourne l'index d'une couleur avec son canal alpha
imagecolormatch
Fait correspondre un peu plus les couleurs de la version palette d'une image aux couleurs de sa version truecolor
imagecolorresolve
Retourne l'index de la couleur donnée, ou la plus proche possible
imagecolorresolvealpha
Retourne un index de couleur ou son alternative la plus proche, y compris le canal alpha
imagecolorset
Change la couleur dans une palette à l'index donné
imagecolorsforindex
Retourne la couleur associée à un index
imagecolorstotal
Calcule le nombre de couleurs d'une palette
imagecolortransparent
Définit la couleur transparente
imageconvolution
Applique une matrice de la convolution 3x3, en utilisant le coefficient et l'excentrage
imagecopy
Copie une partie d'une image
imagecopymerge
Copie et fusionne une partie d'une image
imagecopymergegray
Copie et fusionne une partie d'une image en niveaux de gris
imagecopyresampled
Copie, redimensionne, rééchantillonne une image
imagecopyresized
Copie et redimensionne une partie d'une image
imagecreate
Crée une nouvelle image à palette
imagecreatefromgd2
Crée une nouvelle image à partir d'un fichier GD2 ou d'une URL
imagecreatefromgd2part
Crée une nouvelle image à partir d'une partie de fichier GD2 ou d'une URL
imagecreatefromgd
Crée une nouvelle image à partir d'un fichier GD ou d'une URL
imagecreatefromgif
Crée une nouvelle image depuis un fichier ou une URL
imagecreatefromjpeg
Crée une nouvelle image depuis un fichier ou une URL
imagecreatefrompng
Crée une nouvelle image depuis un fichier ou une URL
imagecreatefromstring
Crée une image à partir d'une chaîne
imagecreatefromwbmp
Crée une nouvelle image depuis un fichier ou une URL
imagecreatefromwebp
Crée une nouvelle image depuis un fichier ou une URL
imagecreatefromxbm
Crée une nouvelle image depuis un fichier ou une URL
imagecreatefromxpm
Crée une nouvelle image depuis un fichier ou une URL
imagecreatetruecolor
Crée une nouvelle image en couleurs vraies
imagecrop
Recadre une image en utilisant les coordonnées, la taille, x, y, hauteur et largeur fournis
imagecropauto
Recadre une image automatiquement en utilisant un des modes disponibles
imagedashedline
Dessine une ligne pointillée
imagedestroy
Détruit une image
imageellipse
Dessine une ellipse
imagefill
Remplissage
imagefilledarc
Dessine un arc partiel et le remplit
imagefilledellipse
Dessine une ellipse pleine
imagefilledpolygon
Dessine un polygone rempli
imagefilledrectangle
Dessine un rectangle rempli
imagefilltoborder
Remplit une région avec une couleur spécifique
imagefilter
Applique un filtre à une image
imageflip
Retourne une image en utilisant le mode fourni
imagefontheight
Retourne la hauteur de la police
imagefontwidth
Retourne la largeur de la police
imageftbbox
Calcule le rectangle d'encadrement pour un texte, en utilisant la police courante et freetype2
imagefttext
Écrit du texte dans une image avec la police courante FreeType 2
imagegammacorrect
Applique une correction gamma à l'image GD
imagegd2
Génère une image au format GD2, vers le navigateur ou un fichier
imagegd
Génère une image au format GD, vers le navigateur ou un fichier
imagegif
Affichage de l'image vers le navigateur ou dans un fichier
imagegrabscreen
Capture l'écran complet
imagegrabwindow
Capture une fenêtre
imageinterlaceActive ou désactive l'entrelacement
imageistruecolor
Détermine si une image est une image truecolor
imagejpeg
Affichage de l'image vers le navigateur ou dans un fichier
imagelayereffect
Active l'option d'alpha blending, pour utiliser les effets de libgd
imageline
Dessine une ligne
imageloadfont
Charge une nouvelle police
imagepalettecopy
Copie la palette d'une image à l'autre
imagepalettetotruecolor
Convertit une image basée sur une palette en couleur vraie
imagepng
Envoie une image PNG vers un navigateur ou un fichier
imagepolygon
Dessine un polygone
imagepsbbox
Retourne le rectangle entourant un texte et dessiné avec une police PostScript Type1
imagepsencodefont
Change le codage vectoriel d'un caractère dans une police
imagepsextendfont
Étend ou condense une police de caractères
imagepsfreefont
Libère la mémoire occupée par une police PostScript Type 1
imagepsloadfont
Charge une police PostScript Type 1 depuis un fichier
imagepsslantfont
Incline une police de caractères PostScript
imagepstext
Dessine un texte sur une image avec une police PostScript Type1
imagerectangle
Dessine un rectangle
imagerotate
Fait tourner une image d'un angle
imagesavealpha
Configure l'enregistrement des informations complètes du canal alpha lors de sauvegardes d'images PNG
imagescale
Met à l'échelle une image en utilisant une hauteur et une largeur fournies
imagesetbrush
Modifie la brosse pour le dessin des lignes
imagesetinterpolation
Défini la méthode d'interpolation
imagesetpixel
Dessine un pixel
imagesetstyle
Configure le style pour le dessin des lignes
imagesetthickness
Modifie l'épaisseur d'un trait
imagesettile
Modifie l'image utilisée pour le carrelage
imagestring
Dessine une chaîne horizontale
imagestringup
Dessine une chaîne verticale
imagesx
Retourne la largeur d'une image
imagesy
Retourne la hauteur de l'image
imagetruecolortopalette
Convertit une image en couleurs vraies en image à palette
imagettfbbox
Retourne le rectangle entourant un texte et dessiné avec une police TrueType
imagettftext
Dessine un texte avec une police TrueType
imagetypes
Retourne les types d'images supportés par la version courante de PHP
imagewbmp
Affichage de l'image vers le navigateur ou dans un fichier
imagewebp
Affiche une image WebP vers un navigateur ou un fichier
imagexbm
Génère une image au format XBM
iptcembed
Intègre des données binaires IPTC dans une image JPEG
iptcparse
Analyse un bloc binaire IPTC et recherche les balises simples
jpeg2wbmp
Convertit une image JPEG en image WBMP
png2wbmp
Convertit une image PNG en image WBMP
Ecrire du texte à la volée sur une image avec gd2
Superposer une image sur une autre image à la volée avec gd2
Formulaire et envoi mail
Généralités
Il existe différents moyens pour envoyer un mail en PHP, le plus simple est d'utiliser la fonction mail() dont le format général est
mail($destinataire,$sujet,$message,$headers);
Les mails au format texte sont les plus simples car ils ne possèdent pas de mise en forme, pas d'images, ni police
spéciale, ni style, etc.. L'avantage de ce type de mail est qu'ils sont lisibles par tous et plus légers que leurs homologues
(X)HTML, ce qui est idéal pour les serveurs et les petites connexions.
Les en-têtes (headers)
Généralités.
Les en-têtes sont utilisés dès que l'on aura besoin de personnaliser le mail comme par exemple spécifier une adresse de réponse, plusieurs adresses d'envoi, des copies cachées, etc ...
Principaux en-têtes :
From1 : permet de spécifier l'adresse email de l'expéditeur. On peut mettre tout et n'importe quoi comme adresse mail, et donc vous comprennez maintenant pourquoi vous recevez des emails de bill gates en personne (sic) et autres SPAM.
On l'utilise comme ceci : From: "Nom de l'expéditeur" <adresse mail de l'expéditeur>
Reply-To : permet de spécifier l'adresse email de réponse.
On l'utilise comme ceci : Reply-To: adresse_mail
Cc: : permet de spécifier les autres destinataires qui recevront le mail en Cc (Carbon copy), c'est à dire que tous les destinataires pourront voir à qui le message a été transmis.
On l'utilise comme ceci : Cc:email1,email2,email3...
Bcc: : permet de spécifier les autres destinataires qui recevront le mail en Bcc (Blind carbon copy), c'est à dire que les destinataires ne pourront pas voir à qui le message a été transmis, il s'agit d'une copie cachée.
On l'utilise comme ceci : Bcc: email1,email2,email3...
Content-Type : cet en-tête permet de spécifier le type mime du mail et son charset (jeu de caractères).
On l'utilise comme ceci : Content-Type;text/plain; charset="iso-8859-1". Cet exemple défini un contenu de type texte associé à l'encodage iso-8859-1.
Content-Transfer-Encoding2 : permet de spécifier l'encodage du mail ou de l'une de ses parties (utile dans le cas d'un envoi texte + html par exemple). Il peut par exemple prendre les valeurs 7 et 8 bit (l'encodage 7 bit étant utilisé dans les pays anglophones n'ayant pas besoin de gérer les lettres accentuées).
On l'utilise comme ceci : Content-Transfer-Encoding: 8bit
X-Priority : défini le niveau de priorité du mail envoyé. Peut prendre une valeur variant de 1 à 5. Plus ce chiffre est faible, plus haute est la priorité.
On l'utilise comme ceci : X-Priority:2
Disposition-Notification-To : Permet de spécifier l'adresse mail de retour pour la confirmation de lecture.
Disposition-Notification-To:monwebfacile.free.fr
La fonction mail() prend maintenant un autre argument en paramètre, à savoir les headers que vous aurez tous séparés par des
sauts de ligne. Pour faire un saut de ligne dans le message, on utilise \n qui doit être entouré de guillemets doubles et non
de guillemets simples. En effet, "\n" est un seul caractère "interprété". '\n' ne fonctionnera donc pas.
Note1 : Attention - Il vaut mieux que l'adresse émettrice (from) ait le même nom de domaine que le serveur envoyant pour éviter d'être pris pour un spam et ainsi non envoyé.
Note2 : Pour transférer des données binaires, MIME propose cinq formats de codage pouvant être utilisé dans l'entête Transfer-encoding :
7bit : format texte codé sur 7 bits (pour les messages non accentués).
8bit : format texte 8 bits.
quoted-printable : format Quoted-Printable, recommandé pour les messages utilisant un alphabet codé sur plus de 7 bits (présence d'accents par exemple).
base64 : format Base 64, recommandé pour l'envoi de fichiers binaires en pièce jointe.
binary : format binaire, déconseillé.
MIME, est très ouvert et permet d'utiliser des formats de codage tiers.
Mail au format HTML
Pour envoyer un mail au format HTML il suffit de modifier le message pour le mettre au format HTML, et modifier le header "content-type" pour dire cette fois-ci que le message est au format HTML.
Voici ce que ça donne en pratique :
Mail au formats texte et HTML
Pour être compatible avec tous les clients mails, il existe une solution : envoyer
les mails aux formats texte et HTML. L'avantage de ce type d'envoi est que les clients mails qui n'acceptent pas le HTML
verront le mail au format texte tandis que les autres pourront profiter de la mise en page plus évoluée offerte par le HTML.
Voici un exemple de code permettant d'envoyer un mail au format texte et HTML :
Remarques
On génère d'abord une frontière (boundary) qui permettra au client mail de séparer les différents contenus. Cette frontière,
lorsqu'elle sera utilisée, sera entourée de deux tirets accolés. Après la frontière, on modifie éventuellement les headers
appliqués localement (ici le type du message).
MIME-Version: 1.0
MIME apporte à la messagerie les fonctionnalités suivantes :
Possibilité d'avoir plusieurs objets (pièces jointes) dans un même message,
Une longueur de message illimitée,
L'utilisation de jeux de caractères (alphabets) autres que le code ASCII,
L'utilisation de texte enrichi (mise en forme des messages, polices de caractères, couleurs, etc.),
Des pièces jointes binaires (exécutables, images, fichiers audio ou vidéo, etc.), comportant éventuellement plusieurs parties,
MIME utilise des directives d’entête spécifiques pour décrire le format utilisé dans le corps d’un message, afin de permettre au client de messagerie de pouvoir l'interpréter correctement.
MIME-Version: est la version du standard MIME utilisée dans le message. Actuellement seule la version 1.0 existe.
Content-Type: multipart/alternative
multipart (standard MIME) permet de définir des messages composites, c'est-à-dire des messages comportant plusieurs pièces jointes, éventuellement emboîtées.
Chaque séparateur délimite un contenu commençant par les entêtes Content-Type et Content-Encoding. Il est essentiel que la valeur de ce séparateur n'existe pas dans le contenu du message.
Il existe plusieurs types de séparateurs :
multipart/mixed définit une suite de plusieurs éléments,
multipart/alternative définit différentes alternatives pour une même information, par exemple un message au format texte et HTML. Si le client de messagerie est capable et configuré pour l'afficher avec une mise en forme, il affichera la version HTML, sinon il affichera la version texte,
multipart/parallel définit des données présenter en même temps (son et image par exemple),
multipart/signed définit une signature numérique pour les données du message,
multipart/related définit des informations liées entre elles.
Encrypted pour envoyer un contenu chiffré. Sa première partie définit les informations nécessaires pour décrypter la seconde partie (application/octet-stream).
Envoyer des mails avec pièces jointes.
Les frontières (boundary) dans les mails permettent d'envoyer aussi des pièces jointes. Les pièces jointes sont encodées en Base 64 à l'aide de la fonction PHP base64_encode().
Cet encodage est fait pour permettre aux informations binaires d'être manipulées par les systèmes qui ne gèrent pas correctement les 8 bits, comme les corps de mail.
Voici un exemple :
Remarques
file_get_contents('nom_du_fichier.jpg') retourne tout le fichier dans une chaîne. On peut aussi ne retourner qu'une partie du fichier en utilisant deux paramètres supplémentaires : offset de départ et longueur.
base64_encode(file_get_contents('nom_du_fichier.jpg')) retourne les données encodées, sous la forme d'une chaîne de caractères ou FALSE si une erreur survient.
chunk_split(base64_encode(file_get_contents('nom_du_fichier.jpg'))) retourne les données formatées pour suivre la norme RFC 2045.
Exemple
Un petit Forum sur votre site
Cet exemple présente la construction d'un petit Forum qui aprés adaptation peut être sympa sur votre site.
Exemple
Des fonctions utiles
La fonction str_replace(find,replace,string,count)
Utilité
Cette fonction permet de remplacer des caractères par d'autres caractères dans une chaine.
Paramètres
Paramètres
Description
find
Requis : le caractère ou la chaine à rechercher
replace
Requis : caractère ou chaine remplançant le caractère ou la chaine trouvée (find)
string
Requis : la chaine à analyser
count
Optionnel : variable donnant le nombre de remplacement effectués
Caractères spécifiques pouvant être remplacés
Syntaxe
Description
\f
caractère break/form feed.
\p
retour à la ligne (CR/LF) (paragraphe) (fichiers DOS).
\r
retour à la ligne (CR seulement) (paragraphe) (fichiers MAC)
\n
retour à la ligne (LF seulement) (paragraphe) (fichiers UNIX)
\t
Caractère TAB.
\d
digits
\D
tous caractères "blancs" (space, tab, form feed, etc.), sauf retour ligne
\s
tous caractères non "blancs" (space, tab, form feed, etc.), sauf retour ligne
\v
caractère TAB vertical
\w
tous caractères alphanumériques incluant sous-ligné
\W
tous caractères à l'exeption des caractères alphanumériques et sous-ligné
Exemples
Définitions
Fonctions
Cette fonction permet de supprimer tous les espaces dans un chaine. Par exemple vous permettez la saisie d'un numéro de téléphone sous la forme 06 01 02 03 04, mais au niveau du test et du stockage vous voulez 0601020304