Problème upload d'images

Problème upload d'images - PHP - Programmation

Marsh Posté le 22-08-2013 à 12:32:20    

Bonjour,
 
je m'arrache les chx à cause de l'upload d'images avec le framework CakePHP:
 
l'image est "à priori " bien stockée dans un répertoire temp mais le fichier n'est soit pas copié à l'endroit voulu, soit
n'est pas copié du tout
 
 

Code :
  1. function admin_add($id = null)
  2. {
  3.    //on vérifie le type de requete
  4.   if(($this->request->is('put')) || ($this->request->is('post')))
  5.   {
  6.    $this->request->data['Post']['user_id'] = $this->Auth->user('id');
  7.    $this->request->data['Post']['slug']= NULL;
  8.    $this->request->data['Post']['post_type_id'] = '2';
  9.    $image=$this->request->data['Post']['media_path'];
  10.    $this->Session->write('image_before_upload',$image);
  11.    $media_path=$this->upload_Image($image);
  12.    $this->request->data['Post']['media_path']=$media_path;
  13.    //on sauve le contenu en db, la méthode save fait une vérif auto avec les règles de validation (beforesave)
  14.    if($this->Post->save($this->request->data))
  15.    {
  16.     $this->Session->setFlash("L'article a bien été créé" );
  17.     //$this->Thumb->clear();
  18.    }
  19.    else
  20.    {
  21.     $this->Session->setFlash("Une erreur s'est produite lors de la sauvegarde de cet article" );
  22.    }
  23.   }
  24.   elseif ($id) //si aucune donnée n'est postée on reste dans l'action courante
  25.   {
  26.     $this->Post->id = $id;
  27.     //$this->Session->delete('post_id');  
  28.     $this->request->data= $this->Post->read();
  29.   }
  30.   else
  31.   {
  32.     $this->request->data = $this->Post->getDraft(2);
  33.     $post=$this->request->data;
  34.     $this->Session->write('draft_id', $post['Post']['id']);
  35.     //$this->Session->write('draft_media_id',$draft['Post']['media_id']);
  36.     //$this->Post->deleteDraft($draft['Post']['id']);
  37.     /*echo $this->Session->read('image_titre');
  38.     $post_id=$this->request->data['Post']['id'];*/
  39.   }
  40.   //on récupère les catégories et on les envoie à la vue
  41.   // logiquement dvrait se trouver dans controller Categories
  42.   //$this->loadModel('Category');
  43.   $categories_to_list['categories']= $this->Post->Category->find('list',array(
  44.            'fields' => array('category_name')));
  45.   $this->set($categories_to_list);
  46. }


 

Code :
  1. public function upload_Image($image)
  2. {
  3.    // on commence les tests de validation
  4.    if (!empty($image))
  5.    {
  6.      //$directory = $this->Image->checkUploadedFile($new_banner);
  7.      $file_name=$image['name'];
  8.      //on précise la destination de la bannière
  9.      //$destination = WWW_ROOT.'img'.DS.'banner'; => ok mais chemin absolu posera probleme online
  10.     //ok $destination = 'img'.DS.'banner';
  11.      //$destination = 'img'.DS.'uploads'.DS.date('Y').DS.date('m');
  12.      //$destination = 'uploads'.'/'.date('Y').'/'.date('m');
  13.      $destination = IMAGES_URL.DS.'uploads'.DS.date('Y').DS.date('m');
  14.      //$destination = 'img'.DS.'uploads'.DS.date('Y').DS.date('m');;
  15.      if(!is_dir($destination))  mkdir($destination, 0777, true);
  16.      $destination=$destination.DS.$file_name;
  17.      $origine=$image['tmp_name'];
  18.      //on copie l'image de son répertoire temporaire vers l'upload
  19.      if(move_uploaded_file($origine, $destination))
  20.      {
  21.       return $destination;
  22.      }
  23.    }
  24. }


 
 
 
merci pour votre aide


Message édité par tompouss le 22-08-2013 à 12:33:49

---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 22-08-2013 à 12:32:20   

Reply

Marsh Posté le 22-08-2013 à 12:57:02    


UPDATE:
 
avec ce code l'image arrive bien dans le répertoire voulu
Code: php
 
    $destination = IMAGES_URL.DS.'uploads'.DS.date('Y').DS.date('m');
 
par contre le chemin enregistré en DB n'est pas correct:
 
img/\uploads\2013\08\image.jpg


---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 22-08-2013 à 13:23:38    

avec ca:
 
$destination = 'img'.DS.'uploads'.DS.date('Y').DS.date('m');
 
donne img\uploads\2013\08\image.jpg
 
mais du coup le chemin dans le browser n'est pas correct
 
il faut que je remplace les '\' des DS par des '/',
 
au moment de l'affichae
 
Mais je ne sais pas à quel est le meilleur moment faire ce traitement: avant l'enregistrement en db ou après, au moment de l'affichage ?
 
quid du passage en prod sur un serveur linux ?
 
EDIt
 
ok en faisant comme ca:
 
 
ca marche en faisant ceci pendant l'affichag:

Code :
  1. <?php if(isset($post['media_path']) && ($post['media_path'] != NULL))
  2.       echo $this->Html->image($post['media_path']='/' . trim(str_replace(DS, '/', $post['media_path']), '/')); ?>


 
est-ce une bonne solution?


Message édité par tompouss le 22-08-2013 à 14:46:03

---------------
collectionneur de pâtes thermiques
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed