2012-04-05 98 views
2

我正面临一个非常奇怪的问题。symfony2 fileupload(致命错误:允许的内存大小用尽)

我试着用Symfony2和Doctrine实现一个简单的附件上传器。

所以我followes这个食谱文章http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html

,一切似乎不错,但PHP抛出一个致命的错误,当我尝试上传文件140KB。

这是我的验证:

/** 
* @Assert\File(
*  maxSize="4M", 
*  maxSizeMessage="Allowed maximum size is {{ limit }}" 
*) 
*/ 
public $file; 

,这是我的php.ini

memory_limit = 256M 
max_input_time = 60 
max_execution_time = 30 
file_uploads = On 
upload_max_filesize = 128M 

所以一切都应该罚款,脚本需要的东西,500ms左右才能到错误: 致命错误:允许内存大小268435456字节耗尽(试图分配122字节)

当我增加memory_limit它不会改变任何东西,内存大小增加,但仍尝试分配122个字节。 一切工作完全正常,只是文件上传打破。

任何猜测发生了什么?

编辑: 是的,我做了{{ form_enctype(form) }},所以我会发布uploadAction。这是非常复杂的,因为该模型是完全外键,我就砍出来的零件,那没关系:

public function createAction(Request $request) 
    { 
     $em = $this->getDoctrine()->getEntityManager(); 

     $conference = new Conference(); 
     $conference->setArchived(false); 
     $conference->setLastModification(new \DateTime()); 

     $form = $this->createForm(new ConferenceType(), $conference); 

     if ($request->getMethod() == 'POST') { 
      $form->bindRequest($request); 

      if ($form->isValid()) { 
       $registrationForm = $conference->getRegistrationForm(); 

       $em->persist($conference->getLocation()); 

       $conference->getImage()->upload(); 
       $em->persist($conference->getImage()); 

       // lots of other stuff is going on (does not refer to the upload processs 

       $em->flush(); 

       return $this->redirect($this->generateUrl('KnowHowERegistrationBackendBundle_registrationform_create')); 
      } 
     } 

     return $this->render('KnowHowERegistrationBackendBundle:Conference:create.html.twig', 
      array(
       'form' => $form->createView(), 
       'conference' => $conference 
      )); 
    } 

我希望有人能够复制它或者找到一个解决方案。

+0

只是在黑暗中的一个狂野的镜头,但你有你的模板form_enctype(表单)?如果你这样做,那么也许发布你的uploadAction代码。可能还有一个递归正在进行。 – Cerad 2012-04-05 13:45:13

回答

0

没有真正跳出来。这绝对是一种解决问题的答案。

开始通过注释掉这些行:

  $conference->getImage()->upload(); 
      $em->persist($conference->getImage()); 

验证一切工作正常。并发布完整的错误消息。可能是在那里的线索。

相关问题