Carnet Web de Poy

Aller au contenu | Aller au menu | Aller à la recherche

dimanche, avril 2 2006

Envoi de mails avec la Classe Sendmail

La classe Sendmail est une surcouche aux classes Mail et Mail_Mime de PEAR, permettant d'envoyer des mails, de manière relativement simplifiée. Ainsi, pour envoyer un mail au format texte/HTML, il suffit juste de faire :

$mail = new Sendmail($driver, $params);
$mail->setFrom($from);
$mail->setSubject($subject);
$mail->setRecipients(array('to' => $to, 'cc' => $cc, 'bcc' => $bcc));
$mail->setText($text_version);
$mail->setHtml($html_version);
$mail->send();

où $driver et $param sont les paramètres passés à la méthode factory() de la classe PEAR::Mail.

De plus, il est possible d'attacher à un objet Sendmail des objets observateurs, qui vont être prévenus par l'objet Sendmail dès qu'un mail est en cours d'envoi. Cela peut par exemple servir pour enregistrer le mail dans une base de données, ou à le stocker dans un fichier mbox :

$mail = new Sendmail($driver, $params);
$mail->attach(new Sendmail_Mbox('/tmp/mbox'));
$mail->attach(new Sendmail_DB($db, 'INSERT INTO mail VALUES (null,?,?,?,?,?,?,?)'));

Qui a dit qu'envoyer des mails était compliqué ?

vendredi, mars 17 2006

Liste de lecture recommandée pour PHP

IBM developerWorks a compilé une liste de lecture recommandée pour PHP, qui fournit des ressources pour les développeurs et administrateurs, couvrant toute la gamme de questions que l'on peut se poser lorsque l'on adopte PHP.

On trouve dans cette liste des tas de bonnes références, que l'on soit un débutant absolu en PHP, ou que l'on veuille aborder des sujets plus pointus, comme par exemple la création d'extensions PHP, ou bien l'écriture de code performant et sécurisé. Sont aussi recensés de nombreux livres et blog parlant de PHP.

Un must pour tout développeur PHP qui se respecte.

Génération d'un fichier RDF avec Savant3

Savant3 est un système de template "minimaliste" pour PHP5.

Contrairement à certains autres systèmes de template, Savant ne rajoute pas une couche d'abstraction au dessus de PHP, il ne "compile" pas ses templates en PHP, et ne nécessite pas l'apprentissage d'un nouveau language pour générer un template.

Au lieu de cela, Savant utilise directement PHP en tant que language natif, ce qui le rends extrèmement léger et puissant (il profite ainsi de toutes les fonctions disponibles en PHP).

A la demande de mon ami Claude, voyons comment générer, à l'aide de ce système, un fichier RDF pour XUL :

Tout d'abord, le template (rdf.tpl.php) :

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:ANIMALS="http://www.example.com/rdf#">
  <RDF:Seq RDF:about="http://www.example.com/all-animals">
    <?php foreach ($this->animals AS $animal) { ?>
    <RDF:li>
      <RDF:Description RDF:about="http://www.example.com/<?php echo htmlspecialchars($animal['name']); ?>">
        <ANIMALS:name><?php echo htmlspecialchars($animal['name']); ?></ANIMALS:name>
        <ANIMALS:species><?php echo htmlspecialchars($animal['species']); ?></ANIMALS:species>
        <ANIMALS:class><?php echo htmlspecialchars($animal['class']); ?></ANIMALS:class>
      </RDF:Description>
    </RDF:li>
    <?php } ?>
  </RDF:Seq>
</RDF:RDF>

Maitenant, voyons le code PHP qui va nous permettre de remplir ce template avec des données provenant d'une source de données externe (base de données par ex.).

<?php

// Récupére les données qui vont venir alimenter le template

$from_db = array(
    array('name'=>'Lion', 'species'=>'Panthera leo', 'class'=>'Mammal'),
    array('name'=>'Tarantula', 'species'=>'Avicularia avicularia', 'class'=>'Arachnid'),
    array('name'=>'Hippopotamus', 'species'=>'Hippopotamus amphibius', 'class'=>'Mammal')
);

// Crée une nouvelle instance du systeme template Savant3

require_once 'Savant3.php';
$template = new Savant3();

// Assigne les données dynamiques au template

$template->assign('animals', $from_db);

// Affiche le template généré

echo $template->fetch('./rdf.tpl.php');

?>

et voilà, le tour est joué.

jeudi, mars 16 2006

Introduction au package Var_Dump

Var_Dump est un package PEAR qui étend la fonction var_dump de PHP.

La fonction var_dump de PHP affiche les informations structurées d'une variable, y compris son type et sa valeur, les tableaux et les objets étant explorés récursivement.

Var_Dump se base sur le résultat de cette fonction, mais le complête, en proposant différents modèles de rendus en sortie : texte brut, table HTML, XHTML, XML... Chaque rendu étant entièrement configurable selon les besoins.

Le rendu par défaut est "XHTML_Text" (affichage textuel, calqué sur la fonction var_dump, mais agrémenté de tags XHTML pour permettre de styler les différents composants (type, clef, valeur ...)

Utilisation basique (affichage d'une variable) :

Var_Dump::display($_GLOBALS);

Pour changer le moteur de rendu, il convient d'appeler la méthode displayInit() avant tout appel à la méthode display() :

Var_Dump::displayInit(array('display_mode' => 'XHTML_Table'));

Var_Dump::display($_GLOBALS);

Il est aussi possible d'adapter un peu plus finement la configuration du moteur de rendu :

Var_Dump::displayInit(
    array('display_mode' => 'XHTML_Table')
    array(
        'before_type' => '<em>',
        'after_type'  => '</em>',
        'start_table' => '<table class="foo">',
        'end_table'   => '</table>',
    )
);

Var_Dump::display($_GLOBALS);

Le package est disponible pour les deux versions majeures de PHP :

mardi, mars 14 2006

Ouverture du Toolbox PEAR Channel

Le channel PEAR Toolbox est une bibliothèque simple de classes, et une suite de composants réutilisables pour PHP5.

Pour installer des packages depuis le channel PEAR Toolbox, la manipulation est très simple, il suffit juste d'avoir un environnement PEAR 1.4 fonctionnel (pour plus d'information sur PEAR, et son installation, voir le manuel PEAR), et de suivre les étapes suivantes :

  • Pour ajouter le channel à votre installation PEAR, utiliser : pear channel-discover toolbox.aldabase.com
  • Une fois ceci fait, vous pouvez alors installer un package en utilisant : pear install toolbox/nom_du_package