【发布时间】:2014-03-14 20:32:27
【问题描述】:
我检查了所有的线程,似乎没有一个与这个问题匹配。
我用谷歌浏览器上传,上传4GB+文件没有问题
服务器是 Apache 2.2.15 和 PHP 5.3.3 文件系统是 ext4,我有一个 2.5GB 的交换文件,所以我知道文件系统不是问题。
PHP.ini 设置:
max_execution_time = 7200
max_input_time = 7200
upload_max_filesize = 5000M
post_max_size = 5000M
memory_limit = 2750M
当 upload_max_filesize 为 3G 时,它具有相同的行为。 当我将 post_max_size 留在 8M 时也有相同的行为 内存甚至没有用完整个 700MB 的硬件内存,更不用说触摸交换了,所以我知道它不是内存。
上传整个 2.5GB 文件只需要大约 10 分钟左右,但每次上传到 83% 时文件就会消失。
我用du /tmp 观看它,它达到了 2.0GB,并且在达到 2.1GB 之前总是“消失”
文件系统是 ext4,我有一个 2.5GB 的交换文件,所以我知道文件系统不是问题。
它总是在同一个地方发生。 error_log 中没有错误,没有任何显示,它只是删除了临时文件,当脚本尝试对其执行操作时,$file['tmp_name'] 中没有任何内容,因为它删除了文件。
在亚马逊 AWS 上运行 RHEL 6.4
有什么想法吗?
【问题讨论】:
-
你有htaccess或httpd.conf吗?添加这些
php_value upload_max_filesize 5000Mphp_value post_max_size 5000M -
没有区别。它似乎在 32 bin 整数的大小上失败了。奇怪,因为 phpinfo() 报告了正确的设置大小。我要尝试从源代码编译,天哪,这会很糟糕
-
也许亚马逊对上传有一个覆盖设置。(疯狂猜测)可以在单个 PUT 中上传的最大对象为 5 GB,不确定这与 post..weird 有何不同
-
我确定这是 32 位 int 限制,这就是它每次都死掉的地方。即使
PHP_INT_MAX是 9223372036854775807 所以我不明白为什么 PHP 会在 32 位 int 限制下中断。如果不清楚,这是一个 64 位操作系统 -
分割不是一个选项?