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.

13 réponses


Ciloe
Réponse acceptée

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.

duffJohn
Réponse acceptée

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.

Ton image est "grosse" comment ? Tu es sur quel type de serveur ?

Cerrer
Auteur

L'image fait 563ko.
Je suis en local, avec MAMP.

Alors là je sèche :( Normalement 563ko c'est psa très "gros" ça devrait passer

Cerrer
Auteur

Je vais essayer de le mettre en ligne demain et voir si là j'arrive à uploader ces fichiers...
Je vous tiens au jus...

Cerrer
Auteur

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 ?

Cerrer
Auteur

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.

Cerrer
Auteur

Et t'a une idée d'où ça pourrait venir ?

Cerrer
Auteur

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

Cerrer
Auteur

Ok ok je vais faire ça ...
Merci de votre aide !