Me encuentro programando un sistema donde tengo que subir archivos de audio bastante grandes(40MB - 60MB aprox) por qué son para Podcasting, estoy trabajando con Symfony2 y MySQL.
Este es mi html en donde puedo elegir si quiero una simple noticia o quiero publicar un podcasting.
Código:
Y este es mi controlador<script> function cambiaEstado(select) { if(select.value == 2) $('#audioFiles').css({display: 'block'}); else $('#audioFiles').css({display: 'none'}); } </script> <form method="post" enctype="multipart/form-data"> <table cellpadding="0" cellspacing="0" > <tr> <td>Categoria:</td> <td> <select name="txtId" id="categoria" onchange="cambiaEstado(this);"> {% for categories in categories %} <option value="{{ categories.id }}"> {{ categories.Name }} </option> {% endfor %} </select> </td> </tr> <tr> <td>Titulo:</td><td><input type="text" name="txtTitle" id="titulo" /></td> </tr> <tr> <td>Contenido:</td><td><input type="text" name="txtContent" /></td> </tr> <tr> <td>Palabra clave:</td><td><input type="text" name="txtKeywords"/></td> </tr> <tr> <td>Imagen</td> <td><input type="file" name="imagen" /></td> </tr> </table> <div id="audioFiles" style="display:none"> <table cellpadding="0" cellspacing="0"> <tr> <td>MP3</td> <td><input type="file" name="mp3"/></td> </tr> <tr> <td>OGG</td> <td><input type="file" name="ogg"/></td> </tr> </table> </div> <table cellpadding="0" cellspacing="0"> <tr> <td><input type="submit" name="btnNews" value="Guardar"/></td> </tr> </table> </form>
Código:
Todo funciona bien si solo quiero publicar una noticia con una imagen pero si quiero publicar un podcasting con un solo archivo de audio que elija no me funciona para nada, como verán no son problemas de memoria ya que con el ini_set he cambiado todos los valores necesarios.public function addAction() { $Session = new Session(); $id = $Session->get('id'); if(isset($id)) { $news = new catNews(); $category = new catCategories(); $user = new catUsers(); $imagen = new Image(); $audio = new audio(); $multi = new ctrMultimedia(); $request = $this->getRequest(); $em = $this->getDoctrine()->getEntityManager(); \ini_set('upload_max_filesize', '200M'); \ini_set('post_max_size', '200M'); \ini_set('memory_limit','512M'); \ini_set('max_execution_time', 120); if ($request->getMethod() == 'POST') { $_POST = $request->request; $_FILES = $request->files; $categories = $em->getRepository('CrystalBaseBundle:catCategories')->find($_POST->get('txtId')); $news->setContent($_POST->get('txtContent')); $news->setTitle($_POST->get('txtTitle')); $news->setDate(date('m/d/Y')); $news->setKeywords($_POST->get('txtKeywords')); $news->setidCategory($categories); $user = $em->getRepository('CrystalBaseBundle:catUsers')->find($id); $news->setidUser($user); $em->persist($news); $em->flush(); $imagen->img = $_FILES->get('imagen'); if($imagen->checkErrors() == 'NoError') { $multi->setPath($imagen->upload()); $multi->setType('imagen'); $multi->setidNew($news); $em->persist($multi); $em->flush(); } if($_FILES->get('mp3') != "") { $audio->audio = $_FILES->get('mp3'); if($audio->checkErrors() == 'NoError') { $multi->setPath($audio->upload()); $multi->setType('mp3'); $multi->setidNew($news); $em->persist($multi); $em->flush(); } } if($_FILES->get('ogg') != "") { $audio->audio = $_FILES->get('ogg'); if($audio->checkErrors() == 'NoError') { $multi->setPath($audio->upload()); $multi->setType('ogg'); $multi->setidNew($news); $em->persist($multi); $em->flush(); } } return $this->redirect($this->generateURL('listNews')); } else { $categories = $em->getRepository('CrystalBaseBundle:catCategories')->findAll(); return $this->render('CrystalAdminBundle:News:createNews.html.twig', array('news' => $news, 'categories' => $categories, 'user' => $user)); } } else { return $this->redirect($this->generateURL('login')); } }
A la hora de hacer el submit con los archivos de audio (aunque sea solo uno), el request no me trae ningun valor del formulario. he hecho un print_r de la variable $_POST y no trae ningun dato del formulario si elijo archivos de audio, por lo que me da el siguiente error:
The identifier id is missing for a query of Crystal\BaseBundle\Entity\catCategories
en la siguiente línea:
$categories = $em->getRepository('CrystalBaseBundle:catCategories' )->find($_POST->get('txtId'));
pero eso es porque la variable $_POST no me trae ningun dato del formulario al seleccionar archivos de audio en los files mp3 y ogg, probé poniendo imágenes en esos input y ahi si hala los datos pero me da error en la clase que he hecho porque no son archivos de audio.
También probé usando un .mp3 muy pequeño de 17.3KB y ese si me lo subió perfectamente, pero a la hora de usar un mp3 de 47.8MB que regularmente eso pesarán los podcasting no lo subió para nada ¿Estoy poniendo mal los ini_set o no funciona esto en symofny2?
¿Alguién tiene alguna idea de porque al seleccionar archivos .mp3 o .ogg grandes no me manda ningun dato del form?
Múchisimas gracias de antemano a la gente que me responda