Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP+上传文件;Symfony 4抛出了一个“;“找不到文件”错误;_Php_Symfony_Symfony4 - Fatal编程技术网

通过PHP+上传文件;Symfony 4抛出了一个“;“找不到文件”错误;

通过PHP+上传文件;Symfony 4抛出了一个“;“找不到文件”错误;,php,symfony,symfony4,Php,Symfony,Symfony4,我正在尝试使用Symfony 4 documentation()上传一个文件-是的,我知道这是一个过时的版本,但目前我无法更新它 我已经完成了文档中的所有操作(除了创建一个新实体,因为我只需要上传文件,并在电子邮件中发送指向该文件的链接),文件已正确上传到我的目录,但它会抛出HTTP 500错误,在日志文件中有如下内容: [2020-04-20 15:39:40]request.CRITICAL:Uncaught PHP Exception Symfony\Component\HttpFound

我正在尝试使用Symfony 4 documentation()上传一个文件-是的,我知道这是一个过时的版本,但目前我无法更新它

我已经完成了文档中的所有操作(除了创建一个新实体,因为我只需要上传文件,并在电子邮件中发送指向该文件的链接),文件已正确上传到我的目录,但它会抛出HTTP 500错误,在日志文件中有如下内容:

[2020-04-20 15:39:40]request.CRITICAL:Uncaught PHP Exception Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException:“/tmp/phpr2tM6D”文件不存在于[…]/vendor/Symfony/http foundation/File/File.PHP第37行{“Exception”:“[object](Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException)(代码:0):文件\“/tmp/phpr2tM6D\”不存在于[…]/vendor/symfony/http foundation/file/file.php:37)”}[]

有什么想法吗

好的,所以形式基本上就是

    {{ form_start(warranty_form) }}
    {{ form_end(warranty_form)}}
和控制器的碎片

    $form = $this->createForm(WarrantyType::class);
    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid()) {
        /** @var UploadedFile $documentFile */
        $documentFile = $form->get('documentFile')->getData();

        if($documentFile) {
            $originalDocumentFilename = pathinfo($documentFile->getClientOriginalName(), PATHINFO_FILENAME);
            $newDocumentFilename = uniqid().'.'.$documentFile->guessExtension();

             try {
                $documentFile->move('%kernel.project_dir%/public/uploads/pdf',$newDocumentFilename);

              } catch(FileException $e) {

              }
                    $message = (new \Swift_Message('Test email '))
                    ->setFrom('error@example.org')
                    ->setTo('error@example.org')
                    ->setBody("a","text/plain");
        }   
表单只是一个标准表单,可以上传PDF文件

            ->add('documentFile', FileType::class, ['label' => 'Dokument', 'mapped' => false, 'required' => true, 'constraints' => [new File(['maxSize' => '1024k', 'mimeTypes' => ['application/pdf', 'application/x-pdf'], 'mimeTypesMessage' => 'Załaduj prawidłowy dokument'])]])  

首先,我将使用try+catch块输出错误详细信息

} catch(FileException $e) {
    dd($e);
}
您可能需要调试更多信息


从您提供的错误消息“文件“/tmp/phpr2tM6D”不存在”中,我建议检查上传后是否为“/tmp”创建了此文件或类似文件,更重要的是,PHP进程可以访问它。我想说文件在那里,但它不能被php读取。如果您的Web服务器和php使用不同的所有者/组,则可能会发生这种情况。

首先,我将使用try+catch块输出错误详细信息

} catch(FileException $e) {
    dd($e);
}
您可能需要调试更多信息


从您提供的错误消息“文件“/tmp/phpr2tM6D”不存在”中,我建议检查上传后是否为“/tmp”创建了此文件或类似文件,更重要的是,PHP进程可以访问它。我想说文件在那里,但它不能被php读取。如果您的Web服务器和php使用不同的所有者/组,则可能会发生这种情况。

您能展示整个控制器方法吗?移动文件后是否使用
$documentFile
变量

看起来,
catch(FileException$e)
应该会抑制您的异常,而且,当它仍然出现时,我认为您可能在某处再次尝试访问
$documentFile
变量,或者尝试调用
$form->get('documentFile')->getData()

你应该知道,
$documentFile->move(“”,”)是使用
$rename=rename($this->getPathname(),$target)


您能展示整个控制器方法吗?移动文件后是否使用
$documentFile
变量

看起来,
catch(FileException$e)
应该会抑制您的异常,而且,当它仍然出现时,我认为您可能在某处再次尝试访问
$documentFile
变量,或者尝试调用
$form->get('documentFile')->getData()

你应该知道,
$documentFile->move(“”,”)是使用
$rename=rename($this->getPathname(),$target)


您试图调试该问题的原因是什么?如果没有任何代码,几乎不可能提供帮助我的第一个猜测是@RonvanderHeijden建议的…@RonvanderHeijden我已经检查了所有内容,这些参数设置为大约500米,但我的文件有大约2米。。。另外,我有VichUploader的EasyAdminBundle,那里的一切都很好。如果你说文件被正确地上传到了你的目录,请你尝试给我们你控制器的完整代码。你尝试过调试这个问题吗?如果没有任何代码,几乎不可能提供帮助我的第一个猜测是@RonvanderHeijden建议的…@RonvanderHeijden我已经检查了所有内容,这些参数设置为大约500米,但我的文件有大约2米。。。另外,我有VichUploader的EasyAdminBundle,那里的一切都很好。如果你说文件正确地上传到了你的目录,请你试着给我们你控制器的完整代码好吗?它甚至没有进入catch(),它抛出了那个错误(我知道xampp不是最好的选项,但目前我只能在这里运行调试):我认为所有权限都是确定的,它甚至没有进入catch(),它抛出了那个错误(我知道xampp不是最好的选项,但目前我只能在这里运行调试):我想所有的特权都没有问题我想问题就在这里:返回$this->render('contact/warranty.html.twig',['warranty_form'=>$form->createView());我想问题就在这里:你是用参数创建表单视图的,“$form->handleRequest($request);”。并且它引用了已移动的文件。可能在处理表单后,您应该将用户重定向到某个位置或重置表单状态。例如,``lang js//如果表单已提交且有效,则重定向($form->isSubmitted()&&&&$form->isValid()){//do save file返回新的重定向响应('main page link');}//否则只需render return$this->render('contact/warranty.html.twig',['warranty\u form'=>$form->createView()``我想问题在这里:return$this->render('contact/warranty.html.twig',['warranty\u form'=>$form->createView());我想问题在这里:您正在创建带有was add by的参数的表单视图“$form->handleRequest($request);”。并且它引用了已移动的文件。可能在处理表单后,您应该将用户重定向到某个位置或重置表单状态。例如,``lang js//if form submitted And valid to do stuff($form->isSubmitted()&&&$form->isValid()){//do save file return new RedirectResponse('main page link');}//否则只需呈现return$this->render('contact/warranty.htm