Page 1 sur 1

Upload fichier image ne fonctionne pas toujours...

Posté : 16 mars 2019, 11:34
par Steph75
Bonjour,

Je travaille sur un projet perso de galerie photos alimentée par des utilisateurs, après connexion à leur compte, ceux-ci peuvent uploader des photos (que j'afficherais ensuite dans la galerie), je précise que je suis grande débutante, c'est mon 1er projet :D

J'ai un souci avec l'upload qui fonctionne de manière aléatoire (au niveau de la création de imagecreatefromjpeg), je ne comprends pas l'erreur ni pourquoi car cela fonctionne dans un premier temps, puis j'ai une erreur (cela peut-être au bout de 3 images uploadées ou 5 par exemple)

Si quelqu'un veut bien m'aider, ce serait gentil car j'ai beau chercher, je ne comprends pas... Merci par avance pour votre aide !

Voici mon message d'erreur : https://ibb.co/R3xppBw

Et mon code :
// => Upload des photos de l'utilisateur

    // 1 - Vérifie si fichier envoyé
    if(isset($_FILES['userfile']))
    {
    
        $folder = 'upload/';
        $file = basename($_FILES['userfile']['name']);
        $max_size = 5000000; // à adapter avant mise en ligne
        $extensions_list = ['jpg', 'jpeg', 'png'];
        $type_mime_list = ['image/jpg', 'image/jpeg', 'image/png'];
        
        // 2 - Vérifie l'extension du fichier
        $file_extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));
        
        if(in_array($file_extension, $extensions_list)) {

            // 3 - Vérifie le type MIME du fichier
            $file = $_FILES['userfile']['tmp_name'];
            $file_mime_type = mime_content_type($file);

            if(in_array($file_mime_type, $type_mime_list)) {
    
            // 4 - Vérifie la taille du fichier
            if($_FILES['userfile']['size'] > $max_size) {
                $alert = "Le fichier est trop gros";

            } else {

                move_uploaded_file($_FILES['userfile']['tmp_name'], 'upload/'.$_FILES['userfile']['name']);

            }

            } else {
                $alert = "Le type de fichier n'est pas autorisé";
            }
            
        } else {
            $alert = "Extension non autorisée";
        }
        $alert = "Votre fichier a bien été envoyé";

        }

        // Redimensionnement du fichier : 1200 x 800 max

        // création copie d'image à redimensionner
        $selected_image = imagecreatefromjpeg($_FILES['userfile']['tmp_name']);
        // définition largeur max
        $file_width_max = 1200;
        // récupération dimension d'image de départ
        $selected_image_size = getimagesize($_FILES['userfile']['tmp_name']);
        // calcul du pourcentage de réduction
        $reduction = (($file_width_max * 100) / $selected_image_size[0]);
        // calcul de la hauteur en appliquant le pourcentage
        $new_height = (($selected_image_size[1] * $reduction) / 100);
        // Création de la nouvelle image
        $new_image = imagecreatetruecolor($file_width_max, $new_height) or die ("erreur");
        // rééchantillonnage de la nouvelle image
        imagecopyresampled($new_image, $selected_image, 0, 0, 0, 0, $file_width_max, $new_height, $selected_image_size[0], $selected_image_size[1]);
        // destruction de la copie d'image
        imagedestroy($selected_image);

        // Enregistrement de la nouvelle image
        $selected_image_name = explode('.', $file);
        // modifie nom retrouvé
        $exploit_image_name = time();
        // enregistre la nouvelle image dans le répertoire
        imagejpeg($new_image, 'upload/'.$exploit_image_name.'.'.$file_extension, 100);

    }


Re: Upload fichier image ne fonctionne pas toujours...

Posté : 18 mars 2019, 09:11
par Spols
Vu que tu transfert ton fichier avant de créer ton redimensionnement, je commencerais par créer le redimensionnement à partir du fichier transfèrer et non pas de son emplacement temporaire qui peut être vidé entre temps.

$selected_image = imagecreatefromjpeg($_FILES['userfile']['tmp_name']); => $selected_image = imagecreatefromjpeg('upload/'.$_FILES['userfile']['name']);

aussi comme tu permet des png, il faudrait que dans ce cas tu utilise imagecreatefrompng j'imagine.

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 19 mars 2019, 22:11
par Steph75
Bonsoir Spols,

Merci beaucoup pour ton aide, ça fonctionne !

Par contre, ma fonction imagedestroy() ne fonctionne plus : je ne parviens plus à supprimer l'image de départ qui est pourtant bien $selected_image

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 20 mars 2019, 10:32
par Spols
ce n'est pas très grave, php s'en chargera à la fin de son éxecution.

vu la taille de ton script tu n'a pas vraiment à t'inquièté de libérer de la mémoire.

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 20 mars 2019, 10:40
par Steph75
Que veux-tu dire par “php s’en chargera” ?
Après ça, je dois créer des miniatures de chaque image, je vais utiliser le même script je pense, du coup, je vais avoir pas mal de doublons de fichiers qui vont remplir mon serveur !

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 20 mars 2019, 17:10
par Spols
à la fin de chaque éxécution de script, php fait le ménage et supprimera donc l'image qu'il a encore en mémoire.
imagedestroy ne sert pas à supprimer un fichier de ton serveur donc si il y a problème de doublons ce n'est pas à cause de cette fonction

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 20 mars 2019, 21:11
par Steph75
Ok, en fait, je ne comprenais pas car avant l'erreur que j'avais au départ, le fichier original était automatiquement supprimé, c'est pourquoi je pensais que imagedestroy() réalisait cette opération
Du coup, j'ai un nouveau problème à régler :(

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 20 mars 2019, 23:43
par @rthur
Avec unlink() probablement ;)
http://php.net/unlink

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 20 mars 2019, 23:48
par Steph75
Merci @rthur, j’ai déjà essayé...

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 20 mars 2019, 23:52
par @rthur
Bah si tu passes en paramètre le bon nom de fichier (avec son chemin), ça va marcher

Re: Upload fichier image ne fonctionne pas toujours...

Posté : 23 mars 2019, 18:02
par Steph75
J'ai repris mon code et plusieurs tutos et cela fonctionne, merci à vous deux pour le temps que vous m'avez consacré !