Problème avec $_FILES

Par Grope, il y a 9 ans


Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

J'essaie d'enregistrer un fichier, dans un dossier, chargé dans un input.

Voilà mon code HTML :

<form method="post" action="" class="form-horizontal" enctype="multipart/form-data"> <input type="file" name="fichier" class="form-control"> <button type="submit" name="submit">Valider</button> </form>

Voilà mon code PHP :

<?php echo "<pre>"; print_r($_FILES); print_r($_FILES["fichier"]); echo "</pre>"; if(isset($_FILES["fichier"])) { $dossier = 'uploads/'; $fichier = basename($_FILES['fichier']['name']); if(move_uploaded_file($_FILES['fichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { echo 'Upload effectué avec succès !'; } else //Sinon (la fonction renvoie FALSE). { echo 'Echec de l\'upload !'; } } ?>

Ce que je veux

Je souhaite enregistrer un fichier dans un dossier

Ce que j'obtiens

Voilà ce que ce code me retourne x)

Array ( )

J'éspère avoir été clair, sinon je repondrai à vos questions :)
Merci d'avance !

23 réponses

Huggy, il y a 9 ans

quel texte , quelle valeur ?

Grope, il y a 9 ans

Le code php donné dans le lien du dessus

<?php if ($_FILES["fichier"]["error"] > 0) { echo "Error: " . $_FILES["fichier"]["error"] . "<br />"; } else { echo "Fichier à télécharger : " . $_FILES["fichier"]["name"] . "<br />"; echo "Type : " . $_FILES["fichier"]["type"] . "<br />"; echo "Taille : " . ($_FILES["fichier"]["size"] / 1024) . " Kb<br />"; echo "Stocké dans : " . $_FILES["fichier"]["tmp_name"]; } ?>

Et voilà ce que cela me retourne

Fichier à télécharger :
Type :
Taille : 0 Kb
Stocké dans :

Carouge10, il y a 9 ans

Bonjour,

C'est un peu logique qu'il n'y ai rien puisque le print_r($_FILES); est vide.

Vous travaillez en local ou en ligne ?
Avez-essayer d'envoyer une variable de type text pour vérifier que le formulaire fonctionne ?

Huggy, il y a 9 ans

comment tu submit ton formulaire ?
car tu n'as pas mis d'action

Grope, il y a 9 ans

Le traitement php se fait sur la même page

Huggy, il y a 9 ans

le Array vide que tu nous montres, c'est bien le premier print_r
s'il est vide c'est que le formulaire n'est pas envoyé correctement
regarde avec les outils de dev de ton navigateur pour voir ce qui est envoyé
et dis nous comment tu submit ton formulaire parce qu'on ne sait toujours pas

Edit : si c'est la même page, met une action quand même, le nom de la page ou # ?

Grope, il y a 9 ans

Oui c'est bien le premier print_r
Si je var_dump $_POST, les données sont bien envoyés, et me renvoie bien le nom du fichier uploadé

Huggy, il y a 9 ans

le pb doit venir de php
regarde si tu as bien
file_uploads = On
dans ton php.ini (tu peux aussi regarder dans phpinfo)

Grope, il y a 9 ans

Oui file_uplaods est à On ..

Huggy, il y a 9 ans

pas de pb de taille ?

Grope, il y a 9 ans

upload_max_filesize est à 32M
je ne pense que cela pose problème

Grope, il y a 9 ans

Merci pour le lien.
Je viens d'essayer le code,
Une fois le formulaire envoyé, le texte apparait bien, mais aucune valeur n'apparait devant ^^'

Grope, il y a 9 ans

Oui $_FILES est vide mais ce n'est pas normal puisque je charge un fichier dans l'input file nan ?
Je travaille en local.

De quoi parlez-vous lorsque vous parlez d'une variable de type text ?

Huggy, il y a 9 ans

Voici un article qui donne les causes possibles ici
Quel OS utilises-tu ?

Tapion, il y a 9 ans

Hello ça très probable un problème de droit d'écriture.

Il faut mettre le dossier tmp et le dossier de destination en droit 777 pour pouvoir écrire dedans

Grope, il y a 9 ans

@Huggy
MacOS

@Flay0r
Je suis en local

Huggy, il y a 9 ans

Pour info c'est la variable php upload_tmp_dir qui indique où le fichier atterrit
il me semble que ça pointe sur /private/tmp

Tapion, il y a 9 ans

Hello

Voilà mon code et il marche

Attention il y a beaucoup de vérification à faire avant et ceci est en PHPoo

<?php $infoImg = pathinfo($this->getUploadName($file)); $this->newName = md5(time()); $this->extension = strtolower($infoImg['extension']); $newImg = 'uploads/'.$this->newName.'.'.$this->extension; if(!move_uploaded_file($this->getUploadTmpName($file), $newImg)){ $errors = 'Une erreur s\'est produite'; return false; }else{ return true; } ?>
cid5420, il y a 9 ans

Flay0r

Peut être que ton code fonctionne mais aucun commentaires, getUploadName bah on sait pas comment ça fonctionne...
Je ne pense pas que ça soit adapté à son code !

Pour en revenir au sujet, j'aurais pue t'aider, mais je ne sais pas comment ça fonctionne sur MAC donc désolé !
Sinon j'aurais fait

<?php if(!empty($_POST)){ if(!empty($_FILE["fichier"])){ } } ?>

Ce n'est peut être pas ça mais bon !

Tapion, il y a 9 ans

Juste à lire le nom de la fonction pour savoir son fonctionnement :)

<?php /** * @param $file * @return mixed */ private function getUploadName($file){ $name = $file['name']; $this->name = $name; return $this->name; } ?>
mrdus, il y a 9 ans

salut, j'ai essayé ton bout de code :

<?php <form method="post" class="form-horizontal" enctype="multipart/form-data"> <input type="file" name="fichier" class="form-control"> <button type="submit" name="submit">Valider</button> </form> print_r($_FILES); ?>

et ça fonctionne tres bien chez moi.
ça ne vient surement pas de la partie move_uploaded_file
en passant les spécs html5 stipulent que si "l'attribut action est spécifié, il doit avoir une url" correcte. donc tu peux carrément l'enlever.

ProDJy, il y a 9 ans

Salut @ZarKx voila donc ce que j'ai fais de mon côté sur ton code.

1.) J'ai recupérer à la ligne près ton code
2.) J'ai crée un dossier uploads
3.) J'ai envoyer une images dans le formulaire
4.) J0ai verifier si l'upload à étè executer correctement et si ton tableau étais remplie

J'en ai conclu que ton code étais fonctionnel sur windows 7 il est donc possible que ce soit un probléme qui vien de ton mac
Si tu veux je peux regarder de mon côté les probléme qui sont susseptible de survenir sur mac et te donner une solution de secours

Et regarde encore dans ton php.ini c'est deux point
post_max_size
upload_max_filesize

si y te parraissent peux éléver augmentes au maximum et réessaie une fois