什么可能限制我的 Raspberry Pi LAMP 堆栈上的最大上传文件大小?

什么可能限制我的 Raspberry Pi LAMP 堆栈上的最大上传文件大小?

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

我可以成功上传 0.97G 的文件,但无法成功上传 1.32G 的文件,所以我猜一定是有什么东西限制了我的上传文件大小为大约 1G。

在 php.ini 中我现在有以下内容:

  • memory_limit:1000米
  • post_max_size:4G
  • upload_max_filesize:4G
  • upload_tmp_dir:(/mnt/raid10/Files/Temp这是在连接的 RAID 上,因此它不仅仅是将文件转储到 Raspberry Pi 使用的 SD 卡上。请注意,添加此做过从前下方开始帮助提高最大尺寸。)

我不知道应该尝试调整哪些其他设置,并愿意接受任何建议。

答案1

删除上传文件大小限制

为了配置 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- 默认情况下,此功能被禁用,这使得临时位置与安装操作系统的磁盘相同。在我使用 Raspberry Pi 运行所有内容的情况下,这使其成为 SD 卡。为了减少限制,我将其设置为我的网络驱动器位置。

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

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

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

  1. 网页上已启动上传。
  2. 来自源文件的数据被传输到网络服务器的内存中。
  3. 数据从网络服务器的内存转储到临时文件位置。
  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 是一个令人满意的中间值。

*请注意,上传的进度条仅在每个块开始时移动,因此它会变得比连续的进度条更不连贯,但我实际上对此没意见。

相关内容