Pas besoin d'utiliser CURL, file_get_contents($url);
retourne false si la requête échoue (tout autre code HTTP autre que 2xx), ce qui pourrait être plus utile pour ce que vous essayez de faire, par exemple:
function urlExists($url)
{
return (bool) @file_get_contents($url);
}
Va retourner vrai si l'URL renvoie un contenu utile, faux sinon.
EDIT: Voici une façon plus rapide (il demande que les en-têtes) et le premier octet au lieu de la page entière:
function urlExists($url)
{
return (bool) @file_get_contents($url, false, null, 0, 1);
}
urlExists('https://stackoverflow.com/iDontExist'); // false
Cependant, en combinaison avec your other question il peut être plus sage d'utiliser quelque chose comme ceci:
function url($url)
{
return @file_get_contents($url);
}
$content = url('https://stackoverflow.com/');
// request has failed (404, 5xx, etc...)
if ($content === false)
{
// delete or store as "failed" in the DB
}
// request was successful
else
{
$hash = md5($content); // md5() should be enough but you can also use sha1()
// store $hash in the DB to keep track of changes
}
Ou si vous utilisez PHP 5.1+ vous suffit de faire:
$hash = @md5_file($url);
$hash
sera fausse lorsque l'URL ne se charge pas, sinon elle retournera le hachage MD5 du contenu.
Gracieusement stolen from @Jamie. =)
De cette façon, il suffit de faire une requête au lieu de deux. =)
Désolé pour la réponse tardive. Été un peu occupé. Merci beaucoup, @ md5_file(); c'est génial. Pouvez-vous me dire cependant, à quoi sert le '@' devant la fonction? – Rob
Rob: Est d'éviter la fonction pour lancer des erreurs si l'URL ne se charge pas. –
Donc, si je le mets dans mon curl_multi_exec (comme dans @curl_multi_exec();), il va exécuter toutes les urls indépendamment des erreurs? (Voir ma question ouverte pour plus d'informations) – Rob