Téléchargements de fichiers par formulaire
Résoluameb2908 Messages postés 98 Date d'inscription Statut Membre Dernière intervention -
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
-
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 ?
-
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.
-
-
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).
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
