Re-Bonjour,
Encore un problème avec CakePHP et l'upload d'image.
J'ai bien suivi le tuto de Grafikart concernant l'upload d'image, et je n'ai pas de soucis, sauf celui-ci :
lorsque j'upload des images un peu "grosses" j'ai cette erreur :
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 12032 bytes) in /Users/Cerrer/Sites/KTcake/app/Controller/Component/ImgComponent.php on line 30
Je pourrais tout simplement réduire la taille de l'image, je sais bien mais le problème c'est que l'administrateur futur du site ne sais pas comment faire...
Est-ce que quelqu'un a déjà rencontré cette erreur et serait m'aider ?
Merci d'avance.
L'erreur que tu as correspond à ton $data'file']'name']. Ca veut dire que le fichier n'est même pas envoyé au serveur par le temporaire. Fait un debug de ton tableau $data. Tu verras que l'image est pas présente. Essaye en suite avec des images de quelques kilos genre 10ko max pour voir si ça passe ou non.
Oui c'est ton hebergeur qui bride ;)
Demande leur de modifier le php.ini pour permettre l'envoi de plus gros fichiers. Met un plafond a 8Mo par exemple.
Je vais essayer de le mettre en ligne demain et voir si là j'arrive à uploader ces fichiers...
Je vous tiens au jus...
La mise en ligne rend le chose encore pire, lorsque je veux uploader une image il me dit ça :
Undefined index: Media [APP/Controller/MediasController.php, line 13]
Je vous met le code de mon média controller :
public function admin_index($post_id){
if($this->request->is('post')){
$data = $this->request->data'Media'];
if(isset($data'url'])){
$this->redirect(array('action'=>'show','?class=&alt=&src='.urlencode($data'url'])));
}
$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'file']'name']);
$ext = '.'.end($f);
$filename = Inflector::slug(implode('.',array_slice($f,0,-1)),'-');
// Sauvegarde en bdd
$success = $this->Media->save(array(
'name' => $data'name'],
'url' => date('Y').'/'.date('m').'/'.$filename.$ext,
'post_id'=> $post_id
));
if($success){
move_uploaded_file($data'file']'tmp_name'], $dir.DS.$filename.$ext);
foreach(Configure::read('Media.formats') as $k=>$v){
$prefix = $k;
$size = explode('x',$v);
$this->Img->crop( $dir.DS.$filename.$ext,$dir.DS.$filename.'_'.$prefix.'.jpg',$size[0],$size[1]);
}
}else{
$this->Session->setFlash("L'image n'est pas au bon format","notif",array('type'=>'error'));
}
}
$d = array();
$d'medias'] = $this->Media->find('all',array(
'conditions' => array('post_id' => $post_id)
));
$d'formats'] = Configure::read('Media.formats');
$this->set($d);
}
En local ça marche +- bien, suivant la taille des images, là rien à faire, en ligne, ça bugg...
En local dans ton php.ini, tu n'aurais pas un upload_max_filesize, un post_max_size et un time limit de définit ?
Si, upload_max_filesize et post_max_size sont définit à 32M.
Mais les images que j'upload sont de 6 M max... J'ai quand meme modifié et mis un nbr super grand mais pas de changement...
Le time limit y'en a plein, je sais pas le quel regarder...
Ou est-ce que je peux regarder ce fichier php.ini lorsque je suis en ligne ?
En ligne, tu ne peux pas, le php.ini est sécurisé par ton hébergeur, sinon cela serait l'anarchie sur leurs serveurs. Si tu veux modifié ce fichier, il faut faire un ticket et leur demander. Mais ton soucis en ligne ne correspond pas au php.ini.
J'ai testé, ça marche pour les images jusqu'à environ 1.6 Mo... Après ça met l'erreur Undefinied Index...
Je dois demander à mon hébergeur ce qu'il en est c'est ça ? !