在Symfony中清空上传的文件

时间:2018-12-03 15:34:29

标签: php symfony upload

我想上传带有表单的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);

致谢

1 个答案:

答案 0 :(得分: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 MB,例如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文件”。我到达以下路径:{{1 }}

如果您无法从/etc/php/7.4/apache2/conf.d获得响应,只需在终端phpinfo()中编写,这将为您提供PHP的版本,因此,如果您在那里看到,则:

php -v

仅使用版本的前2位数字,然后转到我提到的PHP 7.4.10 (cli) ( NTS ) Copyright (c) The PHP Group 文件夹(而不是7.4键入2位数字的版本)

在conf.d目录中创建一个名为/etc/php/7.4/apache2/conf.d的文件(只要文件以.ini结尾即可随意调用)。 此目录文件将覆盖您的php.ini设置

因此,创建文件并写入内部(使用所需的文件大小,我用了20M):

file-upload.ini

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

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