Bonjour,

Je suis en train de réaliser une gallerie photo en ligne.
Afin que l'administrateur puisse ajouter plusieurs photos à la fois, j'ai fait une balise <input type="file" multiple="multiple">
Cela fonctionne quand j'importe une dizaine de plusieurs images de faibles poids ( 200 000 octets)
Cependant, quand j'importe des photos qui font autour de 2mo, je ne peux pas en importer plus de 5.

J'ai fait des recherches sur la limite que peut gérer l'input file multiple, mais impossible de trouver quoi que ce soit.
De plus au début, je pensais que cela été du au contrôle de la taille des images, que j'ai monté à 3mo, mais au final, quand je var_dump($_FILES) rien n'apparaît avant ce contrôle quand j'importe trop de photos.

Je reprécise bien que cela marche quand :

  • j'importe un grand nombre de photos de faible poids (200 000octets);
  • j'importe un petit nombre de photos lourdes ( entre 1.5mo et 3mo );

    Je pense vraiment que cela est dû au poids du nombre de fichiers importés en même temps, je ne vois pas d'autre hypothèse.

Merci d'avance

voici mon code : formulaire HTML

<body>
    <h1>Ajouter des images à la gallerie</h1>

    <form method="post" action="#" enctype="multipart/form-data">

        <div class="mb-3">
            <label for="image" class="form-label">Images *</label>
            <input type="file" name="picture[]" required="required" multiple="multiple">
        </div>
        <div class="mb-3">
            <label for="title" class="form-label">Titre général des images *</label>
            <input type="text" name="title" required="required">
        </div>
        <div class="mb-3">
            <label for="caption" class="form-label">Légende générale des images</label>
            <input type="text" name="caption" placeholer="légende">
        </div>
        <div class="mb-3">
            <label for="display" class="form-label">Afficher dans la gallerie</label>
            <select name="display">
                <option>Oui</option>
                <option>Non</option>
            </select>
        </div>
        <div class="mb-3">
            <label for="event" class="form-label">A quel évènement cette photo a-t'elle été prise ?</label>
            <select name="event">
                <option></option>
                <?php foreach ($events as $event) { echo "<option>".$event['title']."</option>" ;} ?>
            </select>
        </div>
        <div class="mb-3">
            <label for="speaker" class="form-label">Cette photo est-elle celle d'un intervenant ?</label>
            <select name="speaker">
                <option></option>
                <?php foreach($speakers as $speaker) { echo "<option>".$speaker['name']."</option>";}?>

            </select>
        </div>

        <input type="submit" name="upload" value="Ajouter à la gallerie">

    </form>
</body>

</html>

Fichier de traitement PHP :

if( isset($_FILES['picture']) && !empty($_FILES['picture']['name'])) {

    $max_size =  3097152 ; // security - limit 3mo
    $valid_extensions = array('jpg', 'jpeg', 'gif', 'png'); // security - only images

    foreach ($_FILES['picture']['size'] as $picture_size){
        echo " $picture_size  ";
        if ($picture_size > $max_size) {
            $valid = false;
            echo "Par mesure de sécurité, veuillez seulement importer des images inférieures à 2mo.";
            return false;
            var_dump($picture_size);
        }
    }

    $i = 0;

    foreach (array_combine($_FILES['picture']['name'], $_FILES['picture']['tmp_name']) as  $picture_name => $tmp_name) {

        $i++;

        $extension_upload = strtolower(substr(strrchr($picture_name, '.'), 1)); // return the files extension with strrch and delete the point with substr, and all to lowercase with strtolower
        if (!in_array($extension_upload, $valid_extensions)) { 
            $valid = false;
            echo "Le fichier doit être au format jpg, jpeg, gif ou png";
            return false;

        } else {
            $picture = $title."_".$i.".".$extension_upload;
            $file_path =  "../../../view/assets/events/pictures/".$picture;
            $result = move_uploaded_file($tmp_name, $file_path);

            if($result == false) {
                $valid = false;
                echo "Erreur lors de l'importation de votre bannière d'évènement";
                return false;
            }

            if ($valid == true) {
                $uploadImage = new Gallery();
                $uploadImage->uploadImage($picture, $caption, $display, $id_event, $id_speaker);
                echo "Votre photo a bien été ajoutée à la gallerie";
            }

        }

    }

1 réponse


Bonsoir,
Je dirais de regarder dans ton fichier php.ini (ou faire un phpinfo() ) afin de savoir les valeurs de 'post_max_size' and 'upload_max_filesize'