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");

Tendances

Questions liées

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

...