Vous est-il déjà arriver de vouloir vérifier la validité d'un adresse http:// ainsi que de vérifier si celle-ci était toujours en fonction ? Eh bien si c'est le cas, voici une petite fonction que vous pourrez intrégrer à votre script php afin de tester les URL désirer.
PHP :
<?php
function is_valid_url($url)
{
$url = @parse_url($url);
if (!$url)
{
return false;
}
$url = array_map('trim', $url);
$url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
$path = (isset($url['path'])) ? $url['path'] : '';
if ($path == '')
{
$path = '/';
}
$path .= (isset($url['query'])) ? "?$url[query]" : '';
if (isset($url['host']) AND $url['host'] != gethostbyname($url['host']))
{
if (PHP_VERSION >= 5)
{
$headers = get_headers("$url[scheme]://$url[host]:$url[port]$path");
}
else
{
$fp = @fsockopen($url['host'], $url['port'], $errno, $errstr, 30);
if (!$fp)
{
return false;
}
fputs($fp, "HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n");
$headers = fread($fp, 4096);
fclose($fp);
}
$headers = (is_array($headers)) ? implode("\n", $headers) : $headers;
return (bool)preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers);
}
return false;
}
?>
** UPDATE : la ligne 26 à été modifier pour évité une erreur lorsque l'URL est invalide.
$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);Voici maintenant un exemple d'utilisation de cette fonction :
$fp = @fsockopen($url['host'], $url['port'], $errno, $errstr, 30);
<?php{mos_fb_discuss:no_discuss}
if (is_valid_url('http://www.pckult.net'))
{
echo('Valide!');
}
?>
Marquer favoris
Bookmark
Email This
Hits: 1410
Commentaires (4)

Ecrit par JuS, novembre 16, 2007
C'est peut être à cause du paramétrage proxy de mon entreprise ...
Ecrit par JuS, novembre 15, 2007
Bonjour,
Code très utile mais il y a une condition que je ne comprends pas. Pourquoi faut-il que :
$url['host'] != gethostbyname($url['host'])
Dans l'exemple ci-dessus j'ai $url['host']="www.pckult.net" et gethostbyname($url['host'])="www.pckult.net" du coup je ne peux pas tester la validité de l'URL ...
Code très utile mais il y a une condition que je ne comprends pas. Pourquoi faut-il que :
$url['host'] != gethostbyname($url['host'])
Dans l'exemple ci-dessus j'ai $url['host']="www.pckult.net" et gethostbyname($url['host'])="www.pckult.net" du coup je ne peux pas tester la validité de l'URL ...
Ecrit par jouille, octobre 06, 2007
Tout d'abord bonjour et merci pour ce super script.
Je viens de récupérer ce joli script, et j'ai 2 problème que jen'arrive aps a résoudre, donc j'espère que vous pourrez y apporter une rep.
* Le premier, est que quand l'url est pas valide, j'obtient le message d'rreur suivant:
Warning: fsockopen(): unable to connect to serveur.com in c:program fileseasyphp1-8www
ewfolderscript test url.php on line 31
* le second, c'est que si le lien est valide, je voudrais l'afficher, pour sa, j'ai écrit la ligne suivant:
echo '';
J4ai essayé comme sa, ou en utilisant un lien URL, et dans les 2 cas, j'obtient une petite croix rouge qui me dit qu'il ne trouve pas le lien. Voila, si quelque'un pouvait m'expliquer, se serait grandement gentil de sa part. Merci
Je viens de récupérer ce joli script, et j'ai 2 problème que jen'arrive aps a résoudre, donc j'espère que vous pourrez y apporter une rep.
* Le premier, est que quand l'url est pas valide, j'obtient le message d'rreur suivant:
Warning: fsockopen(): unable to connect to serveur.com in c:program fileseasyphp1-8www
ewfolderscript test url.php on line 31
* le second, c'est que si le lien est valide, je voudrais l'afficher, pour sa, j'ai écrit la ligne suivant:
echo '';
J4ai essayé comme sa, ou en utilisant un lien URL, et dans les 2 cas, j'obtient une petite croix rouge qui me dit qu'il ne trouve pas le lien. Voila, si quelque'un pouvait m'expliquer, se serait grandement gentil de sa part. Merci
Ecrivez un commentaire





















