Téléchargements de fichiers par formulaire

Résolu
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024 - 20 janv. 2024 à 17:21
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024 - 22 janv. 2024 à 16:48

Bonjour, je voudrais télécharger un fichier vers mon dossier upload, mais cela ne fonctionne pas. Voici mon code :

index.php

<?php

require('include/inc_config.php');

if(isset($_FILES['upload']) AND $_FILES['upload']['error'] === 0) {

    // On a reçu l'image
    // On procède aux vérifications
    // On vérifie toujours l'extension et le type Mine

    $allowed = [

        'jpg' => 'image/jpeg',
        'jpeg' => 'image/jpeg',
        'png' => 'image/png'
    ];

    $filetype = $_FILES['upload']['type'];
    $filename = $_FILES['upload']['name'];
    $filesize = $_FILES['upload']['size'];

    $extention = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

    /* On vérifie l'absence de l'extension dans les clés de $allowed
       ou l'absence du type MINE dans les valeurs. */

    if(!array_key_exists($extention, $allowed) OR !in_array($filetype, $allowed)) {

        // Ici soit l'extension, soit le type est incorrect
        die('Erreur : format de fichier incorrect !');
    }
        
    // Ici le type est correct
    // On limite à 70000000 octets

    if($filesize > 1024 * 1024) {

        die('Fichier trop volumineux !');
    }

    // On génère un nom unique
    $newname = md5(uniqid());

    // On génère le chemin complet
    $newfilename =  IMAGE_DIR_PATH . $newname . $extention;

    if(!move_uploaded_file($_FILES['upload']['tpm_name'], $newfilename)) {

        die('Le déplacement a échoué !');
    }
}
else {

    echo '<pre>';
    print_r($_FILES);
    echo '</pre>';
}

?>

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Exercice</title>
</head>
<body>
    <div id="wrapper">
        <form class="form" action="" method="post" enctype="multipart/form-data">
            <h1>Télécharger un fichier</h1>
            <fieldset>
                <label for="upload">Le fichier</label>
                <input type="file" name="upload[]" id="upload">

                <input type="submit" value="Envoyer" id="submit">
            </fieldset>
        </form>
    </div>
</body>
</html>

include/inc_config.php

<?php

// Fichier de configuration

// Titre du site
define('WEB_TITLE', 'exercice');

// Nom du dossier principal 
define('WEB_DIR_NAME', 'exercice');

// Nom du dossier contenant les images et qui est donc un sous-dossier du répertoire principal 
define('IMAGE_DIR_NAME', 'upload');

// Le chemin (path) complet du répertoire upload
define('IMAGE_DIR_PATH', $_SERVER['DOCUMENT_ROOT'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');

// L'URL du répertoire upload
define('IMAGE_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');

// L'URL du répertoire principal
define('WEB_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/');

ini_set('display_errors', 1);
ini_set('log_errors', 0);
ini_set('error_log', '../log_error_php.txt');

Merci d'avance.
Windows / Chrome 120.0.0.0

5 réponses

jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
20 janv. 2024 à 21:24

Bonjour,

ça ne marche pas... c'est à dire ? Tu as un message d'erreur ?

Ton print_r s'affiche ? qu'est-ce qu'il contient ?

As tu essayé de faire des var_dump de tes variables ( à commencer par la variable $_FILES ) ? Qu'est-ce que ça te donne ?

Et puis.. quel est le code html de ton formulaire ?  Ton formulaire a bien le enctype ?

Quelle est la taille du fichier que tu veux upload ?

Quels droits a le dossier dans lequel tu veux upload ton fichier ?


0
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
21 janv. 2024 à 16:02

Bonjour, je n'ai pas de messages d'erreurs, $_FILES => error 0, j'ai bien le enctype,

mon fichier est de 16443 octets, j'ai rectifié 

$filesize > 1024 * 1024 par $filesize > 16443 & toujours pareil

mon dossier à les droits totales.

0
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
21 janv. 2024 à 17:04

Si tu ne réponds qu'à la moitié de mes questions on va avoir du mal à avancer 

0
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
21 janv. 2024 à 17:26

Voilà ce qu'affiche mon print_r

0
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
21 janv. 2024 à 18:30

Visiblement, tu as du mal à comprendre le sens de la phrase "TOUTES MES QUESTIONS" ....  mais bon, avec ton print_r je pense comprendre ton souci.

Donc... si on résume .. ton upload ne fonctionne pas et tu tombes dans le ELSE qui contient le print_r

.

Ce qui signifie que la condition de ton IF n'est pas conforme à tes attentes.

Si tu prends deux minutes pour regarder le résultat de ton print_r, tu verras que 

$_FILES['upload']['error'] === 0

ne peut pas être valide.  Déjà, le triple "=" signifie que tu fais une comparaison de valeur et de type. Sauf que ta variable (en regardant le print_r donc..) n'est pas un zéro ... mais un ARRAY contenant la valeur zéro.

A la limite, tu peux remplacer par :

$_FILES['upload']['error'][0] == 0

PS: A l'avenir, merci d'expliquer en détails le souci rencontré ( en expliquant la situation, les éventuels messages qui s'affichent ..) sans oublier de placer à différents endroits de ton code des var_dump  de tes différentes variables pour essayer de comprendre par toi même ce qui coince (ou du moins, nous faciliter la recherche du souci).

0
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 4 651
21 janv. 2024 à 18:41

Au passage, TOUTES les variables à l'intérieur de ton $_FILES sont des ARRAY

Il faut donc que tu appliques la même méthode pour chacune d'elle

    $filetype = $_FILES['upload']['type'][0];
    $filename = $_FILES['upload']['name'][0];
    $filesize = $_FILES['upload']['size'][0];
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
22 janv. 2024 à 16:48

Merci bien

0