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"] |