[Résolu] Connaître le status d'une Balise IMG

Nouveau WRInaute
Salut tout le monde,

Je cherche un moyen de tester le status d'une balise IMG, j'imagine que cela doit être possible par JavaScript / Ajax.

En fait, mon link dans SRC est généré dynamiquement. Il arrive parfois qu'il est erroné (je n'y peut rien, aucun moyen de le tester). Je voudrais pouvoir tester le state de l'image pour aussi mettre une image par défault si mon link est erroné et donne une image avec un X rouge.

Vous connaissez une solution?

Merci beaucoup.
 
Nouveau WRInaute
Mon lien est bel et bien généré en PHP, mais il n'est pas sur mon serveur.
Il pointe vers un site distant, donc je ne crois pas que le file_exist peut s'appliquer.

Je me trompe peut-être?
 
WRInaute impliqué
mod12 a dit:
Mon lien est bel et bien généré en PHP, mais il n'est pas sur mon serveur.
Il pointe vers un site distant, donc je ne crois pas que le file_exist peut s'appliquer.

Je me trompe peut-être?

Tu as essayé au moins ?

RiPSO a dit:
t'as essayé avec fopen?

Après une lecture rapide de la doc, les devraient marcher

merci de nous dire quelle solution tu as appliqué et marquer le sujet [Résolu] !
 
WRInaute accro
fopen est parfait pour verifier l'existance de fichiers sur des serveurs distants:

Code:
<?php

function check_fichier_existe($nomfile) {

       $fp = @fopen($nomfile);
       if(!$fp) return false;
       else {
            fclose($fp);
            return true;}
       }

?>
 
Nouveau WRInaute
NxtGen u Got it.

Merci tout le monde quand même pour votre aide.

Le fOpen, marchait en local (avec fOpen ON et display_errors (On ou off))
Par contre sur mon serveur Hostpapa il ne fonctionnait pas (fOpen ON et display_errors off).
Je ne vois pas pourquoi car mes deux configurations étaient donc semblables.


Solution:

Code:
$info = print_r(get_headers($imgUrl), true);
$pos = strpos($info, "404");
	
if(strlen($pos) > 0) {
       echo "<img src='images/noimg.jpg' />";
}else{
       echo "<img src='".$imgUrl."' /> "; 
}

*Il est bien important de mettre print_r à true sinon on ne peut pas storer l'info dans la variable $info il print directement.
Thx guys, beaucoup de réponses en peu de temps :wink:

edit: ah by the way, nop file_exist ne fonctionnait pas non plus. ^^
 
WRInaute impliqué
Je comprend pas trop l'utilisation de print_r() ici...
En reprenant ton code, j'aurais fais un truc comme ca moi :

Code:
$info = get_headers($url);
if ( eregi('404', $info[0]) ) {
       echo "<img src='images/noimg.jpg' />";
       }
else {
       echo "<img src='".$imgUrl."' /> "; 
       }

Parce que la le risque avec ton code, c'est que si il y a "404" affiché quelque part dans le resultat de get_headers(), Content-Length: 404 par exemple, ce qui n'est pas impossible, ca va afficher l'image noimg.jpg alors que l'image sur le serveur distant existe peut etre quand meme, tu vois ce que je veux dire ?

En utilisant $info[0], qui d'apres php.net retourne simplement le status de la page (200, 404, etc), tu limite vachement le risque d'erreur ;)
 
WRInaute impliqué
mod12 a dit:
Le fOpen, marchait en local (avec fOpen ON et display_errors (On ou off))
Par contre sur mon serveur Hostpapa il ne fonctionnait pas (fOpen ON et display_errors off).
Je ne vois pas pourquoi car mes deux configurations étaient donc semblables.

T'as vérifié ton allow_url_fopen dans le php.ini?
 
Nouveau WRInaute
:roll:
J'aurais peut-être du le mentionner :P

D'ailleurs, 1 an que je suis avec eux, et support et service impecable.
Il font même mes backups de bd directement avec mysqldump en shell quand je leur demande xD
 
WRInaute accro
NxtGen a dit:
Je comprend pas trop l'utilisation de print_r() ici...
En reprenant ton code, j'aurais fais un truc comme ca moi :

Code:
$info = get_headers($url);
if ( eregi('404', $info[0]) ) {
       echo "<img src='images/noimg.jpg' />";
       }
else {
       echo "<img src='".$imgUrl."' /> "; 
       }

tu as raison, get_headers() est ce qui il y a de plus portable.. meme curl peut ne pas etre actif.. fopen c'est rare mais ca arrive..

Note: dans ton code tu utilises une fonction POSIX (eregi) mais elles sont dorenavant obsolètes et ne seront plus activées dés php6. il faut utiliser les PCRE.
 
WRInaute accro
Il faut prendre l'habitude d'utiliser des pcre

Code:
$info = get_headers($url);
if ( preg_match("/404/", $info[0]) ) {
       echo "<img src='images/noimg.jpg' />";
       }
else {
       echo "<img src='".$imgUrl."' /> ";
       }
 
Discussions similaires
Haut