Accueil » Conseils & tutoriels sites internet » Blog hébergement » Vérifier l’état de plusieurs sites web rapidement avec PHP et cURL

Vérifier l’état de plusieurs sites web rapidement avec PHP et cURL

Posté dans : Blog hébergement 0

Bonjour la communauté,

Aujourd’hui, nous allons voir comment automatiser la vérification de l’état de nos sites web depuis un script PHP.

En effet, quand nous nous lançons dans conquête de la toile, nous arrivons avec un seul et unique site web. Mais, très vite, on se prend au jeu et la mise en ligne d’autres projets ne se fait pas attendre.

Problématique :

Avec un seul site internet, il est facile de vérifier son état simplement en le visitant depuis son navigateur. Mais imaginez maintenant que vous avez une vingtaines de sites à vérifier quotidiennement. Le temps de vous rendre sur chacun d’eux pour vérifier qu’ils sont bien fonctionnels peut vous faire perdre un temps précieux et devenir redondant.

C’est pourquoi nous mettons à votre disposition ce script qui s’occupera d’effectuer cette vérification pour vous. Il est rapide et permet de visualiser en quelques instant l’état général de vos sites web.

Les possibilités :

Le script peux facilement être exécuté depuis une page web (que vous pourrez protéger à l’aide d’un .htpasswd ou d’un .htaccess) ou bien depuis un poste local si PHP est installé sur votre machine.

Avec un peu d’imagination, vous pouvez même programmer une tâche Cron et faire que le script vous envoi automatiquement un e-mail contenant les résultats des tests ou même envoyer une alerte si un de vos sites est HS.

Ce dernier cas est très utile et permet une réactivité à toute épreuve !

Le script :

Codé en PHP, ce script, utilise la bibliothèque libcurl qui permet d’utiliser le langage cURL afin d’accéder à nos sites internet et d’analyser la réponse renvoyée par ce dernier.

Aussi, pour que l’analyse soit rapide, nous utiliseront la classe RollingCurlX écrite par Marcushat. Elle offre la possibilité d’effectuer plusieurs requêtes cURL simultanées ce qui augmentera considérablement la rapidité d’exécution de notre script.

Le code :

Le code utilisé n’est pas tellement compliqué. Nous allons le détailler ici en quelques lignes.

Les fichiers nécessaires :

Comme vu plus haut, nous aurons besoin de la classe RollingCurlX et de ses composants. Vous pouvez facilement télécharger l’ensemble avec Git :

$ git clone https://github.com/marcushat/RollingCurlX.git

Ou bien récupérez l’archive zip depuis GitHub.

Nous aurons aussi besoin d’un fichier contenant la liste des domaines que nous souhaitons vérifier. Nous allons donc créer le fichier « domain_list.php » suivant ce modèle:


return [
    'example.com',
    'my-domain.com'
];

Rien de bien mystérieux jusque là. Nous nous servons de ce fichier pour retourner un tableau listant nos différents domaines.

Appel des fichiers requis :

Notre script commencera par appeler les deux fichiers que nous venons de créer/récupérer :


// require curl multi-requests handler
require('../RollingCurlX/src/rollingcurlx.class.php');

// require domain list
$urls = require('domain_list.php');

Le Callback :

Le callback est la fonction qui sera exécutée lors de chaque requête envoyée par l’objet RollingCurlX. Elle va donc être appliquée à chacun de nos domaines.


/**
 * Callback function
 */
function everDomainChecker($response, $url, $request_info, $user_data, $time) 
{
    echo "The domain {$request_info['url']} is {$request_info['curle_msg']} with a status code of {$request_info['http_code']}";
    echo "\n-----------------------------------------\n";
}

Nous voyons ici que la fonction met à notre disposition plusieurs arguments plus ou moins utiles. Nous nous intéresseront surtout à $request_info qui est un tableau contenant le code du statut http ainsi que le message de curl sur le résultat de la requête mais aussi bien d’autres informations.

Deux instructions echo nous suffisent à afficher les données qui nous intéressent.

Le corps :

Le corps du script initialise l’objet RollingCurlX, défini les options de cURL, ajoute les domaines à la liste des requêtes à effectuer et, enfin, les exécutes.


// rollingCurlX init
$RCX = new RollingCurlX(20);

// define cURL global options
$RCX->setTimeout(10000); // in milliseconds

// Set cURL options
$RCX->setOptions([
    CURLOPT_NOBODY => true,
    CURLOPT_FOLLOWLOCATION => true
]);

// loop through domain list
foreach ($urls as $url) {
    $RCX->addRequest($url, NULL, 'everDomainChecker');
}

// execution
$RCX->execute();

L’argument passé au moment de l’initialisation de l’objet défini le nombre maximum de requête à effectuer simultanément.

Le Timeout (en milliseconde) peut être augmenté suivant les besoins. Le temps de réponse moyen d’un site internet est d’environ 6 secondes dans l’idéal mais c’est sans compter les redirections.

L’option CURLOPT_NOBODY permet de ne pas télécharger le corp du site pour des questions de performances et de rapidité.

L’option CURLOPT_FOLLOWLOCATION permet de suivre les redirections.

La boucle itère à travers le tableau contenant nos domaines et ajoute ceux-ci à la liste des requêtes à effectuer. On y précise l’url ainsi que le callback défini précédement.

Et enfin, on exécute la requête ! Cette dernière instruction va effectuer une connexion à chaque domaine de notre liste. Pour chacune de ces connexions, les données récupérées seront soumisent au callback et affichera le résultat dans notre navigateur ou notre console. Il ne nous reste plus qu’à analyser les résultats.

Analyse des résultats :

Les codes du statut http affichés dans les résultats ne sont pas explicites. Ils sont sous la forme de 3 chiffres. Vous connaissez certainement le tristement célèbre 4O4 signifiant que la page demandée n’existe pas.

Un code 503 signifie que le service est temporairement indisponible. Ce code est généralement utilisé lorqu’un site est en maintenance.

Un code 403 signifie que le client n’a pas la permission d’accèder au contenu.

Un code 301 ou 302 signifie qu’il y a une redirection sur cette adresse. Augmentez la limite du Timeout pour aller plus loin.

Un code 200, celui dont tout le monde rêve, signifie que la requête a été correctement reçue, comprise et acceptée. C’est le code qui témoignera du bon fonctionnement d’un site web.

Vous trouverez les détails des significations des codes http à cette adresse :

Détail des codes de statut http (en)

Pour conclure :

Nous utilisons ce script tout les jours afin de contrôler l’état des sites que nous hébergeons. Il nous fait gagner beaucoup de temps et nous permet de nous concentrer sur des choses plus importantes.

Vous trouverez les sources de ce script librement distribués sur GitHub :

EverDomainChecker

NB: Ce script n’analyse pas en profondeur le site internet. Il se contente de se connecter à la page d’accueil et de traduire la réponse. Il ne va pas plus loin mais cela suffit pour une check de routine.


En vous souhaitant une bonne utilisation de ce script que nous avons le plaisir de mettre à votre disposition.

A très bientôt ! = )

Imprimer Imprimer

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.