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


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

Grope
Auteur

Le traitement php se fait sur la même page

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
Auteur

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é

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
Auteur

Oui file_uplaods est à On ..

pas de pb de taille ?

Grope
Auteur

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

Bonjour,
Je n'ai pas bien compris votre problème
Mais je vous propose de voire ce tuto il vous sera peut être utile
Upload de fichier ou téléchargements de fichiers sur votre serveur

Bonne chance

Grope
Auteur

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 ^^'

quel texte , quelle valeur ?

Grope
Auteur

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 :

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 ?

Grope
Auteur

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 ?

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

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
Auteur

@Huggy
MacOS

@Flay0r
Je suis en local

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

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;
            }
 ?>
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 !

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;
    }
?>

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.

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