使用nginx和php-fpm进行大型文件上传(> 4GB)

时间:2016-02-02 12:07:03

标签: php linux nginx

我正在尝试使用nginx和php-fpm以及我自己的PHP脚本上传大文件。 对于大于4 GB的文件,PHP上载失败。我收到来自PHP的错误消息的HTTP 200响应。 print_r($ _ FILES)告诉我:

    [file] => Array
    (
        [name] => foo.dat
        [type] => 
        [tmp_name] => 
        [error] => 3
        [size] => 0
    )

根据http://php.net/manual/en/features.file-upload.errors.php错误3表示:

  

UPLOAD_ERR_PARTIAL   价值:3;   上传的文件仅部分上传。

所有数据都被发送到nginx但是php说“size = 0”。 我尝试使用HTML表单上传,使用Google Chrome和Firefox进行XMLHttpRequest,以及使用Java进行一些上传程序。因此,客户端或连接上的错误不太可能。

根据Chrome Network Inspector所有数据都正确发送,请求标头中的内容长度是正确的。发送数据后,我会在5秒内收到服务器响应,因此不太可能超时。

我的nginx配置:

client_max_body_size 8000m;
client_body_buffer_size 512k;

fastcgi_buffers 512 32k;
fastcgi_busy_buffers_size 128k;
fastcgi_buffer_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_max_temp_file_size 0;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 18000;
fastcgi_read_timeout 1800;

php-fpm实例的php.ini:

upload_max_filesize = 8000M
post_max_size = 8000M
max_input_time = 1800
max_execution_time = 300
memory_limit = 512M
;upload_tmp_dir = // not specified, which means system default according to the php docs. That's /tmp on my machine

nginx和php-fpm错误日志对此没有任何说明。我已经多次重启了nginx和php-fpm。

我在Debian 6 64bit上使用php 5.5.11运行nginx / 1.6.0。

我现在将在第二台服务器上对此进行测试,因为我认为问题可能出在Debian和nginx / php-fpm之外。 任何想法如何进一步调试?

更新1:

有足够的磁盘空间。为了测试分区和/或权限问题,我刚刚创建了一个上传文件夹 a)与Web根目录相同的安装点 b)与php-fpm正在运行的用户

如此简单:upload_tmp_dir = / home / myuser / upload 然后我重新启动了php-fpm

问题仍然是一样的,我得到一个HTTP 200,php错误= 3,用于文件上传。可以上载较小的文件并暂时显示在新的临时文件夹中。

FIX 更新到最新的PHP 5.6版本后,错误消失了。我使用与该版本相同的php.ini文件,因此它可能是更改的默认设置或php中的修复错误。

0 个答案:

没有答案