Bonjour,

Débutant le php, j'ai suivi la formation de grafikart et enchainé sur le tuto en 5parties pour créer un blog de A à Z.
Arrivé à la fin de la partie 4 (https://www.grafikart.fr/tutoriels/php/portfolio-php-brut-debutant-realisations-462) on doit resizer des images (45ème min de la vidéo) et on importe un petit script qui nous est donné sur ce lien :
https://github.com/Grafikart/CakePHP-ImageHelper

Dans mon fichier work_edit.php j'ai ce bout de code

// ENVOI des images
$work_id = $db->quote($_GET['id']);
$files = $_FILES['images'];
$images = array();
foreach ($files['tmp_name'] as $k => $v) {
    $image = array(
        'name' => $files['name'][$k],
        'tmp_name' => $files['tmp_name'][$k]
    );
    $extension = pathinfo($image['name'], PATHINFO_EXTENSION);
    if(in_array($extension, array('jpg', 'png'))){
        $db->query("INSERT INTO images SET work_id=$work_id");
        $image_id = $db->lastInsertId();
        $image_name= $image_id . '.' . $extension;
        move_uploaded_file($image['tmp_name'], IMAGES . '/works/' . $image_name);
        require '../lib/image.php';
        resizeImage(IMAGES . '/works/' . $image_name, 150,150);
        $image_name = $db->quote($image_name);

        $db->query("UPDATE images SET name=$image_name WHERE id = $image_id");
    }
}
//header('Location:work.php');
//die();

c'est ces deux lignes la que j'ai ajouté et qui posent problèmes :

require '../lib/image.php';
resizeImage(IMAGES . '/works/' . $image_name, 150,150);

et voilà le message d'erreur que j'obtiens :
Warning: imagejpeg(Applications/MAMP/htdocs/Portfolio/img/works/50_150x150.jpg): failed to open stream: No such file or directory in /Applications/MAMP/htdocs/Portfolio/lib/image.php on line 66

Comme dit, je suis vraiment débutante, et j'ai réussi à m'en sortir jusque la en chipotant à gauche à droite, mais la je bloque :(
Merci d'avance pour vos réponses

3 réponses


Bonjour.
Vérifies que tu aies bien fait toutes les modifications concernant la classe et que l'extension GD2 soit bien activée.

kiityz
Auteur

Bonjour,
J'ai regardé sur phpinfo, et je pense bien que c'est activé, voici un screen de ce que j'ai trouvé : http://imgur.com/a/P5Gqr

'Vérifier que j'ai bien fait toutes les modifs concernant la classe ?' est-ce que tu peux être un peu plus précis stp ?
J'ai relis mon code 3,4x en regardant chaque étape de la vidéo, et je n'ai pas trouvé d'erreur :(

Bonjour,

Je sais que le sujet date de plus d'un an, mais je donne une réponse pour ceux qui galèrent comme je l'ai été. J'ai donné une première réponse rapidement sur le tutoriel en question (Débutant : Créer un portfolio de A à Z 4/5 ).

Je vais expliquer un peu mieux les choses. Le problème qu'on rencontre est qu'il ne trouve pas le bon chemin pour enregistrer l'image. Pour cela, il faut faire plusieurs tests dans work_edit.php et dans lib/image.php.

Il faut comparer le résultat d'un var_dump() sur $output dans resizeImage() dans lib/image.php et sur IMAGES . '/works/' . $image_name dans work_edit.php. ce qui me donne :

  • pour $output : srv/http/Code/TP/Portfolio/Basic/webroot/img/works/1_150x150.jpg
  • pour IMAGES . '/works/' . $image_name : /srv/http/Code/TP/Portfolio/Basic/webroot/img/works/1.jpg

On remarque qu'il manque un slash avant srv pour $output, sûrement dû à trim() dans $pathinfo juste au dessus. Remplacer $output par : $output = '/' . $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '_' . $width . 'x' . $height . '.' . $pathinfo['extension'];.

Je suis sous Archlinux, je pense que ça devrait marcher sous toutes les distrib Linux. Au pire, faites des var_dump() sur les chemins comme dit plus haut et comparer !