我正在开发一个将文件附加到电子邮件的PHP表单,并试图优雅地处理上传文件太大的情况.
我了解到有两个设置php.ini会影响文件上传的最大大小:upload_max_filesize和post_max_size.
如果文件的大小超过upload_max_filesize,PHP将文件的大小返回为0.这很好; 我可以检查一下.
但如果超过post_max_size,我的脚本会无声地失败并返回到空白表单.
有没有办法抓住这个错误?
在Symfony中上传大于post_max_size的文件时,上传的文件将在内存中分配.
致命错误:第28行的/Applications/MAMP/htdocs/Symfony/vendor/symfony/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php中允许的内存大小为150994944字节(试图分配84627994字节)
为什么symfony试图在POST时将文件分配给内存?
1/php.ini
file_uploads = On
upload_tmp_dir = /Applications/MAMP/tmp/php
upload_max_filesize = 32M
post_max_size = 48M
Run Code Online (Sandbox Code Playgroud)
2 /控制器
<?php
//AcmeDemoBundle/Controller/DemoController
namespace Acme\DemoBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
class DemoController extends Controller
{
public function createAction(Request $request)
{
if ($request->getMethod() == 'POST')
{
if ($_FILES["file"]["size"] < 3000000 )//3Mb
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
if (empty($_POST) && empty($_FILES) && isset($_SERVER['REQUEST_METHOD']) && strtolower($_SERVER['REQUEST_METHOD']) == 'post')
{
echo "The file is …Run Code Online (Sandbox Code Playgroud)