簡體   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