Je veux vérifier si un site Web est en hausse ou en baisse à une instance particulière en utilisant PHP. J'ai appris que curl va récupérer le contenu du fichier mais je ne veux pas lire le contenu du site. Je veux juste vérifier l'état du site Web. Existe-t-il un moyen de vérifier l'état du site? Pouvons-nous utiliser ping pour vérifier l'état? Il me suffit d'obtenir les signaux d'état comme (404, 403, etc.) du serveur. Un petit extrait de code pourrait m'aider beaucoup.
quelque chose comme ça devrait fonctionner
$url = 'yoururl';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (200==$retcode) {
// All's well
} else {
// not so much
}
function checkStatus($url) {
$agent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; pt-pt) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27";
// initializes curl session
$ch = curl_init();
// sets the URL to fetch
curl_setopt($ch, CURLOPT_URL, $url);
// sets the content of the User-Agent header
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
// make sure you only check the header - taken from the answer above
curl_setopt($ch, CURLOPT_NOBODY, true);
// follow "Location: " redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// disable output verbose information
curl_setopt($ch, CURLOPT_VERBOSE, false);
// max number of seconds to allow cURL function to execute
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
// execute
curl_exec($ch);
// get HTTP response code
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode >= 200 && $httpcode < 300)
return true;
else
return false;
}
// how to use
//===================
if ($this->checkStatus("http://www.dineshrabara.in"))
echo "Website is up";
else
echo "Website is down";
exit;
curl -Is $url | grep HTTP | cut -d ' ' -f2
Voici comment je l'ai fait. J'ai défini l'agent utilisateur pour minimiser les risques que la cible m'interdise et j'ai également désactivé la vérification SSL car je connais la cible:
private static function checkSite( $url ) {
$useragent = $_SERVER['HTTP_USER_AGENT'];
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // do not return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_USERAGENT => $useragent, // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 2, // timeout on connect (in seconds)
CURLOPT_TIMEOUT => 2, // timeout on response (in seconds)
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_SSL_VERIFYPEER => false, // SSL verification not required
CURLOPT_SSL_VERIFYHOST => false, // SSL verification not required
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
curl_exec( $ch );
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($httpcode == 200);
}
Avez-vous vu la fonction get_headers ()? http://it.php.net/manual/en/function.get-headers.php . Il semble faire exactement ce dont vous avez besoin.
Si vous utilisez curl directement avec l'indicateur -I, il renverra les en-têtes HTTP (404, etc.) au lieu de la page HTML. En PHP, l'équivalent est l'option curl_setopt($ch, CURLOPT_NOBODY, 1);
.
ping
ne fera pas ce que vous cherchez - il vous dira seulement si la machine est en marche (et répond à ping
). Cela ne signifie pas nécessairement que le serveur Web est en place, cependant.
Vous voudrez peut-être essayer d'utiliser la méthode http_head - elle récupérera les en-têtes que le serveur Web vous renvoie. Si le serveur renvoie des en-têtes, vous savez qu'il est opérationnel.
Vous ne pouvez pas tester un serveur Web avec ping
, car c'est un service différent. Le serveur est peut-être en cours d'exécution, mais le démon du serveur Web peut être bloqué de toute façon. Alors curl est ton ami. Ignorez simplement le contenu.