Bonjour,

J'ai un probleme avec cette methode.
Mon fichier que je souhaite enregistrer (image) ne s'enregistre pas dans mon dossier.
mon fichier s'enregistre bien dans ma bdd.

move_uploaded_file($data['Media']['file'],$dir.DS.$filename.$ext);

Mon debug de $data['Media']['file'] me donne bien son nom : shemaJV.png

et le debug de $dir.DS.$filename.$ext me donne :
/Applications/MAMP/htdocs/cakephp-GamingNews/app/webroot/img/2017/05/shemaJV.png

De l'aide please

5 réponses


Jack88
Auteur
Réponse acceptée

Merci pour vos reponses et d'avoir pris le temps de me repondre.

J'ai trouvé mon erreur.
Dans le formulaire de ma vue , j'ai oublié de mettre le type = file dans le create()
Je l'avais seulement mis dans le input apparament cela ne suffisait pas.

Du coup ca marche bien :)

tu as bien vérifié les droits du dossier cible (chmod) ?

Jack88
Auteur

oui il y a bien les droit d'ecriture.
(Je suis un peu le tuto sur cake PHP)
Par contre quand je fais mon debug de $data je n'est pas exactement comme lui.
J'ai juste un tableau avec file et name et lui a encore un autre tableau dans file avec la taille du fichier ect...moi j'ai rien

<?php
    function admin_index($post_id){
        if($this->request->is('post')){
            $data = $this->request->data;
            debug($data);

            $dir = IMAGES.date('Y');
            if(!file_exists($dir))
                mkdir($dir,0777);
            $dir .= DS.date('m');
            if(!file_exists($dir))
                mkdir($dir,0777);
            $f = explode('.',$data['Media']['file']);
            $ext = '.'.end($f);
            $filename = Inflector::slug(implode('.',array_slice($f,0,-1)),'-');

            // Sauvegarde en Base de donnée
            $success = $this->Media->save(array(
                'name'  => $data['Media']['name'],
                'url'   => date('Y').'/'.date('m').'/'.$filename.$ext
            ));
            if($success){
                move_uploaded_file($data['Media']['file'],$dir.DS.$filename.$ext);
                debug($dir.DS.$filename.$ext);

                ?>

voici mon code qui fonctionne...

  if ($this->request->is('post')) {
        $extension = strtolower(pathinfo($this->request->data['name']['name'] , PATHINFO_EXTENSION));
        $filename = strtolower($this->request->data['name']['name']);
        $tmpname = WWW_ROOT . "/files/" . $filename . "";

          move_uploaded_file($this->request->data['name']['tmp_name'], $tmpname);

Enfaite il récupérai le nom du fichier, mais pas le fichier en lui même qui se trouve dans ['tmp_name'] et non dans ['file'].