[英]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.