Comment vérifier les liens brisés d'un ensemble de pages html, de données json, d'un fichier robots.txt ou d'un sitemap ?
Nous avons développé une librairie php nommée php-linkchecker.
Cette libraire extrait dans un premier temps, l'ensemble des liens contenus dans les balises html ou dans le texte lui même, elle simule ensuite une connexion sur chaque lien pour en vérifier son existence (Erreur 404,403, ...).
Nous l'utilisons régulièrement afin de vérifier les liens brisés de ce site et de notre projet de carte intéractive projects.glicer.com/lyon.
PHP ou Hypertext Preprocessor doit être installé, php est un langage de programmation libre principalement utilisé dans le développement internet.
Composer est un gestionnaire libre de dépendances pour php, il permet de déclarer et d'installer automatiquement des librairies tierces.
Exécuter dans un invité, la ligne de commande ci-dessous :
php -r "readfile('https://getcomposer.org/installer');" | php
Cela affiche :
#!/usr/bin/env php
All settings correct for using Composer
Downloading...
Composer successfully installed to: C:\tmp\composer.phar
Use it: php composer.phar
Un fichier composer.phar est maintenant présent dans le répertoire courant.
Créer un fichier composer.json dans le répertoire courant contenant :
{
"require": {
"glicer/link-checker": "dev-master"
}
}
À partir du même répertoire que composer.json, exécuter dans un invité, la ligne de commande ci-dessous :
php composer.phar install
Cela affiche :
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing symfony/console (v2.3.27)
Loading from cache
- Installing symfony/finder (v2.3.27)
Loading from cache
- Installing symfony/css-selector (v2.6.6)
Loading from cache
- Installing glicer/simply-html (1.0.0)
Loading from cache
- Installing react/promise (v2.2.0)
Loading from cache
- Installing guzzlehttp/streams (3.0.0)
Loading from cache
- Installing guzzlehttp/ringphp (1.0.7)
Loading from cache
- Installing guzzlehttp/guzzle (5.2.0)
Loading from cache
- Installing glicer/link-checker (dev-master b35cefb)
Cloning b35cefb3071dae53359c5a12710e18338c9ad6ec
symfony/console suggests installing symfony/event-dispatcher ()
Writing lock file
Generating autoload files
Le répertoire courant contient les fichiers ci-dessous :
composer.json
composer.phar
composer.lock
vendor
├───composer
├───glicer
│ ├───link-checker
│ └───simply-html
├───guzzlehttp
├───react
└───symfony
Créer un fichier sample_check_html.php contenant le code ci-dessous :
<?php
require 'vendor/autoload.php';
use GlLinkChecker\GlLinkChecker;
use Symfony\Component\Finder\Finder;
//l'url http://lyon.glicer.com sera utilisée pour transformer les liens relatifs en liens absolus
$linkChecker = new GlLinkChecker('http://lyon.glicer.com');
//créer un objet finder qui permet d'indiquer les répertoires ou les fichiers à vérifier
$finder = new Finder();
//ajouter l'ensemble des fichiers html et json du répertoire public, ici l'ensemble des fichiers html et json du répertoire public
$files = $finder->files()->in('./public')->name("*.html")->name("*.json");
//lance la vérification des liens
$result = $linkChecker->checkFiles(
$files,
function ($nbr) {
// fonction appelée au démarrage
// $nbr est le nombre de liens à vérifier
},
function ($url, $files) {
// fonction appelée à chaque lien
// $files est la liste des fichiers qui contiennent cette url
},
function () {
// fonction appelée à la fin
}
);
//permet d'exporter le résultat au format html
$filereport = GlLinkCheckerReport::toTmpHtml('lyonCheck',$result);
//$filereport contient le chemin vers le rapport
print_r($filereport)
Exécuter le script en tapant la ligne de commande ci-dessous :
php sample_check_html.php
Cela affiche par exemple :
C:\Users\glicer\AppData\Local\Temp\lyonCheck55201c932ada3.html
Ouvrir le fichier html avec un navigateur internet, les liens en erreurs sont affichés en rouge. Survoler un lien avec la souris pour afficher les erreurs rencontrées.
Créer un fichier sample_check_robots.php contenant le code ci-dessous :
<?php
require 'vendor/autoload.php';
$linkChecker = new GlLinkChecker('http://lyon.glicer.com');
//vérifier le robots.txt du site http://lyon.glicer.com
$result = $linkChecker->checkRobotsSitemap();
//afficher le résultat
print_r($result);
Exécuter le script en tapant la ligne de commande ci-dessous :
php sample_check_robots.php
Cela affiche par exemple :
[
'disallow' =>
['error' => ['/img/', '/download/']],
'sitemap' =>
[
'ok' => [
'/sitemap.xml' =>
[
'ok' =>
[
'/index.html',
'/section/probleme-solution/compresser-css-html-js.html'
]
]
]
]
];
Dans ce cas /img/ et /download/ n'existent pas.