IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Tester si une image distante existe


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut Tester si une image distante existe
    bonjour

    voila je voudrai savoir comment faire pour savoir si une image distante existe ou non c'est a dire une image sur un autre site exite pour lafficher sur mon site sinon afficher une image de substitution

    voici ce ke j'ai commencer a faire, mais si le site distant redirige sur l'erreur 404 ma fonction ne marche pas du coup :

    j'ai fais une fonction general et 2 fonctions une qui teste si le fichier distant existe et l'autre la taille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    function test_image($url)
    {
      $vartemp="http://thumbnails.alexa.com/image_server.cgi?size=large&url=$url";
      $tableau = explode("/",$url);
       $fichier=$url."/ascreen.jpg";
       if(isset($tableau[3]))
       {
          $fichier=$url."ascreen.jpg";
       }
     
      if(remote_file_exists ($fichier))
      { 
        $size=taille_fichier($fichier);
        if(($size)<=4000)
        {
     
         return ($fichier);
     
        }
        else
        {
          return $vartemp;
     
        }
      }
      elseif(remote_file_exists($vartemp))
      {
         return $vartemp;
      }
    }
     
    function remote_file_exists ($url)
    { 
     
    /* 
       Return error codes: 
       1 = Invalid URL host 
       2 = Unable to connect to remote host
    */    
     
       $head = ""; 
       $url_p = parse_url ($url); 
     
       if (isset ($url_p["host"])) 
       { $host = $url_p["host"]; }
       else 
       { return 1; } 
     
       if (isset ($url_p["path"])) 
       { $path = $url_p["path"]; } 
       else 
       { $path = ""; } 
     
       $fp = fsockopen ($host, 80, $errno, $errstr, 20); 
       if (!$fp) 
       { return 2; } 
       else 
       { 
           $parse = parse_url($url); 
           $host = $parse['host']; 
     
           fputs($fp, "HEAD ".$url." HTTP/1.1\r\n"); 
           fputs($fp, "HOST: ".$host."\r\n"); 
           fputs($fp, "Connection: close\r\n\r\n"); 
           $headers = ""; 
           while (!feof ($fp)) 
           { $headers .= fgets ($fp, 128); } 
       } 
       fclose ($fp); 
       $arr_headers = explode("\n", $headers); 
       $return = false; 
       if (isset ($arr_headers[0])) 
       { $return = strpos ($arr_headers[0], "404") === false; }
       return $return; 
    } 
     
    function taille_fichier($url)
    {
      $buffer = '';
      if($fd = fopen ($url, "r")) {
        while (!feof($fd)) {
            $buffer .= fgets($fd, 4096);
        }
        fclose ($fd);
      }
      $size = strlen($buffer);
      return $size;
    merci par avance

  2. #2
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Peux être en vérifiant grace à mime_content_type comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (mime_content_type('http://truc.com/image.gif')=="image/gif") {
     
    }
    Mais je ne suis pas sur que mime_content_type fonctionne bien sur les url, a tester.

  3. #3
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    Je ne sais pas du tout si ça marche mais un truc avec les fonctions CURL, ça pourrait aller non?
    mais pourquoi tu cours?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    salut
    ouai en faitmon serveur gere le language curl car j'ai tester la numero de version
    par contre je regarde les fonctions mais laquellle pourrai m'aider?

    merci

  5. #5
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    Les fonction curl permet de recuperer les données distantes (fias quelques recherches sur les fonctions curl_init() et curl_setopt() et les autres fonctions curl_ ).
    Tu recuperes le fichier distant avec curl_init($url_distant) que tu recuperes doonc soit dans un fichier, soit dans une chaine de caractere (tu determine ça avec curl_setopt) et je pense tu peux voir (avec des expressions regulires) si le content-type du fichier recuperé correspond avec ce que tu recherches (donc si c'est une image).

    ..je m'exprime pas super bien.. j'ai besoin de vacances.. mais j'espere que tu vois a peu pres ce que je veux dire
    mais pourquoi tu cours?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    ouai je comprend

    par contre je connaissais pas du tout ce language et c'est pas trop documenté non?

  7. #7
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    ce n'est pas un langage, c'est une fonction php...
    Je l'ai moi meme decouvert y a peu de temps, mais ce n'etait pas trop dur de trouver des docs a son sujet.

    Tiens, y a ça par exemple pour le curl_setopt() et tu trouveras d'ailleurs les autres fonctions aussi

    http://fr.php.net/manual/fr/function.curl-setopt.php
    mais pourquoi tu cours?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    ouai merci beaucoup de ton aide je vais tenter car c'est vrai que en francais c'est plus simple lol

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    salut

    vola je reviens car quand j'utilise curl_setopt en retour d'execution j'ai chaque fois ceni :

    Resource%20id%20#19

    20#19 change on fonction de mes occurences

  10. #10
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    envoies ton code un peu?
    mais pourquoi tu cours?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    par exemple je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function test_image($url)
    {
      $vartemp="http://thumbnails.alexa.com/image_server.cgi?size=large&url=$url";
      $tableau = explode("/",$url);
       $fichier=$url."/ascreen.jpg";
       if(isset($tableau[3]))
       {
          $fichier=$url."ascreen.jpg";
       }
      $ch= curl_init();
      curl_setopt($ch, CURLOPT_HTTP_VERSION, $fichier);
      curl_exec($ch);
     
      return $ch;
    ps je fais des teste car comme je connais pas trop alors je teste

  12. #12
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    ps je fais des teste car comme je connais pas trop alors je teste
    on a tous commencé comme ça
    D'ailleurs je suis loin d'etre expert encore, comme je l'ai dit, j'ai trouvé ça y a pas longtemps. Moi j'aurais fait plutot comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ch= curl_init($fichier); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // recuperer dans une chaine de caracteres
    $res=curl_exec($ch); // $res : la chaine en question
    et tu traites la chaine $res ensuite pour le content-type
    mais pourquoi tu cours?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    si je comprend bien CURLOPT_RETURNTRANSFER me renvoie le contenu du fichier?

    a partir du contenu je peut savoir si c'est une image ?


    merci encore

  14. #14
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    oui, il te renvoie le contenu du fichier.
    ça te permet deja de savoir si le lien est bon. Ensuite après il faut voir quelles entetes definissent l'image, et une fois que t'as trouvé, tu recherches dans la chaine renvoie par le curl ces entetes.
    Enfin je pense que c'est bon comme ça, maintenant je sais pas trop si tu peux effectivement voir les entetes du fichier recupéré pour voir si c'est une image ou pas.
    mais pourquoi tu cours?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    bin en fait moi l'image que je teste a tjs le meme nom (ascreen.jpg)
    c'est pour avoir l'apercu d'un site.

    en fait le probleme que je rencontrait c'est lorsque sur un site le ficier n'existe pas et que le site personnalise les erreur 404 car la du coup mon fichier n'est pas vide

    alors avec le curl quand jaffiche le contenu recuperer, soit j'ai des caracteres bisar quand l'image marche soit j'ai l'affichage de la pages d'eerur mais en tres gros et c'est long.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    car moi en fait ce ke j'aurai voulu faire a la base, c'est faire un sreenshot dynamiquement de la page d'acceuil du site.
    mais je sais pas comment faire

  17. #17
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    les caracteres bizarres si c'est une image, c'est tout à fait normal. Et justement, je me disais que les fichiers images commencent par quelque chose de spécial qui permet donc de savoir que c'est une image, et ce sont ces informations justement que je te suggere de rechercher dans ta variable $res afin de voir si c'est une image ou pas. Ou sinon tu fais inversement (dans ton cas bien precis), tu regardes si c'est une page HTML que ça renvoie (donc si tu trouves des balises HTML, c'est que c'est la page d'erreur.
    Je sais pas si j'ai bien compris ce que tu veux faire...
    mais pourquoi tu cours?

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    enfait voila ce ke je veux faire :
    http://qui.trouve.free.fr/index.php?cat_id=7&page=1

    tu vois a coté de chaque description ya une image qui represnete normalement l'appercu du site web.

    au depart j'aurai voulu le faire dynamiquement genre mettre a jour une fois par mois... mais comme je sais pas comment faire alors j'ai utilisé ascreen et le systeme d'alexa.

  19. #19
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    je vois.. mais je ne connais pas alexa... je sais pas si je peux t'aider plus...
    mais si tu veux tester lexistence d'une image distante, je pense qu'en bidouillant avec les curl tu peux arriver a quelque chose de bien efficace
    mais pourquoi tu cours?

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 164
    Points : 64
    Points
    64
    Par défaut
    ouai merci encore en tout cas

Discussions similaires

  1. Comment tester qu'une image existe
    Par Salsaboy60 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/01/2014, 14h06
  2. Tester si une image existe
    Par Thewil dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/06/2009, 16h06
  3. Vérifier si une image distante existe
    Par fab4am dans le forum Langage
    Réponses: 26
    Dernier message: 02/01/2007, 17h10
  4. Réponses: 2
    Dernier message: 06/05/2006, 22h50
  5. Réponses: 7
    Dernier message: 05/05/2006, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo