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