[RESOLU] Insérer une image pour une variable

Mammouth du PHP | 643 Messages

06 mai 2017, 07:19

Salut tt le monde.
J'affiche via ma base de donnée et via une variable les image de mes post
$image = !empty($ligne['photo']) && file_exists('annonce/img-big-format/miniature/'.$ligne['photo']) ? '../annonce/img-big-format/miniature/'.$ligne['photo'] : '../annonce/remplacement/'.simplification($aLoisirs[$ligne['id_type_loisirs']]).'.jpg';
Exemple de résultat retourné
<img class="img-responsive" src="https://site.fr/static/images/vignettes/a_391941.gif">

A sàvoir que bien sur la fin ( a_391941.gif ) peut varier.

J'aimerais faire en sorte que si $image correspond à https://site.fr/static/images/vignettes/.....gif ( alors on affiche 'echec', par exemple )
Si c'est plus simple si le format photo est .gif alors echec.

Merci pour les tuyaux ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 mai 2017, 08:45

Bonjour,

Mon conseil serait déjà que tu mettes ton if sur 3 lignes avec des accolades, ça rendra ton code + lisible et ça te permettra de mieux voir à quel niveau tu dois insérer ta nouvelle condition
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

09 mai 2017, 19:32

Actuellement c'est dans ma boucle et ca parcour mon repertoir afin de voir si l'image est présente ou pas
while($ligne = $req->fetch(PDO::FETCH_ASSOC)){  

	$image = !empty($ligne['photo']) && file_exists('annonce/img-big-format/miniature/'.$ligne['photo']) ? '../annonce/img-big-format/miniature/'.$ligne['photo'] : '../annonce/remplacement/'.simplification($aLoisirs[$ligne['id_type_loisirs']]).'.jpg';

}else{
// code 
}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

09 mai 2017, 20:10

Mon conseil reste le même ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 385 Messages

10 mai 2017, 09:03

Bonjour,

Ce que veut dire @rthur c'est que à lire comme ça c'est difficile en un seul bloque,
http://a-pellegrini.developpez.com/tuto ... ing-style/
en développement en général plus ton code est compréhensible plus tu pourra avoir de l'aide facilement.

Mammouth du PHP | 643 Messages

10 mai 2017, 19:30

oK OK,
Bon j'ai mis ça de façon plus claire enfin je pense :)
if (!empty($ligne['photo']) && file_exists('annonce/img-big-format/miniature/'.$ligne['photo'])) {
		$image = '../annonce/img-big-format/miniature/'.$ligne['photo'];
			}else{
				$image = '../annonce/remplacement/'.simplification($aLoisirs[$ligne['id_type_loisirs']]).'.jpg';
				}
J'ai vu un autre poste qui ma donné une idée :)
Enfait je souhaite faire en sorte que si l'image est plus petite disons que 10px ( je sais c'est très petit ) alors on affiche une image par defaut

Du coup je pensé faire quelque chose comme :
// Affiche d'une photo par defaut si la photo est inférieur à 10px
	list($width, $height, $type, $attr) = getimagesize($ligne['photo']);


	if (!empty($ligne['photo']) && file_exists('annonce/img-big-format/miniature/'.$ligne['photo'])) {
		$image = '../annonce/img-big-format/miniature/'.$ligne['photo'];
			}elseif (!empty($ligne['photo']) && $height <10) {
				$image = 'image par defaut';
					}else{
						$image = '../annonce/remplacement/'.simplification($aLoisirs[$ligne['id_type_loisirs']]).'.jpg';
						}
Mais il doit y avoir une couille dans le paté surement :)

Mammouth du PHP | 643 Messages

10 mai 2017, 21:00

je me réponds à moi même :
// Affiche d'une photo par defaut si la photo est inférieur à 10px
	list($width, $height, $type, $attr) = getimagesize($ligne['photo']);

	if (!empty($ligne['photo']) && file_exists('annonce/img-big-format/miniature/'.$ligne['photo'])) {
		$image = '../annonce/img-big-format/miniature/'.$ligne['photo'];
			}elseif ($height <10 ) {
				$ligne['photo'] = '../annonce/img-big-format/defaut.jpg';
					}else{
						$image = '../annonce/remplacement/'.simplification($aLoisirs[$ligne['id_type_loisirs']]).'.jpg';
						}
Le principe marche mais j'ai ce message d'erreur qui s'affiche comment faire pour l'éviter svp:

Warning: getimagesize(https://static.ticketmaster.fr/static/i ... 398186.gif): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\wamp\www\azerty\sortie.php on line 561

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 mai 2017, 01:09

Le principe marche mais j'ai ce message d'erreur qui s'affiche comment faire pour l'éviter svp:

Warning: getimagesize(https://static.ticketmaster.fr/static/i ... 398186.gif): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\wamp\www\azerty\sortie.php on line 561
Le message d'erreur est pourtant plutôt explicite : failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
Et quand on clic sur le lien de ton image : https://static.ticketmaster.fr/static/i ... 398186.gif
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

11 mai 2017, 07:01

Oui effectivement, une belle 404.
Du coup comment éviter ceci justement
 // Affiche d'une photo par defaut si la photo est inférieur à 10px
  list($width, $height, $type, $attr) = getimagesize($ligne['photo']);

  if (!empty($ligne['photo']) && file_exists('annonce/img-big-format/miniature/'.$ligne['photo'])) {
    $image = '../annonce/img-big-format/miniature/'.$ligne['photo'];
      }elseif ($height <10 ) {
        $ligne['photo'] = '../annonce/img-big-format/defaut.jpg';
          }else{
            $image = '../annonce/remplacement/'.simplification($aLoisirs[$ligne['id_type_loisirs']]).'.jpg';
            }
Merci du temps qui m'est accordé

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 mai 2017, 09:25

Soit tu mets ta fonction dans un try/catch et tu analyses le message d'erreur pour savoir si c'est bloquant ou pas.

Soit tu utilises la fonction get_headers() pour vérifier que l'url soit valide avant de faire ton traitement
http://php.net/manual/fr/function.get-headers.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

11 mai 2017, 22:04

Merci
Voici le résultat :
 // Vérification de la photo
  $url_inexistante = get_headers($ligne['photo'], 1);
 
  if (!empty($ligne['photo']) && file_exists('annonce/img-big-format/miniature/'.$ligne['photo'])) {
    $image = '../annonce/img-big-format/miniature/'.$ligne['photo'];
	  // Si l'image renvoyé est une 404 ou inférieur à 10 px ...
      }elseif (preg_match("#Not Found#i", $url_inexistante[0])) {
        $ligne['photo'] = '../annonce/img-big-format/defaut.jpg';
          }else{
            $image = '../annonce/remplacement/'.simplification($aLoisirs[$ligne['id_type_loisirs']]).'.jpg';
            }

Mammouth du PHP | 643 Messages

12 mai 2017, 07:04

Bon en fait j'ai un message d'erreur une fois mis en ligne mais pas de pbm en local.

Warning: get_headers(): This function may only be used against URLs in /home/users6/n/nky7966/www/sortie.php on line 559

Le code est :
$url_inexistante = get_headers($ligne['photo'], 1);
 
  if (!empty($ligne['photo']) && file_exists('annonce/img-big-format/miniature/'.$ligne['photo'])) {
    $image = '../annonce/img-big-format/miniature/'.$ligne['photo'];
	  // Si l'image renvoyé est une 404 ou inférieur à 10 px ...
      }elseif (preg_match("#Not Found#i", $url_inexistante[0])) {
        $ligne['photo'] = '../annonce/img-big-format/defaut.jpg';
          }else{
            $image = '../annonce/remplacement/'.simplification($aLoisirs[$ligne['id_type_loisirs']]).'.jpg';
            }
L'exemple du probème :
http://tripday.fr/sortie/sortir-voiron.html

Mais sur une autre page ou le code agit pareil aucun problème : http://tripday.fr/sortie/sortir-avignon.html
Je ne comprends pas trop je dois dire

Mon Server est en php 7.0 ( si ça peut aider )

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 mai 2017, 09:06

Lis le message d'erreur, qu'est-ce que tu en comprends ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

12 mai 2017, 16:28

Je suis pas sur d'avoir compris, mais en gros je ne peut l'utiliser qu'une seule fois c'est pas ça ?
Mais comment régler ce soucis justement ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 mai 2017, 16:53

Non ça ne veut pas dire cela, fait un effort ou utilise Google Translate si tu ne parles pas anglais.
get_headers(): This function may only be used against URLs
Je ne vais pas te donner la solution clé-en-main car il faut que tu travailles un peu par toi même pour comprendre et apprendre, c'est comme cela que tu progresseras
Quand tout le reste a échoué, lisez le mode d'emploi...