繁体   English   中英

在 Symfony 中清空上传的文件

[英]Empty uploaded file in Symfony

我想上传一个带有表单的 csv 文件,但如果文件太大(> 200 行),它就不起作用。

例如,当我上传一个大文件时,我会这样做:

 die(var_dump($request->files->get('file')));

结果如下:

object(Symfony\Component\HttpFoundation\File\UploadedFile)#9 (7) { ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> bool(false)
["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> string(12) "big_file.csv" 
["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> string(24) "application/octet-stream" 
["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> int(0) 
["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> int(1) ["pathName":"SplFileInfo":private]=> string(0) "" 
["fileName":"SplFileInfo":private]=> string(0) "" }

可以看到,大小为0,fileName和pathName为空,mime类型错误(应该是text/csv)。 当我上传一个小文件(大约 100 行)时,它可以工作,有合适的大小、路径名/文件名等。

不知道是不是PHP的问题?

仅供参考,我在 PHP 代码中有这些设置:

ini_set('upload_max_filesize', '40M');
ini_set('post_max_size', '40M');
ini_set('max_input_time', 600);
ini_set('max_execution_time', 600);
ini_set('memory_limit', '256M');
set_time_limit(0);

问候

该文件无法上传,因为其大小大于 PHP 配置文件中允许的大小。

您可以通过查看此方法生成的错误来了解这一点:

$request->files->get('file')->getErrorMessage()

您可以通过几个简单的步骤来实现这一点。

直接覆盖php.ini:

编辑您的/etc/php/7.4/apache2/php.ini (而不是 7.4 使用您的版本 - 当您进一步阅读时会解释如何找到您的版本,简而言之,在终端php -v写入并使用 2 位数字,例如 7.4)

在那里找到“upload_max_filesize”和“post_max_size”,然后将值更改为(使用您需要的任何大小,我使用了 20 兆字节,例如 20M):

upload_max_filesize = 20M 
post_max_size = 20M

然后保存文件并在我的情况下重新启动 Apache 命令是:

/etc/init.d/apache2 restart

或者您可能需要在之前使用 sudo:

sudo /etc/init.d/apache2 restart

或者在其他情况下:

sudo service apache2 restart

现在应该工作。

另一种选择是覆盖 php.ini 而不直接更改文件:

从响应中的代码中回显或打印或返回以下函数phpinfo()您将找到一个名为“扫描此目录以获取其他 .ini 文件”的列,我到达了以下路径: /etc/php/7.4/apache2/conf.d

如果您无法从phpinfo()获得响应,只需在终端php -v写入,这将为您提供 PHP 的版本,因此如果您会在那里看到:

PHP 7.4.10 (cli) ( NTS )
Copyright (c) The PHP Group

仅使用版本的前 2 位数字并转到我提到的此文件夹/etc/php/7.4/apache2/conf.d (而不是 7.4 键入您的 2 位数字版本)

在您的 conf.d 目录中创建一个名为: file-upload.ini的文件(您可以随意调用该文件,只要它以 .ini file-upload.ini )。 此目录文件覆盖您的 php.ini 设置

因此,创建文件并写入其中(在您需要的任何文件大小中使用,我使用了 20M):

upload_max_filesize = 20M 
post_max_size = 20M

然后保存文件,然后使用我上面提到的命令重新启动 Apache。

现在文件应该成功上传了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM