Chapitre 7
COMPLEMENTS DE PHP
 
 
Précédent Suivant
 

Compléments de PHP
Générer autre chose que du HTML
* PHP peut générer autre chose que du HTML
* Une image (GIF, JPEG, PNG...)
* Bibliothèque GD2
* Permet de lire des images
* Permet de créer ses propres images
* Exemple: compteur de visite
* <img src="compteur.php"/>
* Un document PDF
* Bibliothèques PDFLib et FPDF
* Permet de créer ses propres PDF
* Exemple: générer une facture pour un client
* Nécessité d'ajouter des modules à PHP
* Modifier le fichier "php.ini"
* Ne sont pas toujours installés
Générer une image avec PHP
* Extrait d'un code PHP pour compteur de visite
header("Content-type: image/png");
$requete = "SELECT * FROM global WHERE (name='counter')";
$result = @mysqli_query($cnx,$requete);
$enr = @mysqli_fetch_object($result);
$compteur = $enr->value;
$image = imageCreate(34,7);
$noir = imageColorAllocate($image,0,0,0);
$blanc = imageColorAllocate($image,255,255,255);
imageFilledRectangle($image,0,0,34,7,$blanc);
imageString($image,1,0,0,$compteur,$noir);
imagePNG($image);
imageDestroy($image);
Générer un document PDF avec PHP
* Extrait d'un code PHP pour "Hello World"
header("Content-Type: application/pdf");
header("Content-Disposition: filename=hello.pdf");
$pdf = PDF_new();
pdf_begin_page_ext($pdf,595,842,"");
$fonte = pdf_load_font($pdf,"Helvetica-Bold","winansi","");
pdf_setfont($pdf,$fonte,24.0);
pdf_set_text_pos($pdf,50,700);
pdf_show($pdf,"Hello world !");
pdf_end_page_ext($pdf,"");
pdf_end_document($pdf,"");
$buffer = pdf_get_buffer($pdf);
echo $buffer;
Envoi d'email par PHP
* Peut être utile pour les bulletins d'information (ou "newsletters")
* boolean mail(string $destinataire,string $sujet,
string $message,string $entetes)
* $entetes: entêtes du message
* Adresse de l'expéditeur
* Adresse de retour
* Type de contenu
* Certains fournisseurs désactivent cette fonctionnalité
* Permet d'éviter certaines formes de spam
* D'autres proposent leur propre fonction
* Mécanisme similaire
Construction des messages
* Message = entêtes + corps
* Format d'un entête
* nom_entete: contenu_entete
* Attention à la casse dans le nom des entêtes
* Exemple
<?php
$entetes = "From: bruno@nawouak.net\n";
$entetes .= "Reply-To: bruno@nawouak.net\n";
$message = "Salut !\n\n";
$message .= "Je teste l'envoi de mail par PHP.\n";
$message .= "Confirme-moi que ça fonctionne.\n\n";
$message .= "Ciao !";
mail("copain@gmail.com","Test PHP",$message,$entetes);
?>
Accès aux fichiers sur le serveur
* PHP peut accéder à des fichiers sur le serveur
* Accès uniquement aux fichiers dans la zone HTTP
* Fichiers accessibles par URL
* Accès aux fichiers protégés par fichier ".htaccess"
* Fichier ".htaccess" limite l'accès par HTTP
* Manipulations possibles par PHP
* Consultation
* Liste des fichiers d'un répertoire
* Contenu d'un fichier
* Modification
* Renommage d'un fichier
* Modification du contenu d'un fichier
* Suppression fichier et répertoire
* Création fichier et répertoire
Consultation d'un répertoire
* Ouverture du répertoire
* $dossier = opendir($chemin);
* Parcours des éléments du répertoire
* while ($element = readdir($dossier)) ...
* Type des éléments
* Fichier: if (is_file($element)) ...
* Répertoire: if (is_dir($element)) ...
* Extrait du code PHP d'un diaporama
$chemin = "photos/";
$dossier = opendir($chemin);
while ($fichier = readdir($dossier)) {
if (is_file($chemin.$fichier)) {
echo "<p><img src='$chemin$fichier'/></p>";
}
}
closedir($dossier);
Manipulation des fichiers
* Copier un fichier
* copy($chemin_original,$chemin_copie);
* Renommer / déplacer un fichier
* rename($chemin_ancien,$chemin_nouveau);
* Suppression d'un fichier
* unlink($chemin);
* Créer un répertoire
* mkdir($chemin,$droits);
* Droits d'accès: $droits = "0700"
* Détruire un répertoire vide
* rmdir($chemin);
Fichiers binaires en base de données
* Avantages
* Pas de problèmes avec les droits des fichiers
* Sauvegarde des données facilitée
* Plus de risque d'incohérence entre les fichiers et la base
* Données protégées: elles ne sont pas accessibles par URL
* Inconvénients
* Taille importante de la base de données
* Ralentissement de la base de données
* Impossible d'accéder aux fichiers directement par URL
* Attention à la requête "SELECT * from image"
* Attribut de type "BLOB"
* Binary Large OBject
* BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB
Récupération d'une image dans une table
* Table "photo"
* "id": numéro de la photo
* "png": contenu binaire de la photo
* Extrait du code PHP
$id = @$_GET["id"];
$requete = "SELECT * FROM photo WHERE id='$id'";
$result = @mysqli_query($cnx,$requete);
$enr = @mysqli_fetch_object($result);
if ($enr) {
header("Content-type: image/png");
echo $enr->png;
}
Dépôt ("upload") d'un fichier sur le serveur
* Formulaire
* Méthode "post"
* Encodage "multipart/form-data" (attribut "enctype")
* Insérer un champ de type "file"
* <input type="file" name="logo"/>
* A la soumission du formulaire
* Transmission du fichier au serveur
* Stockage du fichier dans une zone temporaire
* Le fichier porte un nom différent de celui d'origine
* PHP: accès au fichier par le tableau "_FILES"
* Chemin d'origine du fichier
* $_FILES["logo"]["name"]
* Chemin de la copie sur le serveur
* $_FILES["logo"]["tmp_name"]
* Taille du fichier
* $_FILES["logo"]["size"]