abonnel-siteweb/data/pages/informatique/langage/php/script-php-qui-scanne-tous-...

80 lines
4.0 KiB
Plaintext
Raw Permalink Normal View History

2024-01-07 10:02:35 +01:00
====== Afficher les dossiers courants ======
{{ :informatique:langage:php:pasted:20230317-002026.png?300|Script PHP}}
Voici un script en PHP qui scanne tous les dossiers de l'arborescence courante (à l'exception des dossiers cachés) et affiche des liens vers ces dossiers dans une page HTML5. Le rendu utilise Bootstrap pour un style plus élégant.
<WRAP clear/>
<code PHP>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Liste des dossiers</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Liste des dossiers</h1>
<?php
$dir = '.';
$folders = array_diff(scandir($dir), array('..', '.', '.DS_Store'));
foreach ($folders as $folder) {
if (is_dir($folder)) {
echo '<p><a href="'.$folder.'">'.$folder.'</a></p>';
}
}
?>
</div>
</body>
</html>
</code>
Ce script commence par inclure les en-têtes HTML nécessaires, notamment la feuille de style Bootstrap. Ensuite, il utilise la fonction PHP **scandir**() pour récupérer la liste de tous les fichiers et dossiers dans le répertoire courant. La fonction **array_diff**() est utilisée pour exclure les éléments spéciaux tels que ''..'', ''.'' et ''.DS_Store'' (sur Mac). Ensuite, le script parcourt tous les dossiers de la liste avec une boucle **foreach** et utilise la fonction **is_dir**() pour vérifier s'il s'agit bien d'un dossier. Si c'est le cas, il affiche un lien vers ce dossier avec la fonction **echo**.
===== Evolution =====
Pour afficher le titre **title** du fichier index.html contenu dans chaque dossier scanné, vous pouvez utiliser la fonction **file_exists**() pour vérifier si le fichier existe et la fonction **file_get_contents**() pour obtenir le contenu du fichier et extraire le titre **title**. Voici le code mis à jour :
<code PHP>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Liste des dossiers</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h1>Liste des dossiers</h1>
<?php
$dir = '.';
$folders = array_diff(scandir($dir), array('..', '.', '.DS_Store'));
foreach ($folders as $folder) {
if (is_dir($folder)) {
$index_file = $folder.'/index.html';
if (file_exists($index_file)) {
$content = file_get_contents($index_file);
if (preg_match('/<h1>(.*?)<\/h1>/', $content, $matches)) {
$title = $matches[1];
} else {
$title = 'Titre non trouvé';
}
} else {
$title = 'Fichier index.html non trouvé';
}
echo '<p><a href="'.$folder.'">'.$folder.'</a> - '.$title.'</p>';
}
}
?>
</div>
</body>
</html>
</code>
Ce script commence par inclure les mêmes en-têtes HTML que précédemment. Ensuite, il utilise les mêmes fonctions pour récupérer la liste des dossiers à scanner.
Pour chaque dossier, le script vérifie si un fichier **index.html** existe en utilisant la variable **$index_file** qui contient le chemin complet vers le fichier. Si le fichier existe, le script utilise la fonction **file_get_contents**() pour obtenir le contenu du fichier et utilise une expression régulière pour extraire le texte entre les balises ''<title>''. Si le titre **title** est trouvé, il est stocké dans la variable **$title**, sinon la variable contient le texte "**Titre non trouvé**". Si le fichier **index.html** n'existe pas, la variable **$title** contient le texte "**Fichier index.html non trouvé**".
Enfin, le script affiche un lien vers le dossier ainsi que le titre **title** récupéré (ou un message d'erreur si le fichier index.html n'a pas été trouvé).