par

Comment puis-je vérifier et tester si un site est en ligne, ou si une URL est valide en PHP ?

2 Réponses

+1 validé
par

Il existe plusieurs méthodes pour vérifier l’existence et la validité d'une adresse Web en PHP.

Cette fonction utilise CURL pour déterminer si le serveur qui héberge un nom de domaine répond :

function onlineCheck($domaine){
$timeout = 10;
$curlInit = curl_init($domain);
curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,$timeout);
curl_setopt($curlInit,CURLOPT_HEADER,true);
curl_setopt($curlInit,CURLOPT_NOBODY,true);
curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);
$reponse = curl_exec($curlInit);
curl_close($curlInit);
if ($reponse) return true;
return false;
}

if(onlineCheck('google.com')){echo "en ligne";}

Vous pouvez également utiliser GET_HEADERS qui retourne toutes les en-têtes envoyées par le serveur en réponse à une requête HTTP. On peut ainsi vérifier qu'un site existe, ainsi que vérifier la nature de la réponse, et donc par exemple détecter une erreur 404.

$adresse = "http://www.test.com/test.php";

$file_headers = @get_headers($adresse);

if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') 
{
    echo "$adresse ne réponde pas ou  retourne une erreur 404";
}
else 
{
    echo "$adresse est correctement accessible";
}

Une autre méthode consiste à utiliser FOPEN pour essayer d'ouvrir la page cible et ainsi vérifier que le site, ou la page, existe bel et bien sur le serveur :

ini_set("default_socket_timeout","05");
set_time_limit(5);
$f=fopen("http://www.exemple.com","r");
$r=fread($f,1000);
fclose($f);

if(strlen($r)>1)
{
    echo("site en ligne");
}
else 
{
    echo("site hors ligne");
}

Si vous avez besoin de tester l'accessibilité à un site sur un numéro de port spécifique ou faire la distinction entre une requête TCP et UDP, vous pouvez utiliser FSOCKETOPEN :

$socket = fsockopen("udp://192.168.0.1", 80, $errno, $errstr, 10);

if (!$socket) 
{
    echo "en UDP le port 80 ne répond pas";
}
+1 validé
par

Il est également possible de vérifier qu'un nom de domaine répond vis à vis des DNS.

Pour cela il faut utiliser la fonction checkdnsrr() dont voici un exemple :

function domaine($domaine)
{
	if(!checkdnsrr($domaine,"MX")&& !checkdnsrr($domaine,"A"))
		echo "Ce nom de domaine n'existe pas";
	else
		echo "Ce nom de domaine existe";
}

domaine("google.com");

On peut aussi modifier quelque peu la fonction pour vérifier si le nom de domaine associé à une adresse e-mail existe.

function email_domaine($email)
{
	list($compte,$domaine)= explode("@",$email,2);
	if(!checkdnsrr($domaine,"MX")&& !checkdnsrr($domaine,"A"))
		echo "Le nom de domaine de cette adresse mail n'existe pas";
	else
		echo "Le nom de domaine de cette adresse mail existe";
}

email_domaine("contact@google.com");

Offre Sponsorisée

Ailleurs sur le Web

Lecture Recommandée

Edward Snowden - Mémoires vives

"Je m'appelle Edward Joseph Snowden. Avant, je travaillais pour le gouvernement mais aujourd'hui je suis au service de tous. Il m'a fallu près de trente ans pour saisir la différence et quand j'ai compris, ça m'a valu quelques ennuis au bureau."

L'homme qui a tout risqué pour dénoncer la surveillance globale, ou l'extraordinaire histoire d'un garçon brillant qui a grandi "en ligne", d'un homme devenu espion, puis lanceur d'alerte, et, en exil, la consciencce de l'internet.

Mémoires vives est un témoignage exceptionnel, également disponible en numérique.

Sujets Connexes

Questions liées

1 réponse
posée par anonyme 27-Aout-2018
1 réponse
posée par anonyme 12-Janvier-2020
1 réponse
1 réponse
1 réponse
1 réponse

Merci pour votre visite sur 1FORMATIK.com

Un petit clic sur la pub est toujours apprécié, c'est elle qui finance le site

Bon surf

...