Jonathan Petitcolas - Les fantasques tribulations d’un geek déluré.

Archive for the ‘PHP’ Category

Ayant une nouvelle fois complètement migré de mon Windows Vista bien trop peu réactif vers une Ubuntu 8.10 (mon précédent billet n’a fait qu’attiser mes envies :p), j’ai donc dû réinstaller entièrement mon serveur de développement Apache2. Et plus particulièrement le module LDAP, nécessaire pour différents développements au sein de SUPINFO.

Sous Ubuntu, cela est très simple et se réalise en trois étapes. Tout d’abord, il faut installer le paquet du module.

  1. # apt-get install php5-ldap

Une fois ceci fait, on active le module au sein de la configuration d’Apache. Deux solutions : soit nous y allons en warrior, et nous éditons à la main le fichier de configuration (un simple point virgule à enlever), soit on y va tout en finesse avec la commande a2enmod :

  1. # a2enmod ldap

Enfin, il ne nous reste plus qu’à relancer notre serveur.

  1. # /etc/init.d/apache2 restart

Et c’est tout ! Vous pouvez donc à présent vous connecter via PHP à votre serveur LDAP ! :)

  • 0 Comments
  • Filed under: Linux, PHP
  • Lire un flux RSS avec PHP 5 et SimpleXML

    Dans le cas où vous souhaiteriez réaliser votre propre agrégateur de flux RSS en PHP 5 objet, une méthode très simple s’offre à vous, grâce à l’extension SimpleXML. Cette extension permet de naviguer très simplement dans vos fichiers XML, dont un flux RSS fait partie.

    Tout d’abord, petit rappel de la structure d’un flux RSS :

    <rss version=”2.0″>
       <channel>
          <title>Jonathan Petitcolas</title>
          <description>Les fantasques tribulations d’un geek déluré - Flux RSS</description>
          <lastBuildDate>Wed, 27 Sep. 2008 00:30:30 -0700</lastBuildDate>
          <link>http://www.jonathan-petitcolas.com</link>
          <item>
             <title>Mon dernier article</title>
             <description>Un dernier article parlant d’un flux RSS</description>
             <pubDate>Wed, 27 Sep. 2008 00:30:30 -0700</pubDate>
             <link>http://www.jonathan-petitcolas.com/</link>
          </item>
       </channel>
    </rss>

    Comme on peut le constater, le fichier est relativement simple. Toutes les news d’un site sont dans des balises item. Il vous suffit donc de les récupérer, et de les parcourir. Au choix, soit vous pouvez utiliser des expressions régulières (solution très bourrine, mais qui fonctionnera), soit on utilise SimpleXML, une extension disponible depuis PHP 5 qui vous permettra de naviguer très simplement dans n’importe quel fichier XML.

    Tout d’abord, chargeons notre fichier XML.

    1. $xml = simplexml_load_file("http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/world/rss.xml");

    Une fois celui-ci chargé, nous pourrions afficher un print_r($xml); pour revoir la structure de notre fichier, telle que je l’ai écrite ci-dessus. Mais, nous ne voulons que naviguer parmi nos éléments. Pour ce faire, deux méthodes.

    Soit on passe uniquement par des objets PHP crées automatiquement du fichier XML. Cette méthode, très simple et ne nécessitant aucune autre connaissance, a cependant le mauvais goût d’occuper pas mal de mémoire (on stocke vraiment TOUT). Par exemple, si on veut atteindre le titre du premier article :

    1. echo $xml->item[0]->title;

    L’autre méthode, un peu plus en finesse, nous permettra de libérer la variable $xml au profit d’une variable à l’empreinte mémoire plus faible, ne contenant que les balises qui nous intéressent. Pour ce faire, il faudra par contre des notions de X-Path. Pour ceux qui ne connaîtraient pas ce langage, sachez que pour récupérer tous les éléments item de notre fichier, il suffira d’utiliser l’instruction //item.

    On peut alors afficher simplement les différents titres de nos news :

    1. echo ‘<ul>’;
    2.  
    3. foreach($xml->xpath(‘//item’) as $item)
    4. {
    5.    echo ‘<li>’.$item->title.‘</li>’;
    6. }
    7.  
    8. echo ‘</ul>’;

    Et voilà ! Vous savez à présent comment parser très simplement un flux RSS avec SimpleXML. Libre à vous de recoder le nouveau NetVibes ! :p

  • 0 Comments
  • Filed under: PHP
  • En PHP, il existe de nombreuses fonctions. Tellement nombreuses que certaines se révèlent redondantes. Parfois avec des performances différentes. Nous allons étudier aujourd’hui les différentes méthodes nous permettant de caster (changer le type) de nos variables.

    Pour ce faire, nous nous baserons sur la conversion d’un nombre réel (float) grâce à l’utilisation de trois méthodes :

    1. floatvar
    2. Simple casting : (float)
    3. settype

    Pour faire ces tests, je me suis basé sur le code suivant :

    1.         $i = "3.4";
    2.        
    3.         $maxLoop = 10000000;
    4.        
    5.         for( $c = 0 ; $c <= $maxLoop ; $c++ )
    6.         {
    7.                 $timer1 = microtime(true);
    8.                 floatval($i);
    9.                 $timer2 = microtime(true);
    10.  
    11.                 $average_floatval += ($timer2 - $timer1);
    12.                
    13.                 $timer1 = microtime(true);
    14.                 (float)$i;
    15.                 $timer2 = microtime(true);
    16.                
    17.                 $average_float += ($timer2 - $timer1);
    18.                
    19.                 $timer1 = microtime(true);
    20.                 settype($i, ‘float’);
    21.                 $timer2 = microtime(true);
    22.                
    23.                 $average_settype += ($timer2 - $timer1);
    24.         }

    Il suffit ensuite de diviser les différentes moyennes par le nombre d’occurences, et on tombe sur la durée moyenne d’exécution du cast.

    Afin d’obtenir des tests significatifs en statistiques, il est important de se baser sur une population la plus vaste possible. C’est pourquoi nous effectuons 10.000.000 (oui, dix millions !) de tests. Nous pourrions aller plus loin, mais il a déjà fallu mettre en place une directive set_time_limit pour achever tout cela. ;)

    Les résultats, sans plus attendre…

    floatval 2.141 µs
    (float) 1.87 µs
    settype 2.387 µs

    Ainsi, nous voyons que le casting direct est 14 % plus rapide par rapport à floatval. Comme quoi il serait grand temps de faire un peu de ménage dans les fonctions PHP : fonctions redondantes, pas optimisées, etc… ;)

  • 2 Comments
  • Filed under: PHP
  • Le PHP dispose de tant de fonctions que certaines sont méconnues du grand public - grand public a vocation très geek, je vous l’accorde. ;) La fonction array_walk en fait partie. Elle permet d’appliquer une fonction à tous les éléments d’un tableau très facilement. Par exemple :

    1. $foo = array( 1, 2, 3, 4 );
    2.  
    3. function Square(&$i)
    4. {
    5.         return $i * $i;
    6. }
    7.  
    8. array_walk($foo, Square);
    9.  
    10. echo ‘<pre>’;
    11. print_r($foo);
    12. echo ‘</pre>’;

    Ce code affichera :

    Array
    (
        [0] => 1
        [1] => 4
        [2] => 9
        [3] => 16
    )

    Cependant, comment appeller une méthode d’une classe avec cette fonction ? Il suffit tout simplement de lui passer un tableau en second paramètre, contenant le nom de la classe et le nom de la méthode. Démonstration.

    1. array_walk($foo, array( ‘MyClass’, ‘MyMethod’ ));

    Et c’est tout. Petite astuce toute simple qu’il faut cependant savoir. :)

  • 0 Comments
  • Filed under: PHP
  • Voici une erreur PHP des plus énigmatiques. Qu’est-ce donc que ce mystérieux T_PAAMAYIM_NEKUDOTAYIM ? Ne cherchez pas plus loin, il s’agit simplement d’une erreur en hébreu. Pour tous ceux qui ne parlent pas l’hébreu couramment, cela signifie : “deux points inattendus”. Explication…

    Cette erreur est dû si vous appellez un attribut non statique d’une façon statique. Par exemple, soit le code suivant.

    1. class Lapin
    2. {
    3.         private $couleur;
    4.         private static $nb_lapins = 0;
    5.  
    6.         public function __construct($couleur = ‘blanc’)
    7.         {
    8.                 if($this::nb_lapins)    throw new Exception(‘Trop de lapins !’);
    9.                 else
    10.                 {
    11.                         // …
    12.                 }
    13.         }
    14. }

    Outre ce code assez original (je n’ai encore jamais codé de classe Lapin), nous pouvons voir que nous tentons d’accèder d’une manière non statique à un attribut statique ($this->nb_lapins). D’où le problème et cette erreur. Afin de la corriger, il vous suffit de remplacer le double deux points par une flèche. Et c’est tout.

    Le PHP, un langage de rigolos ? ;)

    Tags
    Flux RSS Syndiquez ce blog
  • Blogs favoris