Vous êtes sur la page 1sur 4

Université Cadi Ayyad

Faculté des Sciences Semlalia Marrakech


Département d’Informatique

TP5-MASTER ISI
Programmation PHP/MYSQL (Niveau II)
Objectif :
Ce TP est une recette de cocktail panaché. Le but est d’explorer la richesse et la
puissance de PHP5 en utilisant les bibliothèques disponibles. Cette liste n’a pas pour but
d’être exhaustive mais de vous orienter dans vos recherches.

Exercice I. (PHP/XML)
XML est un formalisme qui permet de fabriquer des langages (métalangage).
Recommandé par W3C pour les échanges d’information sur Internet. De nombreux
langages respectent la syntaxe XML : XHTML, SVG, XSLT, etc. Ainsi, que peut-on
faire avec PHP ?
Générer des contenus en XML
o Générer des contenus en XML est presque aussi facile que générer du HTML
o Soit vous utilisez des fonctions comme echo, print, sprint, etc. pour directement
créer les balises, soit vous utilisez une librairie qui vous facilite cette tâche.
Analyse (parsing)
o "Parsing" c'est la procédure avec laquelle on extrait des données et on les
découpe dans des morceaux d'information pour les traiter dans la suite. Le
programme qui fait le "parsing" s'appelle un "parser".
Il existe deux modèles de "parsing" :
o Stream-parsing (SAX en java) : SimpleXML
o DOM parsing : le parseur traverse un fichier xml et il le ré-construit sous forme
d'arbre : PHP-DOM

A. Générer des contenus en XML : reproduire les scripts suivant :


feuillestyle.css

Resultat {
font-family: "Palatino", serif"
display: block;
font-size: 36pt;
margin-bottom: 2cm;
background: rgb(200,0,0);
}

<?php
header("Content-type: text/xml");
print('<?xml version="1.0" encoding="iso-8859-1"?>' . "\n");
print('<?xml-stylesheet href="feuillestyle.css" type="text/css" ?>');
$a = 5; $b = 7; $c = 8;
$moyenne = ($a + $b + $c) / 3 ;
echo "<Resultat> la moyenne = $moyenne </Resultat>";
?>

B. Parsing avec SimpleXML :


a. Récupérer le fichier story.xml de la plate forme moodle et réaliser le
script suivant :
NB. Pour tout le module SimpleXML les données échangées sont en UTF-8. Si vous
utilisez des caractères spéciaux utf8-code() et utf8-decode()
i. Lire un fichier XML avec SimpleXML
<?php
if (file_exists('story.xml')) {
// simplexml_load_file() : charge un fichier XML
$xml = simplexml_load_file('story.xml');
//print_r() imprime une structure de données de façon human-readable
echo "<hr> Affichage basique arborescence a l 'aide de print_r() </hr>" ;
echo "<pre>";
print_r($xml);
echo "</pre>";
// var_dump() imprime plus de détails "techniques"
echo "<hr> Affichage basique arborescence a l ’aide de the var_dump()";
echo "<pre>";
var_dump($xml);
echo "</pre>";
} else {
exit("echec d\'ouverture story.xml.");
}
?>

ii. Extraire des données avec SimpleXML


<?php
if (file_exists('story.xml')) {
$xml = simplexml_load_file('story.xml');

echo "<hr />Affichage de certains elements : <hr />";


//$xml->FIL->EPISODE collectionne tous les eléments "EPISODE" filles de "FIL".
$episodes = ($xml->FIL->EPISODE);
foreach ($episodes as $episode) {
echo "<p>Episode:</p> ";
echo"<pre>";
printf(" Sousbut: %s\n", $episode->SousBut);
printf(" Resultat: %s\n", $episode->Resultat);
print "----\n";
echo"</pre>";
}

} else {
exit('echec ouverture story.xml.');
}
?>

iii. Extraire des données avec SimpleXML et Xpath


<?php
if (file_exists('story.xml')) {
if (file_exists('story.xml')) {
$xml = simplexml_load_file('story.xml');
echo "On utilise xpath Pour extraire tous les 'EPISODE' <br>";

//$xml->xpath('//EPISODE') collectionne tous les eléments "EPISODE" filles de "FIL".


$episodes = $xml->xpath('//EPISODE');

foreach ($episodes as $episode) {


echo "<p>Episode:</p> ";
echo"<pre>";
printf(" Sousbut: %s\n", $episode->SousBut);
printf(" Resultat: %s\n", $episode->Resultat);
print "----\n";
echo"</pre>";
}

} else {
exit('Failed to open story.xml.');
}?>
b. Tester les scripts suivants :
<?xml version="1.0" encoding="iso-8859-1"?>
<users>
<user>
<name>Ahmed Jabir</name>
<address> 3 rouidate Avenue Marrakech</address>
<email>jabir@gmail.com</email>
</user>
<user>
<name>Yassmina Sarghini</name>
<address> 3 daoudiate Marrakech </address>
<email>sarghiniamina@yahoo.com</email>
</user>
<user>
<name>Kamal rady</name>
<address>100 Socket Boulevard Rabat</address>
<email>rady@ucam.ac.ma</email>
</user>
<user>
<name>Selwa sekalli</name>
<address>54 widaya Marrekech</address>
<email>sekalli@hotmail.com</email>
</user>
</users>
<name>Alejandro Gervasio</name>
<address>Boulevard of Objects 10101 AR</address>
<email>alejandro@alejandro-domain.com</email>
</user>
</users>

i. Afficher tous les noms des utilisateurs

// Afficher tous les noeuds


if(!$xml=simplexml_load_file('users.xml')){
trigger_error('Erreur de lecture du fichier',E_USER_ERROR);
}
echo 'Affichage du fichier XML<br />';
foreach($xml as $user){
echo 'Nom: '.$user->name.' Address e: '.$user->address.'
Email: '.$user->email.'<br />';
}
ii. Affichage des noms de tous les noeuds

//
if(!$xml=simplexml_load_file('users.xml')){
trigger_error('Erreur de lecture du fichier ',E_USER_ERROR);
}
echo 'Affichage des nom de fichier XML<br />';
foreach($xml as $user){
echo 'Nom: '.$user->name.'<br />';
}

iii. Affichage du premier nom

if(!$xml=simplexml_load_file('users.xml')){
trigger_error('Error de lecture du fichier',E_USER_ERROR);
}
// Affichage du premier nom
echo 'Displaying name of first user...<br />';
echo $xml->user[0]->name;
Exercice II. (PHP/RSS- Travail à rendre)
RSS désigne une famille de formats XML utilisés pour la syndication de contenu Web.
Ce standard est habituellement utilisé pour obtenir les mises à jour d'information dont
la nature change fréquemment. Pour les recevoir, l'utilisateur doit s'abonner au flux,
ce qui lui permet de consulter rapidement les dernières mises à jour, à l'aide d'un
agrégateur, sans avoir à se rendre sur le site. Réaliser un site basique qui gère le Flux
RSS des news en utilisant le fichier RSSPHP5.php que vous le récupériez de la plate
forme et se basant sur l’article suivant :
http://baptiste-wicht.developpez.com/tutoriel/php/rss/

Exercice II. (PHP/PDF- Librairie FPDF)


Ecrire le script suivant, en explorant la librairie FPDF générer un ficher plus complexe
(insertion graphiques …)

<?php
//Exemple de 2 pages avec en-tête et pied de page
require('fpdf.php');

class PDF extends FPDF


{

//Constructeur (obligatoire pour PHP3)


function PDF()
{
$this->FPDF();
}

//En-tête
function Header()
{
//Police Arial gras 15
$this->SetFont('Arial','B',15);
//Décalage à droite
$this->Cell(80);
//Titre
$this->Cell(30,10,'Titre');
//Saut de ligne
$this->Ln(20);
}

//Pied de page
function Footer()
{
//Police Arial italique 8
$this->SetFont('Arial','I',8);
//Positionnement à 1,5 cm du bas
$this->SetY(-15);
//Décalage à droite
$this->Cell(80);
//Numéro de page
$this->Cell(30,10,'Page '.$this->PageNo());
}
}

$pdf=new PDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for($i=1;$i<=10;$i++)
$pdf->Cell(50,10,'Impression de la ligne numéro '.$i,0,1);
$pdf->Output();
?>