Circum Blog

Circum Net – IT – Conseils pratiques

Lecture d’un flux RSS

PHP, Programmation, XML

Exploiter un flux RSS à partir d’un script PHP est une tâche relativement aisée du fait que depuis la version 5 du langage PHP on dispose de la librairie SimpleXML.

SimpleXML est un module standard de PHP qui permet la lecture d’un document XML, de ses éléments et de leurs attributs en utilisant les méthodes d’accès des tableaux et des objets.

Et puisque RSS s’appuie sur une structure XML basique, la liaison entre les deux se fait naturellement. En effet, avec le format RSS la description d’un site ou d’un contenu est réalisée via un set d’une dizaines de balises différentes (<channel>, <item>, <title>, <description> …).

Ossature d’un flux RSS

<rss version="2.0">
<channel>
    <title>...</title>
    <link>...</link>
    <description></description>
    <item>
        <title>...</title>
        <link>...</link>
        <description>...</description>
    </item>
    <item>
        <title>...</title>
        <link>...</link>
        <description>...</description>
    </item>
</channel>
</rss>

Du fait de cette simplicité, il n’est pas compliqué d’envisager de manipuler par programmation le contenu d’un flux RSS. Voyons concrètement ce qu’il en est.

Lecture d’un flux RSS avec SimpleXML

<?php
$root=simplexml_load_file("http://site.org/news.rss");
foreach($root->channel->item as $item)
    {
    echo "News:" . utf8_decode($item->title) . "<br/>";
    }
?>

Ce code donne pour résultat l’affichage des titres des éléments d’information du flux RSS http://www.site.org/news.rss

Explication “ligne par ligne”

Pour charger un document XML avec SimpleXML, il suffit de lancer la fonction ‘simplexml_load_file()’. Celle-ci prend comme argument le chemin d’accès du fichier XML et retourne un objet de la classe ‘simplexml_element’. Ce dernier représente l’élément racine du document XML pris en compte.

$root = simplexml_load_file(“http://www.site.org/news.rss”);

Lorsqu’il s’agit d’un document XML simple, pour accéder à un noeud à partir de la racine il suffit de l’appeler par son nom. Dans le cas qui nous occupe, on veut se placer au niveau des éléments “item”. La structure de contrôle ‘foreach’ permet de parcourir aisément tous les éléments ‘item’ du fichier RSS et d’en traiter les composants.

foreach($root->channel->item as $item)

Une fois dans la boucle, ile ne reste plus qu’à demander l’affichage du titre de l’item traité ($item->title). La fonction “utf8_decode” s’assurant de la bonne conversion des caractères accentués ou spéciaux.

echo “News : ” . utf8_decode($item->title) . “<br/>”;

Conversion des jeux de caractères

La plupart des modules de manipulation XML traitent les données qu’ils fournissent et qu’ils réceptionnent selon le codage international UTF-8. Si des caractères accentués ou spéciaux doivent être utilisés (codage ISO-8859-1), il faudra avoir recours aux fonctions PHP ‘utf8_encode’ et ‘utf8_decode’ pour que la conversion des chaînes de caractères se passe correctement.

– utf8_encode fait passer une chaîne d’iso-8859-1 à utf-8
– utf8_decode fait passer une chaîne de utf-8 à iso-8859-1



Echapper des caractères

PHP, Programmation

Lorsque l’on désire envoyer des chaînes de caractères à un navigateur Web, on est rapidement confronté à la difficulté d’afficher également des simples et doubles guillemets HTML – or ceux-ci entrent en conflit avec les guillemets utilisé par PHP pour délimiter les chaînes de caractères.

Conflit entre guillemets HTML et PHP

<?php
echo “L’histoire du “grand Bob””;
echo ‘On l’appelait ‘Le grand blond”;
?>

Ces deux instructions vont produire des messages d’erreur. En effet, étant donné qu’il n’y a aucune distinction entre les guillemets qui relèvent du langage PHP et ceux qui relèvent de l’HTML, l’interpréteur de code PHP ne pourra que bloquer sur cette ambiguité.

Pour éviter cette difficulté, on peut échapper les caractères problématiques en les faisant précéder du signe backslash “\”.

Echappement de caractères avec un backslash

<?php
// Affichage dont les guillements ont été “protégés”
echo “L’histoire du \”grand Bob\””;
echo ‘On l\’appelait \’Le grand blond\”;
 
// Affichage du code HTML permettant l’insertion d’une image
echo “<img src=\”images/fleur.gif\”>”;
 
// Affichage du code HTML permettant l’insertion d’un lien
echo “<a href=\”index.html\”>Visitez notre site …</a>”;
?>

Un guillemet échappé sera simplement affiché comme un caractère normal.



Traitement d’un formulaire

PHP, Programmation

Il est possible de passer aux scripts PHP des valeurs provenant d’éléments extérieurs au langage PHP. C’est bien évidemment une fonctionnalité qui sera fort sollicitée dans le cadre du développement d’applications Web : le formulaire HTML servant à récupérer les données encodées par l’utilisateur, le script php effectuant le traitement de l’information – toutes les variables du formulaire HTML doivent donc être disponibles dans le script PHP.

Lorsqu’un formulaire HTML est envoyé à un script PHP, toutes les variables du formulaire sont automatiquement accessibles à partir du script, il suffit d’appeler les variables externes via les tableaux prédéfinis $_POST et $_GET (en fonction de la méthode de transfert précisée dans le formulaire). Un champ de formulaire HTML portant donc par exemple le nom “critere” pourra être appelé via les expressions suivantes:

$_POST[“critere”] ou $_GET[“critere”]

Il est également possible d’utiliser le tableau “superglobal” $_REQUEST en remplacement de $_GET et $_POST. Celui-ci reprend en effet indifféremment les données qui entrent via l’une ou l’autre des méthodes de transfert (on y retrouve toutes les valeurs des deux tableaux précédents).

$_REQUEST[“critere”]



Find ou le Sherlock Unix

Systèmes, Unix

La commande find permet de retrouver des fichiers à partir de certains critères.

Concrètement, la commande ‘find’ scane un répertoire donné (et les elements qu’il contient) à la recherche de fichiers qui satisfont certains critères. Parmi ceux-ci, le nom, la taille, le propriétaire, le mode ou encore la date de dernière modification peuvent être testés. Lorsqu’un fichier cadre avec les critères précisés ‘find’ peut lui associer une action.

La commande ‘find’ à la structure suivante:

> find [directory] [search expression] [actions]

L’instruction ci-dessous aura par exemple pour effet de chercher un fichier dont le nom correspond à la chaîne de caractères ‘project’ à partir du répertoire ‘/usr’ et, si le résultat est positif, d’imprimer sur la sortie standard le chemin d’accès du fichier concerné.

> find /usr -name project -print

L’instruction ci-dessous recherchera, elle, les fichiers dont le nom se termine par la chaîne de caractères ‘.jpg’ à partir du répertoire courant et, si le résultat est positif, affichera sur la sortie standard le chemin d’accès des fichiers concernés.

> find. -name ‘*.jpg’ -print

Les principaux critères de recherche possibles pour la commande ‘find’:

-name [filename]
recherche sur le nom du fichier

-perm [mode]
recherche sur les droits d’accès

-user [username]
recherche sur le propriétaire

-group [groupname]
recherche sur le groupe

-size [value][c]
recherche sur la taille en nombre de blocs (un bloc représentant 512 bytes ou 1/2 kb – si la lettre c est précisée, le calcul se fait sur le nombre de caractères)

-atime [value]
recherche par date de dernier accès (value représentant ici le nombre de jours depuis le dernier accès)

-mtime [value]
recherche par date de dernière modification (value représentant le nombre de jours depuis là denière modification)

-ctime [value]
recherche par date de création (value représentant le nombre de jours depuis la création)

Ces critères de recherche peuvent être combinés entre eux grâce aux opérateurs -a (ET) et -o (OU inclusif).

Exemples d’instructions de recherche

> find / -name Article1 -type f -print
Cette instruction recherche, à partir de la racine du système, le fichier nommé ‘Article1’. Si ce fichier est trouvé, son chemin d’accès sera affiché sur la sortie standard.

> find / -name Article1 -type f -exec chmod 755 {} ;
Cette instruction recherche, à partir de la racine du système, le fichier nommé ‘Article1’. Si ce fichier est trouvé, ses permissions sont modifiées (mode 755 c’est-à-dire: rwxr-xr-x). La paire d’accolade ‘{}’ implique une substitution du nom du fichier en traitement et la suite de caractères ‘;’ indique que la commande exec est clôturée.

> find. -name ‘[A-Z]*[0-9]’ -type f -print
Cette instruction recherche, à partir du répertoire courant, tous les fichiers dont le nom commence par une lettre majuscule et se termine par un chiffre.

> find /users -size +100000c -atime +7
Cette instruction recherche, à partir du répertoire ‘/users’, tous les fichiers dont la taille est supérieur à 100.000 caractères et qui n’ont pas été modifiés depuis plus de 7 jours.

> find. ( -name ‘*.log’ -a -mtime +7 ) -exec rm -f {} ;
Cette instruction recherche, à partir du répertoire courant, tous les fichiers dont le nom se termine par ‘.log’ et qui n’ont pas été modifiés depuis plus de 7 jours. Les fichiers qui sont trouvés seront effacés tel que précisé dans la commande -exec.
Dans cette instruction, les paranthèses délimitent l’expression de recherche et l’opérateur ‘-a’ combine les deux critères fournis (-name et -mtime) selon un ‘ET’ logique.



History et ses raccourcis

Systèmes, Unix

Dans le shell (c’est-à-dire quand vous êtes en mode ligne de commande), l’instruction history permet d’afficher une liste des commandes shell précédemment exécutées.

La syntaxe de la commande ‘history’ est la suivante :

> history [-nb lines]

Le nombre de commandes affichées par défaut par history va dépendre du shell que vous utilisez (bash, tcsh, sh …). Ce nombre peut de toute façon être modifié en fournissant le paramètre du nombre de lignes en argument.

history 5
affichera les cinq dernières commandes comme présentées ci-dessous : 

507 ls
508 ls -la
509 top
510 df -k
511 history 5

history 20
affichera les vingt dernières commandes

history 30
affichera les trente dernières commandes

Si le nombre de commandes à lister est élevé, il sera préférable d’utiliser un pipe vers less pour en faciliter l’affichage et la lecture ( ex: history 200 | less).

 
Les commandes fournies en résultat sont préfixées d’un numéro qui correspond à la position de ces commandes dans l’history. Pour rappeler une commande particulière, il suffit de taper un point d’exclamation (‘!’) suivi du numéro approprié. Par contre, afin de relancer la toute dernière commande exécutée au prompt UNIX, il faut juste taper deux points d’exclamation (‘!!’). Exemples:

Par rapport à la liste suivante fournie par history
12 ls -la    

pour obtenir la commande indicée 12, on tapera :
> !12

pour obtenir la commande indicée 20, on tapera :
> !20

et pour lancer la dernière commande exécutée, on tapera :
> !!



Man à propos

Systèmes, Unix

Les sytsèmes d’exploitation à base Unix proposent pour la plupart un manuel d’aide électronique qui s’obtient en tapant la commande “man”.

Ce manuel reprend les principales commandes Unix et les explicite à travers différentes rubriques comme la description, le synopsis, l’environnement, les exemples, la compatibilité, les commentaires… La syntaxe de la commande ‘man’ est précisée ci-dessous:

man [options] command

En réponse à l’invocation de cette instruction vous obtiendrez une page d’information concernant le sujet souhaité. Attention, cette page ne doit pas être vue comme un tutoriel ou un cours mais bien plutôt comme une fiche de référence. D’ailleurs, vous le constaterez rapidement, les explications fournies via ce système, même si elles sont très complètes, sont également souvent obscures pour les utilisateurs débutants. De plus, il ne faut pas s’attendre à une mise en page sophistiquée, en effet les ‘manpages’ se présentent comme des fichiers textes sans images, sans couleurs, sans liens.

Par exemple, la commande: > man ls    

permet d’obtenir la documentation en ligne sur l’utilitaire ‘ls’. La réponse ressemblera à ce qui suit:

LS(1) BSD General Commands Manual LS(1)

NAME
ls – list directory contents

SYNOPSIS
ls [-ABCFGHLPRTWZabcdfghiklmnopqrstuwx1] [file…]

DESCRIPTION
For each operand that names a file of a type other than directory, ls displays its name as well as any requested, associated information. For each operand that names a file of type directory, ls displays the names of files contained within that directory, as well as any requested, associated information.

Parcourir une page de man

Pour naviguer dans une page servie par la commande man, vous pouvez utiliser les flèches vers le haut et vers le bas, la barre d’espacement ou les touches ‘page down’ et ‘page up’ de votre clavier. Pour quitter une page, il faut utiliser la touche ‘q’ ou appuyer sur la barre d’espacement jusqu’à ce que la fin de la page soit atteinte.