Symfony文件上传"错误:在null"上调用成员函数getClientOriginalName();

时间:2018-02-28 05:32:35

标签: php symfony twig symfony-forms symfony-2.8

我正在处理带有文件上传的Symfony表单。但是,当我上传一个较小的文件时,它可以正常工作,但是如果使用较大的文件说8MB文件,则使用getClientOriginalName()或guessClientExtension()会出现以下错误。

  

错误:在null

上调用成员函数getClientOriginalName()

这是Twig表格

<form method="post" role="form" {{form_enctype(form)}}>
    {{form_widget(form.file)}}
    {{form_errors(form.file) }}
    {{form_rest(form)}}
    <button class="btn btn-primary" type="submit">Upload</button>
</form>

IndexController.php

public function indexAction() {
    $form = $this->createFormBuilder()
        ->add('file', 'file')
        ->getForm();

    $request = $this->getRequest();
    if ($request->getMethod() == 'POST') {
        $form->bind($request);
        $upload_file = $form['file']->getData();

        $ext = strtolower(pathinfo($upload_file->getClientOriginalName(), PATHINFO_EXTENSION));

        if (!in_array($ext, array("csv", "xlsx", "xls"))) {
            $form->get("file")->addError(new FormError("Invalid file format"));
        }

        if ($form->isValid()) {
            if ($upload_file) {
                $upload_file_name = $this->getUser()->getId() . "_" . date("ymdHis") . "." . $ext;
                $upload_file->move("uploads", $upload_file_name);
            }
        }
    }

    return $this->render('AppBundle:Index:index.html.twig', array('form' => $form->createView()));
}

我已将php.ini中的upload_max_size设置为64MB并增加了max_execution_time。我在这做错了什么?它适用于较小的文件,但不适用于8MB的文件。请帮忙。

1 个答案:

答案 0 :(得分:3)

您必须更改如下:

memory_limit = ?M
upload_max_filesize = ?M
post_max_size = ?M

如果upload_max_filesize大于post_max_size,则必须增加post_max_size,使其大于upload_max_size。

如果post_max_size的值大于memory_limit,则必须增加memory_limit,使其大于post_max_size。