首页 > 解决方案 > 使用php将分块文件上传到s3

问题描述

我有一个 php 脚本,我将用户上传的文件存储在 tmp 文件夹中,然后将其移动到 s3。我还检查他们输入的电子邮件在数据库中是否有效。我正在使用分块,以便大文件可以快速上传到服务器。我的 post_max_size 是 8M,但是我只能上传非常小的文件。

例如,如果我上传一个 7M 的文件,我会收到我设置的警报,说文件太大。此警报仅应在文件大小 > 8M 时显示。如果我上传一个 1 KB 的文件,它会成功上传文件。我做错了什么吗?我对php相当陌生,所以我很感激帮助!

标签: phpajaxamazon-s3chunkingtmp

解决方案


ini_get('post_max_size')可以(并且将)返回对人类友好的值。因此,您最终会将整数文件大小值与字符串值(8M在您的情况下)进行比较。并且9000 > '8M'...

更新: 无需显式使用 PHP 配置值post_max_sizeupload_max_filesize,因为:

  1. 如果超过该post_max_size值,则$_FILES数组将为空,并会生成警告,例如:

警告:3414 字节的 POST 内容长度超过第 0 行未知中 2048 字节的限制

  1. 如果超过该值,则数组中upload_max_filesize的相应'error'字段将包含该值,例如:$_FILESUPLOAD_ERR_INI_SIZE

数组(1) { ["name"]=> 数组(5) { ["name"]=> string(12) "filename.ext" ["type"]=> string(0) "" ["tmp_name" ]=> string(0) "" ["error"]=> int(1) ["size"]=> int(0) } }

以上所有意味着如果有一个非空$_FILES数组可用并且错误字段的值为UPLOAD_ERR_OK,您可以确定上传成功并且配置值也得到了尊重。

在您的情况下,这不仅意味着条件if ($_FILES['file']['size'] <= ini_get('post_max_size')) ...不正确(将整数文件大小(例如9000)与可能的非整数字符串(例如'8M')进行比较),而且根本不需要。


推荐阅读