php - 使用php将分块文件上传到s3
问题描述
我有一个 php 脚本,我将用户上传的文件存储在 tmp 文件夹中,然后将其移动到 s3。我还检查他们输入的电子邮件在数据库中是否有效。我正在使用分块,以便大文件可以快速上传到服务器。我的 post_max_size 是 8M,但是我只能上传非常小的文件。
例如,如果我上传一个 7M 的文件,我会收到我设置的警报,说文件太大。此警报仅应在文件大小 > 8M 时显示。如果我上传一个 1 KB 的文件,它会成功上传文件。我做错了什么吗?我对php相当陌生,所以我很感激帮助!
解决方案
ini_get('post_max_size')
可以(并且将)返回对人类友好的值。因此,您最终会将整数文件大小值与字符串值(8M
在您的情况下)进行比较。并且9000 > '8M'
...
更新:
无需显式使用 PHP 配置值post_max_size
或upload_max_filesize
,因为:
- 如果超过该
post_max_size
值,则$_FILES
数组将为空,并会生成警告,例如:
警告:3414 字节的 POST 内容长度超过第 0 行未知中 2048 字节的限制
- 如果超过该值,则数组中
upload_max_filesize
的相应'error'
字段将包含该值,例如:$_FILES
UPLOAD_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'
)进行比较),而且根本不需要。
推荐阅读
- scala - 如何创建涉及某些功能在范围内的“块”的 DSL?
- python - 在 Python3 上使用 Pandas 未对齐数据框
- r - Plot dates with regular interval in R
- python-3.x - 如何使用烧瓶获取图像上传到服务器的元数据。
- angular - 角度自定义控件 - 星级 - 来自输入的值
- jquery - Jquery根据选项更改div
- c++ - 缺少链表的测试用例
- angular - 我们如何在 Angular5 中的(单击)事件上添加两个函数
- android - android.view.InflateException:二进制 XML 文件行(不存在)
- php - php中的表单验证——错误和成功信息同时显示