Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
clubinfo:premiere_page_avec_php [2024/08/18 17:35] mrcjl [Pour finir] |
— (Version actuelle) | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ======PHP : Lecture de fichier html ou xml====== | ||
| - | |||
| - | =====Présentation===== | ||
| - | |||
| - | ====But==== | ||
| - | Générer automatiquement la liste des ponts disponibles sur notre site afin de n' | ||
| - | |||
| - | ====Activité==== | ||
| - | {{ : | ||
| - | Il va falloir : | ||
| - | * Déterminer les différentes pages (décrivant un pont) placées sur notre site. | ||
| - | * Trouver pour chaque page le nom du pont concerné. | ||
| - | * Trier la liste des ponts dans l' | ||
| - | * Afficher la liste sur la page. | ||
| - | |||
| - | =====Connaissances et savoir faire===== | ||
| - | * Revoir le cours sur le [[clubinfo: | ||
| - | |||
| - | ====Connaissances supplémentaires==== | ||
| - | Il existe de nombreuses bibliothèques PHP contenant des fonctions utiles aux différentes tâches à réaliser. Voir sur [[https:// | ||
| - | |||
| - | ====Parcourir le système de fichier==== | ||
| - | Il faut donc parcourir le système de fichier de notre site pour traiter tous les fichiers HTML sauf index.html. | ||
| - | * Le système de fichier correspond à l' | ||
| - | * Le dossier courant peut être représenté par un point ' | ||
| - | * Un dossier est un espace de données qui contient des pointeurs sur le contenu des fichiers. | ||
| - | * Un fichier est identifié par son chemin (liste des dossiers successifs, un nom et une extension (fonction de son contenu). | ||
| - | |||
| - | Si un fichier est connu, on peut y accéder directement : fopen ($chemin, ' | ||
| - | |||
| - | Pour parcourir ou chercher les fichier d'un dossier, il est nécessaire de : | ||
| - | * Pointer sur le dossier courant (ou sont enregistrées nos pages) : **$dir = opendir($chemin)** | ||
| - | * Lire les fichiers qui s'y trouvent : **$fic = readdir($dir)** | ||
| - | * Décomposer le nom du fichier dans un tableau : **$tabinfo = pathinfos($fic)** | ||
| - | * Conserver les fichiers qui contiennent du HTML sauf index.html ($tabinfo[" | ||
| - | |||
| - | {{: | ||
| - | <code php> | ||
| - | <?php | ||
| - | // Définir une variable pointant sur notre site (la position de la page courante est symbolisée par un point) | ||
| - | // Opendir fourni un pointeur sur un dossier et sélectionne son 1er fichier. | ||
| - | $site = opendir(" | ||
| - | // lire tout les fichiers les un après les autres (réponse false si tous les fichiers ont été lus) | ||
| - | // readdir fourni le pointeur sur le fichier courant du dossier et sélectionne suivant sinon " | ||
| - | while (($fichier = readdir($site)) != false) { | ||
| - | // ne conserver que les fichiers d' | ||
| - | // pathinfos fourni dans un tableau des informations sur un fichier dont l' | ||
| - | $info = pathinfo($fichier); | ||
| - | if ($info[" | ||
| - | // ne pas conserver le fichier index.html s'il existe | ||
| - | if ($info[" | ||
| - | ... | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | ?> | ||
| - | </ | ||
| - | ++++ | ||
| - | |||
| - | ====Lire le contenu d'un fichier HTML==== | ||
| - | Nous avons trouvé le fichier concernant un pont. Pour connaître le nom nom du pont, il faut lire le contenu de la balise < | ||
| - | |||
| - | Le HTML est un langage de balisage issu du XML. Il existe des fonctions spécifiques pour lire le contenu des balises. | ||
| - | |||
| - | Lire un fichier texte : | ||
| - | * Ouvrir le fichier : **$fic = fopen($chemin, | ||
| - | * Contrôler s'il reste des lignes à lire : **feof($fic); | ||
| - | * Lire une ligne (terminée par un retour à la ligne \n) : **$ligne = fgets($fic); | ||
| - | * fermer le fichier si l'on n'en a plus besoin : **fclose($fich); | ||
| - | |||
| - | Lire un fichier texte mais balisé : | ||
| - | * Ouvrir chaque fichier HTML : **$fic = SimpleXMLElement($texte/ | ||
| - | * Récupérer le nom du pont : **$fic-> | ||
| - | |||
| - | La variable $fic obtenue grâce à SimpleXMLElement contient un objet spécial qui pourra être vu dans une leçon sur la programmation objet. Pour lire le contenu d'une balise, il faut partir de la première et utiliser des flèches. La documentation de SimpleXML indique beaucoup d' | ||
| - | |||
| - | {{: | ||
| - | <code php> | ||
| - | // Ouvre le fichier pour en lire le contenu ($page = contenue de la balise HTML) | ||
| - | $page = new SimpleXMLElement(' | ||
| - | // Récupère le nom du pont dans la balise et l' | ||
| - | $nom = $page-> | ||
| - | </ | ||
| - | ++++ | ||
| - | |||
| - | ====Les tableaux==== | ||
| - | Un tableau est un objet particulier contenant une liste de clé-> | ||
| - | |||
| - | Il faut : | ||
| - | * Créer un tableau pour contenir la liste (avant d' | ||
| - | * Ajouter dans la liste, pour chaque pont, son nom et son fichier : **$tab[] = array(" | ||
| - | * Trier la liste dans l' | ||
| - | |||
| - | ====Affichage de chaînes de caractères==== | ||
| - | Nous avons vu que 2 chaînes de caractères pouvaient être concaténées grâce à l' | ||
| - | |||
| - | * Indiquer le nombre d' | ||
| - | * Créer une boucle pour traiter tous les éléments de la liste des ponts : **foreach()** | ||
| - | * Afficher chaque élément de la liste de manière formatée : **printf()** | ||
| - | |||
| - | {{: | ||
| - | <code php> | ||
| - | // Afficher le nombre de pont | ||
| - | echo " | ||
| - | // Début de liste et parcourir la liste des ponts | ||
| - | echo " | ||
| - | foreach ($ponts as $pont) | ||
| - | // créer les balises HTML pour mettre en place chaque élément de la liste de liens utiles | ||
| - | printf(" | ||
| - | // Fin de la liste | ||
| - | echo " | ||
| - | </ | ||
| - | ++++ | ||
| - | |||
| - | =====Pour finir===== | ||
| - | * Ne pas oublier d' | ||
| - | * Corriger le lien de retour de chaque page concernant un pont de " | ||
| - | * Tester et corriger le code si besoin. | ||
| - | |||
| - | <WRAP round download> | ||
| - | {{: | ||
| - | </ | ||
| - | ++++ | ||
| - | <fich php index.php> | ||
| - | < | ||
| - | < | ||
| - | <meta charset=" | ||
| - | < | ||
| - | <meta name=" | ||
| - | <link rel=" | ||
| - | </ | ||
| - | <body class=" | ||
| - | < | ||
| - | <p>Ce site présente les pont les plus remarquables dans le monde. Il est destiné à s' | ||
| - | < | ||
| - | <?php | ||
| - | // Définir une variable pointant sur notre site (la position de la page courante est symbolisée par un point) | ||
| - | // Opendir fourni un pointeur sur un dossier et sélectionne son 1er fichier. | ||
| - | $site = opendir(" | ||
| - | // Créer la liste pour contenir les ponts | ||
| - | $liste = array(); | ||
| - | // lire tout les fichiers les un après les autres (réponse false si tous les fichiers ont été lus) | ||
| - | // readdir fourni le pointeur sur le fichier courant du dossier et sélectionne suivant sinon " | ||
| - | while (($fichier = readdir($site)) != false) { | ||
| - | // ne conserver que les fichiers d' | ||
| - | // pathinfos fourni dans un tableau des informations sur un fichier dont l' | ||
| - | $info = pathinfo($fichier); | ||
| - | if ($info[" | ||
| - | // ne pas conserver le fichier index.html s'il existe | ||
| - | if ($info[" | ||
| - | // Ouvre le fichier pour en lire le contenu ($page = contenue de la balise HTML) | ||
| - | $page = new SimpleXMLElement(' | ||
| - | // Récupère le nom du pont dans la balise et l' | ||
| - | $liste[] = array(" | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | // Trie alphabétiquement la liste | ||
| - | asort($liste); | ||
| - | // Afficher le nombre de pont | ||
| - | echo " | ||
| - | // Début de liste et parcourir la liste des ponts | ||
| - | echo " | ||
| - | foreach ($liste as $pont) | ||
| - | // créer les balises HTML pour mettre en place chaque élément de la liste de liens utiles | ||
| - | printf(" | ||
| - | // Fin de la liste | ||
| - | echo " | ||
| - | ?> | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | =====Pour aller plus loin===== | ||
| - | Cette 1ere page PHP nous permet de ne plus avoir à modifier notre page " | ||
| - | |||
| - | Pour aller plus loin avec les sites dynamiques, il faudra des compétences : | ||
| - | * en [[clubinfo: | ||
| - | * en [[clubinfo: | ||
| - | * gestion des bases de données à partir du PHP. | ||
| - | |||
| - | La base de donnée nous permettra : | ||
| - | * de stocker toutes les informations des ponts non plus dans une page HTML à écrire pour chaque pont mais directement en base de donnée à partir d'un formulaire, | ||
| - | * de générer le sommaire directement à partir de chaque pont contenu dans la base, | ||
| - | * d' | ||
| - | |||
| - | Notre site n'aura besoin que de 3 pages (index, formulaire, affichage) quel que soit le nombre de ponts. Sa maintenance et son évolution en sera grandement facilité. | ||
| - | |||
| - | C'est cet ensemble HTML, CSS, SQL et PHP qui ont permis le développement des sites marchands et des autres sites utilisant la génération automatisée des pages . | ||