Category Archives

8 Articles
Utiliser un serveur SMTP externe dans WordPress 3.2+

Utiliser un serveur SMTP externe dans WordPress 3.2+

by Throrïn 3 Comments

Bon, cet article sera fait à chaud après avoir bataillé entre WordPress et un tutoriel existant mais pas à jour. Nous allons donc voir comment utiliser un serveur SMTP externe pour l’envoi d’emails avec WordPress.

Pourquoi faire cela quand WordPress doit normalement tout gérer seul (en théorie). Et bien car parfois, il arrive qu’un serveur n’ai pas de serveur de messagerie installé. Dans ce cas, il se peut que WordPress ne vous renvoie pas d’erreur lors de l’envoie du mail et que celui-ci soit perdu avant d’avoir quitté le serveur.

Pour ce faire, il est possible de modifier le comportement de WordPress et de lui obliger de passer par un serveur SMTP externe à votre serveur Web. Après les explications de base, ouvrez votre WordPress et rendez-vous dans le dossier /wp-includes/. Nous allons enfin mettre les mains dans le cambouis.

Tout d’abord ouvrez le fichier pluggable.php et allez jusqu’à la ligne 462. Vous devriez avoir ceci :

$phpmailer->IsMail();

Nous allons la remplacer par cela :

$phpmailer->IsSMTP();

Cette modification va tout simplement changer la méthode d’envoie des mails par WordPress. Nous lui indiquons ici de passer par les réglages SMTP.

Maintenant, nous allons toucher au fichier class-phpmailer.php. Ce fichier contient la classe PhpMailer qui s’occupe d’envoyer les e-mails. Qu’allons-nous faire dans ce fichier ? Juste renseigner les informations de notre serveur. Tout ceci se déroule entre la ligne 180 et la ligne 217 :

public $Host          = 'adresse de votre serveur';

/**
 * Sets the default SMTP server port.
 * @var int
 */
public $Port          = 25; //port de votre serveur

/**
 * Sets the SMTP HELO of the message (Default is $Hostname).
 * @var string
 */
public $Helo          = ''; //perso je ne m'en sers pas

/**
 * Sets connection prefix.
 * Options are "", "ssl" or "tls"
 * @var string
 */
public $SMTPSecure    = ''; //Si vous avez besoin d'une authentification SSL ou TLS, renseignez le.

/**
 * Sets SMTP authentication. Utilizes the Username and Password variables.
 * @var bool
 */
public $SMTPAuth      = false; //Metre à true si vous devez vous identifier dessus

/**
 * Sets SMTP username.
 * @var string
 */
public $Username      = ''; //login du serveur SMTP

/**
 * Sets SMTP password.
 * @var string
 */
public $Password      = ''; //Mot de passe du serveur SMTP

Voilà, normalement avec tout ceci, vous pouvez maintenant envoyer convenablement des e-mails avec WordPress via un serveur SMTP externe.

Utiliser le debugger XDebug avec NetBean

Utiliser le debugger XDebug avec NetBean

by Throrïn 0 Comments

Après avoir vu comment configurer les différentes versions de Zend, développer en PHP, nous allons maintenant voir comment debugger son code simplement avec Netbean et l’extension PHP XDebug.

XDebug qu’est-ce exactement? XDebug est une extension PHP gérant toute la partie debug. Dès qu’il est installé et activé, si vous faites une erreur PHP, XDebug vous affiche l’erreur avec la pile d’erreur à côté afin de vous aider à la corriger :

Julien Pauli a rédigé un très bon article de présentation et d’utilisation de XDebug que je vous invite à lire. XDebug va surtout nous servir ici à effectuer du debuggage comme sous Java avec des breakpoints, savoir quelle sera la valeur des variables au moment du breakpoint et savoir surtout si votre programme tourne rond.

Avant de commencer, assurez vous que l’extension xdebug est bien présente sur votre serveur (lamp pour linux, wamp ou easyphp pour windows et mamp pour mac) via la commande php -m ou via le phpinfo. Si XDebug n’est pas installé, vous avez juste à l’installer via la commande suivante pour linux Ubuntu :

apt-get install php5-xdebug

Normalement, via php -m vous devriez obtenir ceci :

Si vous ne voyez pas XDebug dans la partie [Zend Modules], vous devez configurer l’extension comme ceci directement dans son fichier /etc/php5/conf.d/xdebug.ini :

zend_extension=/usr/lib/php5/20090626/xdebug.so

Ensuite relancez apache et le tour est joué. Maintenant, nous allons nous intéresser à la configuration de XDebug pour le faire fonctionner avec Netbean. Tout d’abord, pour que tout fonctionne, nous devons retoucher au fichier de configuration de XDebug comme ceci : /etc/php5/conf.d/xdebug.ini

zend_extension=/usr/lib/php5/20090626/xdebug.so

;on active le debug à distance
xdebug.remote_enable=on
;on utilise le protocole dbgp
xdebug.remote_handler="dbgp"
;le port à appeler pour debugger avec xdebug
xdebug.remote_port=9000
;IP du serveur XDebug, ici on pet l'ip d'eth0
xdebug.remote_host=192.168.128.128
;clé utilisée pour identifier notre ide
xdebug.idekey="netbeans-xdebug"
;permet la connexion à distance
xdebug.remote_connect_back=1

A la ligne 10, l’ip utilisée est l’ip du serveur où nous requetons. Si le serveur est en local par rapport à l’ide et au navigateur, nous aurions mis 127.0.0.1. Ici, vu que le serveur n’est pas sur la même machine que l’ide, nous mettons son ip sur le réseau. A la ligne 12, l’idekey est la clé rentrée dans votre ide, par défaut dans netbean, elle vaud netbeans-xdebug.

C’est pour ça que j’ai mis cette idekey. Maintenant que Xdebug est configuré comme il faut et votre serveur apache relancé, nous allons maintenant nous intéresser à Netbean. Pour debugger, j’utilise projet tout bête. Voici les sources : index.php

<html> 
    <body>
        <?php
            for ($index = 0; $index < 45; $index++) {
                echo $index;
            }
        ?>
    </body>
</html>

Rendez-vous dans netbean, faites clic droit sur votre projet => propriété. Ensuite rendez-vous dans la section Run Configuration et changez la ligne Project Url par l’adresse que vous devez rentrer dans votre navigateur pour accéder à votre projet.

 

Aller sur la page que vous voulez de votre projet puis rajoutez un point d’arrêt en cliquant une fois sur le numéro de la ligne souhaitée :

Vous êtes normalement prêt à debugger votre application mais avant ça, regardons de plus prêt la barre de debuggage de Netbean :

  • Bouton 1 : Lance le projet normalement
  • Bouton 2 : Lance le projet en mode Debug
  • Bouton 3 : Lance le projet en mode profilage
  • Bouton 4 : Arrête le mode Debug
  • Bouton 5 : Continuer jusqu’au prochain breakpoint
  • Bouton 6 : Exécute une ligne de source. Si la ligne de source contient un appel, il exécute toute la routine sans rentrer dans les instructions individuelles.
  • Bouton 7 : Exécute une ligne de source. Si la ligne de source contient un appel, s’arrête juste avant l’exécution de la première instruction de la routine appelée.
  • Bouton 8 : Sort de la fonction courante
  • Bouton 9 : Se déplace jusqu’au curseur

Maintenant il ne reste plus qu’à enregistrer les variables à surveiller lors du debug. Pour se faire, vous devez surligner la variable que vous voulez puis faire la manipulation CTRL + MAJ + F7. Normalement, vous devriez avoir la fenêtre suivante :

Pour voir vos variables, vous devez ouvrir la fenêtre « Variables » via le menu Fenêtres => Débogage => Variables ou via le raccourcis ALT + MAJ + 1. Et vous devriez avoir ceci en bas de l’ide :

Bien, il ne vous reste plus qu’à appuyer sur le bouton ] et de regarder ce qu’il se passe.

Normalement, Netbean lance le navigateur vers notre page web en mettant en argument ?XDEBUG\_SESSION\_START=netbeans-xdebug. Il envoie au serveur web que nous commençons une session de debug avec l’idekey netbeans-xdebug. Du côté de l’ide, on peut voir que le Curseur s’est positionné à l’entrée de notre balise PHP. (c’est la ligne verte).

En cliquant sur continuer , notre curseur s’arrête sur notre breakpoint et nous observons que notre variable $index change d’état.

Elle passe au type int avec comm valeur 0. Si on reclique sur continuer, on continue dans notre boucle et $index s’incrémente de 1. Voilà, avec cet exemple tout simple nous venons de voir comment debugger une application PHP.

Si vous avez un problème avec ce tutoriel, ou des questions, n’hésitez pas pas.

Installation de PHP 5.2 dotdeb sur Ubuntu

Installation de PHP 5.2 dotdeb sur Ubuntu

by Throrïn 0 Comments

Aujourd’hui je vais vous faire résoudre un problème récurent que j’ai eu sur mes serveurs. L’installation de PHP 5.2.13 sur Ubuntu en utilisant les paquets dotdeb.

Pourquoi passer par ces paquets ? Et bien c’est plus simple que de compiler soit même PHP et ça évite d’oublier des dépendances. Le problème des paquets dotdeb c’est qu’ils sont prévus pour Debian or, Ubuntu utilise des Library avec quelquefois des noms différents. Je vais donc vous expliquer pas à pas l’installation de cette version.

Cette procédure ne marche plus à partir d’Ubuntu 10.04 LTS. D’un car les dépendances ne sont plus disponibles, de deux car une version plus récente de PHP est disponible.

Tout d’abord, il vous faut ajouter les sources APT pour installer tout un serveur LAMP @dotdeb dans le fichier /etc/apt/sources.list:

deb http://packages.dotdeb.org stable all 
deb-src http://packages.dotdeb.org stable all

Ensuite, il vous faudra installer apache :

sudo aptitude install apache2 apache2-mpm-prefork apache2-prefork-dev apache2-utils apache2.2-common

Ensuite, si nécessaire, installez le serveur MySQL qui va bien:

sudo aptitude install mysql-client mysql-client-5.1 mysql-common mysql-server mysql-server-5.1 mysql-server-core-5.1

Pour finir nous allons installer toutes les Library requises pour l’installation de PHP.

sudo aptitude install libtidy-dev curl libcurl4-openssl-dev libcurl3 libcurl3-gnutls zlib1g zlib1g-dev libxslt1-dev libzip-dev libzip1 libxml2 libsnmp-base libsnmp15 libxml2-dev libsnmp-dev libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev zlib1g zlib1g-dev libfreetype6 libfreetype6-dev libbz2-dev libxpm4-dev libmcrypt-dev libmcrypt4

Voilà. Malgré tout, il nous faut installer 3 Library introuvables par aptitude mais nécessaires à l’installation des paquets dotdeb. Nous récupérons les fichiers nécessaires avec l’utilitaire wget.

32bits:

wget http://us.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb
wget http://us.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu0.2_i386.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/libt/libtool/libltdl3_1.5.26-1ubuntu1_i386.deb

64bits:

wget http://us.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5ubuntu2_amd64.deb
wget us.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu0.2_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/main/libt/libtool/libltdl3_1.5.26-1ubuntu1_amd64.deb

Et nous installons les différents fichiers :

32bits:

sudo dpkg -i libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb
sudo dpkg -i libicu38_3.8-6ubuntu0.2_i386.deb
sudo dpkg -i libltdl3_1.5.26-1ubuntu1_i386.deb

64bits:

sudo dpkg -i libkrb53_1.6.dfsg.4~beta1-5ubuntu2_amd64.deb
sudo dpkg -i libicu38_3.8-6ubuntu0.2_amd64.deb
sudo dpkg -i libltdl3_1.5.26-1ubuntu1_amd64.deb

Et voilà, il n’y a plus qu’à installer PHP :

sudo apt-get update
sudo apt-get install php5

Rajoutez les extensions utiles :

sudo apt-get install php5-apc php5-curl php5-gd php5-mcrypt php5-mhash php-pear php5-mysql

Voilà, maintenant vous avez un serveur LAMP fonctionnel avec PHP 5.2.13.

Initiation à PHING

Initiation à PHING

by Throrïn 1 Comment

Aujourd’hui, nous allons voir comment fonctionne PHING. Je vais donc vous montrer comment réaliser un script simple affichant un message sur notre terminal, puis copiant certains fichiers dans un autre dossier.

Pour les articles traitants de PHING, j’utilise le système Ubuntu. Vous devrez donc convertir certaines commandes en fonction de votre système.

Avant tout, il vous faut installer PHING. PHING est installable via PEAR. Vous devez donc, installer la Library PHP-PEAR. Pour ce faire, dans un terminal vous devrez juste taper :

sudo apt-get install php-pear

Ensuite, quand pear est installé, vous devrez taper les commandes suivantes pour pouvoir installer PHING :

sudo pear channel-discover pear.phing.info
sudo pear install phing/phing

Pour mettre à jour PHING vous aurez juste à taper

sudo pear update phing/phing

Pour vérifier l’installation de PHING, tapez juste ceci dans votre console : phing Et voici le retour : Buildfile: build.xml does not exist!.

Bien, maintenant que PHING est correctement installé, nous allons nous attaquer à notre projet.

Pour ce faire nous aurons besoin du fichier index.php contenant juste les lignes suivantes : Nous placerons ce fichier dans un dossier vide du nom de phing. Dans ce dossier nous allons aussi créer notre fichier build.xml contenant tout notre programme phing.

Le but de ce petit programme sera d’afficher un message et de copier ce fichier dans un nouveau dossier dans /var/www. Ce nouveau dossier aura le nom d’un projet saisit dans notre application.

Voici le script de notre application :

<?xml version="1.0" encoding="UTF-8"?>
<project name="TutoPHING" default="build">
    <propertyprompt propertyName="projet" defaultValue="projet"
        promptText="Entrez le nom de votre projet : " />
    <target name="build">
        <echo>Création du projet ${projet}</echo>
        <mkdir dir="/var/www/${projet}" />
        <echo>Copie du fichier index.php</echo>
        <copy file="index.php" tofile="/var/www/${projet}/index.php" 
              overwrite="true"/>
        <echo>Le programme est terminé</echo>
    </target>
</project>

Un projet est toujours contenu dans la balise <project>. Dedans on renseigne le nom de notre application ainsi que le target par défaut.

Si vous renseignez un target par défaut inexistant, PHING vous retournera une erreur.

Ensuite, vous l’aurez compris, la balise <target> correspond un peu à une fonction. Nous lui définissons un nom et nous pouvons aussi dire quels sont les targets nécessaires à son exécution.

Voilà ce qu’il y a à savoir sur l’architecture d’une application PHING. Pour plus de renseignements, je vous conseille d’aller voir là : documentation. Sinon posez vos questions.

Si nous lançons le programme, voici ce que ça nous retourne :

C’était qu’un bref aperçu de PHING, vous pouvez vous en servir pour contrôler les normes de codage de vos projets, générer simplement un nouveau projet à la manière de Zend Too, ou, tout simplement, la génération de Template PHP pour vos différentes classes.

J’espère que ce bref aperçu vous aura fait apprécier PHING.

Phing : PHing Is Not GNU make

by Throrïn 0 Comments

Au travail, j’ai découvert une extension PEAR pour PHP vraiment utile. Il s’agit de Phing (PHing Is Not GNU make). Phing est un projet servant à construire des projets ou à effectuer différentes étapes de façon automatique.

Pour résumer, C/C++ a son make, Linux a ses scripts bash, Windows a ses batch et PHP a Phing. Phing utilise le langage XML pour formater les scripts.

Je l’ai trouvé simple à prendre en main (en regardant la doc). Il intègre des solutions FTP, SQL (avec PDO), commandes systèmes et les règles de programmation de base (if, …). Pour vous donner une petite idée des performances de Phing, j’ai dû créer aujourd’hui un script permettant la création d’un SVN repository avec, la création sur le serveur ftp du dossier du projet (pour le site web) et pour finir à créer l’utilisateur et la base de données rattachée sur un autre serveur MySQL.

Je pense que j’aurais pu faire l’équivalent en scripts bash sur mon serveur Ubuntu mais on m’a demandé de l’effectuer avec ce langage. Des améliorations de ce script m’ont été demandées donc je vais bien voir ce qu’il est vraiment possible.

Voici justement un petit aperçu de script Phing (fournit dans le quickstart de la documentation).

<?xml version="1.0" encoding="UTF-8"?>
<project name="FooBar" default="dist">
    <!-- ============================================  -->   
    <!-- Target: prepare                               -->
    <!-- ============================================  -->
    <target name="prepare">
        <echo msg="Making directory ./build" />
        <mkdir dir="./build" />
    </target>



    <!-- ============================================  -->
    <!-- Target: build                                 -->
    <!-- ============================================  -->
    <target name="build" depends="prepare">
        <echo msg="Copying files to build directory..." />
        <echo msg="Copying ./about.php to ./build directory..." />
        <copy file="./about.php" tofile="./build/about.php" />
        <echo msg="Copying ./browsers.php to ./build directory..." />
        <copy file="./browsers.php" tofile="./build/browsers.php" />
        <echo msg="Copying ./contact.php to ./build directory..." />
        <copy file="./contact.php" tofile="./build/contact.php" />
    </target>



    <!-- ============================================  -->
    <!-- (DEFAULT)  Target: dist                       --> 
    <!-- ============================================  -->
    <target name="dist" depends="build">
        <echo msg="Creating archive..." />
        <tar destfile="./build/build.tar.gz" compression="gzip">
            <fileset dir="./build">
                <include name="*" />
            </fileset>
        </tar>
        <echo msg="Files copied and compressed in build directory OK!" />
    </target>
</project>

Et pour plus d’infos, je vous invite à aller sur leur site.