我正在尝试使用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中的修复错误。