Question Api et problème d'images

Eléphant du PHP | 243 Messages

13 déc. 2015, 03:30

J'aurais l'envie dans ce cas là de masquer l'erreur avec un @ devant la fonction ( @getimagesize() ). Mais il est vraiment déconseillé de le faire.
Tu as qu'a essayer, mais si quelqu'un a une meilleure idée, qu'il n'hésite pas à la partager !
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

13 déc. 2015, 09:53

La solution du lien de or1 permet justement de détecter si le lien en question fonctionne ou pas (=renvoie une 404 ou pas).
Donc si il fonctionne, tu affiches l'image, si il ne fonctionne pas, tu le supprimes de ta bdd (pour ne pas avoir à le recontroler plus tard) et tu affiches ta propre image :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 283 Messages

13 déc. 2015, 16:03

D'accord merci pour votre aide. Le problème c'est qu'avec Ascla on a essayé le code de or1 mais que ça ne fonctionnait pas.
<?php
$lien = curl_init($getAffiche['img']); //On stocke le lien dans $lien
curl_exec($lien); //On éxécute la fonction magique

if (curl_errno($lien)) // Si il y a une erreur
{
    echo "<div class="collection"><img src='http://lien.fr/empty.jpg' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}
else
{
    echo "<div class="collection"><img src=' ".$getAffiche['image']." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}
?>
Edit : Apparemment ça fonctionne avec le @ avec le code suivant. Mais bon si ce n'est pas très correct de masquer les erreurs je ne sais pas trop si je vais laisser ça. Concrètement y a t-il un moyen de corriger l'erreur

Warning: getimagesize(http://fr.web.img3.acsta.net/pictures/1 ... 126445.jpg): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found
in /public_html/accueil/modules/module-films.php on line 27
sans devoir masquer l'erreur avec @ :
<?php
$lien = $getAffiche['img']; //image a verifier
$lien_image_empty = "./images/icons/no_affiche_film.jpg"; //image a afficher si vide


if (@getimagesize($lien)) {
        echo '<div class="collection"><img src=" '.$lien.' " title=" '.$getAffiche['titre'].' " width="148" height="197" class="img-indent"></div>';
}
else
{
    echo '<div class="collection"><img src=" '.$lien_image_empty.' " title=" '.$getAffiche['titre'].' " width="148" height="197" class="img-indent"></div>';
}
?>

Eléphant du PHP | 243 Messages

13 déc. 2015, 16:31

D'accord merci pour votre aide. Le problème c'est qu'avec Ascla on a essayé le code de or1 mais que ça ne fonctionnait pas.
Pas exactement ! Il faut bien lire toutes les sources qui te sont données.
un code pour avoir le code de retour d'une url :
http://stackoverflow.com/questions/4084 ... 404-in-php
Rajoute la condition pour vérifier si l'url existe bel et bien.
$handle = curl_init($url);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);

/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
    /* Handle 404 here. */
}

curl_close($handle);

/* Handle $response here. */
Donc si l'on ajoute ça au code :
<?php
$lien = $getAffiche['img']; //image a verifier
$lien_image_empty = "http://lien de l'image vide.jpg"; //image a afficher si vide

$handle = curl_init($lien);

curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);

/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
    /* Handle 404 here. */
    echo "<div class="collection"><img src=' ".$lien_image_empty." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
}
else
{
    $img = getimagesize($lien);

    if ($img[1] > 2) {
            echo "<div class="collection"><img src=' ".$lien." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
    }
    else
    {
        echo "<div class="collection"><img src=' ".$lien_image_empty." ' title=' ".$getAffiche['titre']." ' alt='' width='120' height='158'></div>";
    }
}
curl_close($handle);

?>
Dans ce cas là on a une double sécurité (qui je pense n'est pas nécéssaire) mais ça pourrait très bien être le même résultat sans le getimagesize. À tester !
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

13 déc. 2015, 16:56

Et bien j'ai envie de dire que ça fonctionne ! :D Merci !!!
Par contre dernière petite question : Si je veux afficher avec une boucle toutes les images que je remplace avec mon image empty c'est possible ? Sa sera plus facile comme ça pour les remplacer que de devoir chercher les films qui n'ont pas d'images manuellement.
<?php
    $stmt = $bdd->prepare("SELECT id, titre, img FROM `film` WHERE `active` = '1'  ORDER BY `id` ASC LIMIT 0,20");
    if (!$stmt->execute()) {
        echo 'ERREUR';
        exit; //pas obligatoire
    }
    while ($getAffiche = $stmt->fetch()) {
<div class="collection">
      <img src="<?=$getAffiche ['img']; ?>" title="<?=$getAffiche ['titre']; ?>" alt="" width="120" height="158">
   </div>
    }
?>
Faut il juste reprendre la fonction que tu m'as donné ci dessus ? merci encore en tout cas ! :D

Eléphant du PHP | 243 Messages

13 déc. 2015, 17:09

Oui on reste sur le même principe.
$handle = curl_init($url);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);

/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
    /* Handle 404 here. */
}

curl_close($handle);

/* Handle $response here. */
Tu as juste à créer une boucle qui parcourt tous les liens de ta bdd, et lorsque tu reçois un message 404, tu effectues la modification désirée.
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

13 déc. 2015, 17:18

D'accord merci !
J'ai testé ça mais ça n'a pas l'air de fonctionner :
<?php
    $stmt = $bdd->prepare("SELECT id, titre, img FROM `fiche_film` WHERE `active` = '1'  ORDER BY `id` ASC LIMIT 0,20");
    if (!$stmt->execute()) {
        echo 'ERREUR';
        exit; //pas obligatoire
    }
    while ($getAffiche = $stmt->fetch()) {?>
	<?php
$lien = $getAffiche['img']; //image a verifier
$lien_image_empty = "./images/icons/no_affiche_film.jpg"; //image a afficher si vide

$handle = curl_init($lien);

curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);

/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);

/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
    /* Handle 404 here. */
    echo '<div class="collection"><img src=" '.$lien_image_empty.' " title=" '.$getAffiche['titre'].' " width="148" height="197" class="img-indent"></div>';
}
curl_close($handle);

/* Handle $response here. */?>
   <?php } ?>

Eléphant du PHP | 243 Messages

13 déc. 2015, 17:24

Pourquoi refermer php pour le ré-ouvrir ensuite ?
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

13 déc. 2015, 17:28

Bonne question, je fais à chaque fois comme ça vu qu'en générale je ferme pour laisser du html.

Eléphant du PHP | 243 Messages

13 déc. 2015, 17:36

Eh bien ça ne se fait pas. Je pense même que ça pourrait générer des erreurs (à vérifier).
Si rien ne se passe, ça doit venir de ta requête qui appelle les données. Essaye de regarder si elle est te renvoie bien des données en utilisant des echo.
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

13 déc. 2015, 17:42

J'ai essayé avec des echo ça fonctionne correctement. Donc je ne vois pas d'où pourrait venir le problème surtout que ça ne m'affiche absolument rien, même pas de message d'erreur.

Eléphant du PHP | 243 Messages

13 déc. 2015, 17:51

Bon et bien il va falloir que tu regardes ligne par ligne pour connaitre l'endroit où il y a un problème.
Tout d'abord vérifier si toutes les données que tu appelles sont bien transmises.
Puis regarde si tous les liens sans image sont bien vus comme des pages 404.
Si tout ceci fonctionne, il n'y a pas de raisons pour que ça ne marche pas.
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

13 déc. 2015, 18:03

Je ne sais pas du tout d'où pourrait venir l'erreur. Il doit manquer quelque chose. Ne faudrait-il pas rajouter getimagesize ?

Eléphant du PHP | 243 Messages

13 déc. 2015, 18:11

Bah comme je te l'avais dit, c'est une condition inutile. Mais lorsque tu récupères les données (active=1), existe-t-il au moins une donnée possédant une image vide ?
Car le code que tu m'as montré n'affiche les données QUE si l'image renvoie une erreur 404.
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 283 Messages

13 déc. 2015, 18:15

Oui justement le but est d'afficher les données quand les images retournent une erreur 404, car il s'agira des affiches de films à modifier car elles sont vides ou en l’occurrence elles affichent une image par défaut.