通过PHP+上传文件;Symfony 4抛出了一个“;“找不到文件”错误;
我正在尝试使用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)”}[] 有什么想法吗 好的,所以形式基本上就是通过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
{{ 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