[Aide]Récupérer le favicon du code source

Denzel68 Messages postés 44 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 10 décembre 2019 - 25 janv. 2013 à 17:56
Denzel68 Messages postés 44 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 10 décembre 2019 - 5 févr. 2013 à 14:38
Bonjour je voudrais faire une récupération de favicon via le code source depuis un lien.
Mais mon problème et que sa me récupers rien voici le code :
<?php
function GetFav($link) {
  $cont = file_get_contents($link);
  preg_match("/<link rel="(shortcut )?icon"( type="(.*)")? href="(.*)" \/>/", $cont, $match);
  return strip_tags($match[3]);
}

echo GetFav("URL_DU_DIT_SITE");
?>

Donc j'ai une question : et t'il possible de récupérer le contenue d'une balise link ?

J'ai regarder pour utiliser celui de google :
http://www.google.com/s2/favicons?domain=URL_DU_DIT_SITE</code>

mais il et trop limiter il affiche seulement les (.ico) et moi je voudrais un qui afficher tout les format suivent :
ico, jpg, gif, png et bmp

Et se que vous avez une solution ?

9 réponses

Denzel68 Messages postés 44 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 10 décembre 2019
27 janv. 2013 à 15:56
Personne pour m'aider ?
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
31 janv. 2013 à 11:12
Ce que tu demandes n'est pas simple à réaliser, dans la mesure où on ne peut pas savoir dans quel ordre apparaitront les attributs de la balise link.
Une manière de faire serait de dire, on cherche les balises link contenant un attribut rel contenant "shortcut icon" ou "icon" (avec ou sans majuscules) et précédé ou suivi d'un attribut href contenant la valeur cherchée et le tout précédé ou suivi d'autres attributs qu'on veut ignorer.
Comme on ne peut pas savoir si l'attribut rel viendra avant ou après l'attribut href, il faut tester deux cas (rel avant href et href avant rel)
Soit quelquechose comme :

function GetFav($link) {
  $text = file_get_contents($link);
  $n = preg_match("/<link(\s+[a-zA-Z]+\s?=\s?"[^"]*")?\s+rel\s?=\s?"\s?(shortcut\s+)?icon\s?"\s+([a-zA-Z]+\s?=\s?"[^"]*"\s+)*href\s?=\s?"([^"]*)"(\s+[a-zA-Z]+\s?=\s?"[^"]*")?\s?\/>/i", $text, $match);
  echo "method 1 : n = " . $n;
  echo "";
  print_r($match) ;
  if (count($match) >= 4)
  	echo "favico = " . $match[4];
  else 
    echo "no favico";
  echo "

";
  
  $n = preg_match("/<link(\s+[a-zA-Z]+\s?=\s?"[^"]*")?\s+href\s?=\s?"([^"]*)"\s+([a-zA-Z]+\s?=\s?"[^"]*"\s+)*\rel\s?=\s?"\s?(shortcut\s+)?icon\s?"(\s+[a-zA-Z]+\s?=\s?"[^"]*")?\s?\/>/i", $text, $match);
  echo "method 2 : n = " . $n;
  echo "";
  print_r($match) ;
  if (count($match) >= 4)
  	echo "favico = " . $match[4];
  else 
    echo "no favico";
  echo "

";
}

$url = isset($_GET['url']) ? $_GET['url'] : "http://www.phpcs.com";
GetFav($url);
0
Denzel68 Messages postés 44 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 10 décembre 2019
4 févr. 2013 à 13:25
Bonjour et merci pour l'aide je ves voire pour l’amélioré si besoin est.
0
Denzel68 Messages postés 44 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 10 décembre 2019
4 févr. 2013 à 17:45
Bonjour je regarder pour l'amélioré pour mon site mais il ne me donne que l'images no favicon voici le code :
function GetFav($link = Null) {
  $text = file_get_contents($link);
  if ($link == Null) {
    $View = "";
  }
  else {
    global $text, $link;
    $method = preg_match("/<link(\s+[a-zA-Z]+\s?=\s?"[^"]*")?\s+rel\s?=\s?"\s?(shortcut\s+)?icon\s?"\s+([a-zA-Z]+\s?=\s?"[^"]*"\s+)*href\s?=\s?"([^"]*)"(\s+[a-zA-Z]+\s?=\s?"[^"]*")?\s?\/>/i", $text, $match);
    $method2 = preg_match("/<link(\s+[a-zA-Z]+\s?=\s?"[^"]*")?\s+href\s?=\s?"([^"]*)"\s+([a-zA-Z]+\s?=\s?"[^"]*"\s+)*\rel\s?=\s?"\s?(shortcut\s+)?icon\s?"(\s+[a-zA-Z]+\s?=\s?"[^"]*")?\s?\/>/i", $text, $match);

    if ($method == 1) {
      # print_r($match);
      if (count($match) >= 4) {
        # echo "favico = " . $match[4];
        $View = "";
      }
    }
    elseif ($method2 == 1) {
      # print_r($match);
      if (count($match) >= 4) {
        # echo "favico = " . $match[4];
        $View = "";
      }
    }
    else {
      $View = "";
    }
  }
  return $View;
}

$url = isset($_GET['url']) ? $_GET['url'] : "http://www.phpcs.com";
echo GetFav($url);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
4 févr. 2013 à 21:22
Salut,

j'ai répondu à ta première question. A savoir, te donner une piste pour extraire les favicon d'une balise link.

Après, tu peux modifier cette réponse pour faire ce que tu veux, mais ne me demandes pas te finir ton travail à ta place. Éventuellement, poses une autre question sur le forum, quand tu seras plus avancé dans la résolution de ton problème et vois si quelqu'un veut bien te répondre. Peut être, moi si j'ai envie, comme les autres contributeurs, s'ils ont envie, et qu'on est sympas avec eux.

P.S. : j'ai arrêter de lire vers "global $text, $link;". Le mot clé global est une forme d'impolitesse, de nos jours, il faut le savoir.
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
4 févr. 2013 à 21:36
Il y a une erreur dans la méthode 2. En inversant les expressions rel et href, cela modifie l'ordre des groupes capturés et donc l'emplacement de celui qui représente le favicon.
0
Denzel68 Messages postés 44 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 10 décembre 2019
4 févr. 2013 à 23:20
global est une forme d'impolitesse
S'est a dire ?

Sinon merci pour l'aide que tu avais aporter
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
5 févr. 2013 à 10:34
Salut,

Impolitesse : il s'agit juste d'un mauvais trait humour, pour dire que l'utilisation des variables globales est plutôt proscrit, de nos jours. Elle ne sont utilisées que dans de rares contextes, comme s'interfacer avec un vieux programme ou une vieille libraire, ou une librairie mal conçue. Elles sont sources d'erreurs difficiles à trouver. On parle d'effets de bords. C'est à dire que, en cours d’exécution, une variable globale est modifiée soit sans qu'on comprenne par qui et pourquoi, soit, pire, modifiée avec des valeurs inattendues qui provoque des erreurs grave de fonctionnement du programme. Dans un contexte mono thread, elles peuvent être modifiées par des méthodes/fonction/procédures profondément enfouies dans les milliers de lignes d'une librairie. Dans un contexte multi thread, elles peuvent être modifiées par des threads ou processes, sur lesquels ont a pas forcément la main. Dans ton snippet, l'utilisation du mot clé global n'est pas justifié. Rien de grave.

Il faudra peut être modifier l'expression que je t'ai proposé, pour qu'elle englobe plus de cas. Le pattern \s?=\s? n'englobe que les = séparés par 0 ou 1 espace, tandis que s*=s* englobera tous les = séparés par 0 ou n espaces. De même pour les patterns de capture des attributs à ignorer (\s+[a-zA-Z]+\s?=\s?"[^"]*")? pourrait devenir (\s+[a-zA-Z]+\s*=\s*"[^"]*")*, pour avoir 0 ou n attributs séparant les attributs rel et href.

Le numéro de position du groupe de capture de la valeur du favicon (la valeur du href) dans la seconde expression est le 2 au lieu du 4.

echo "favico = " . $match[2];
0
Denzel68 Messages postés 44 Date d'inscription dimanche 22 février 2009 Statut Membre Dernière intervention 10 décembre 2019
5 févr. 2013 à 14:38
Ok merci pour la petit explication.
Bon je supprimer le: global $vars, $vars1 , ...;
Et a la place je des $vars j'ai mis des $_REQUEST['GetFavText'].
Même si je ne sais plu pourquoi il faux les utiliser (Je suis de retour dans le php âpre 3 ans sans pc)
0
Rejoignez-nous