是什么限制了我在Raspberry Pi LAMP堆栈上的最大上传文件大小?

埃里克·F

因此,我在Raspberry Pi 3上托管了一个LAMP Web服务器。RaspberryPi具有通过硬件RAID控制器与其连接的RAID 10。我的目标是能够通过Raspberry Pi上的LAMP堆栈设置使用PHP通过我的网页上传大文件。

我能够成功上传一个大小为0.97G的文件,但不能成功上传一个大小为1.32G的文件,因此我猜想一定是将上传文件大小限制为大约1G。

在php.ini中,我现在进行了以下设置:

  • memory_limit:1000M
  • post_max_size:4G
  • upload_max_filesize:4G
  • upload_tmp_dir:(/mnt/raid10/Files/Temp这是在连接的RAID上的,因此它不只是将文件转储到Raspberry Pi使用的SD卡中。请注意,添加此文件确实有助于将文件的大小从之前的最大值减小。)

我不知道我应该尝试调整哪些其他设置,并且对任何建议持开放态度。

埃里克·F

消除上传文件大小限制

为了配置允许用户将大文件上传到其服务器的LAMP(Linux,Apache,MySQL,PHP)设置,必须完成以下操作:

更改以下变量 php.ini

  1. memory_limit = 1000M-将内存限制设置为系统上可用的限制
  2. post_max_size= 4G-确保此值大于或等于该upload_max_filesize
  3. upload_max_filesize = 4G-将此设置为您想要的最大值
  4. upload_tmp_dir: /mnt/raid10/Files/Temp-默认情况下,此选项处于禁用状态,这使得临时位置与安装OS的磁盘位于同一磁盘上。以我在Raspberry Pi上运行所有内容的情况而言,这使其成为SD卡。为了减少限制,我将其设置为网络驱动器位置。

完成上述操作后,文件上传大小的限制是设备可用的物理内存(为设置了什么)memory_limit以及文件系统限制(FAT文件结构为4GB)。对于我的Raspberry Pi 3,则为1GB。

绕过内存限制以上传大于可用内存量的文件

超过内存限制的唯一方法是对上传进行分块。启用分块后,在上传过程中将发生以下情况:

  1. 在网页上启动上传。
  2. 来自源文件的数据将流式传输到Web服务器的内存中。
  3. 数据从Web服务器的内存中转储到临时文件位置。
  4. 临时文件达到设置的块大小后,该数据将转储到最终目标位置文件中,并删除临时文件。
  5. 重复步骤2,直到文件完成。

如何使用分块

如果您正在使用与此类似的下载处理程序(https://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/UploadHandler.php),则可以使用许多内置选项。

在我的情况下,在#fileupload被声明的地方,我为maxChunkSize以下代码添加了一行

$('#fileupload').fileupload({
    maxChunkSize: 10 * 1024 * 1024, // 10 MB <-----This is the line I added
    add: function (e, data) {
       blah blah blah
    }
    });
}
});

此处放置的任何值将是所使用的块大小。您选择的大小需要进行一些实验,因为过小的大小会大大降低上传速度,而过大的大小会导致网站用户在一段时间内看不到进度条上的任何进度。对我来说10MB是一个快乐的媒介。

*请注意,上传进度条仅在每个块开始时才会移动,因此它比一个不错的连续进度条更不稳定,但实际上我可以接受。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章