php-fpm: 上传文件时缺少一些 POST 数据

php-fpm: Some POST data missing when uploading a file

我在 Ubuntu 18.04 机器上使用 PHP 7.2 fpm 和 nginx,我遇到了表单数据丢失的问题。表单提交数据大致是这样的结构:

[
'video' => [
    'translations' => [
        'de' => [
            'title' => 'string',
            'subtitles' => 'upload field'
        ]
    ],
    'posterFrame' => 'upload field'
    'duration' => 'string'
]]

当我将上传字段留空时,整个表单数据都可以在 $_POST 中正确使用。但是,当我尝试在 posterFrame 字段中上传文件(大小为 10 kB)时,它按预期显示在 $_FILES 中,但 $_POST 仅包含列出的键上传字段之前,即在示例中,translations$_POST中可用,但缺少duration(我还检查了php://input, 这是空的).

所有相关的 php.ini 设置(max_post_sizeallow_file_uploads 等)看起来都不错,应用程序代码本身也不错,至少它可以在不同的 18.04 机器上运行(Apache/mod_php),所以我不知道这里可能是什么问题。 nginx vhost 配置直接来自 Symfony 文档,php-fpm 配置是 Ubuntu 附带的配置。我检查过的任何错误日志中都没有任何内容(php-errorssyslognginx/error.log 等)。这里可能出了什么问题?

编辑:我刚刚注意到一件事:当我 post 表单时,我在 nginx/access.log:

中得到这些行
[my client ip] - - [16/May/2018:14:56:52 +0000] "POST /backend/videos/edit/1162214/ HTTP/1.1" 500 11373 "http://[myserver]/backend/videos/edit/1162214/" "Mozilla/5.0"
[my client ip] - - [16/May/2018:14:56:52 +0000] "\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00\x00\xFF\xE1I%Exif\x00\x00II*\x00\x08\x00\x00\x00\x09\x00\x0F\x01\x02\x00\x06\x00\x00\x00z\x00\x00\x00\x10\x01\x02\x00\x0E\x00\x00\x00\x80\x00\x00\x00\x12\x01\x03\x00\x01\x00\x00\x00\x01\x00\x00\x00\x1A\x01\x05\x00\x01\x00\x00\x00\xA0\x00\x00\x00\x1B\x01\x05\x00\x01\x00\x00\x00\xA8\x00\x00\x00(\x01\x03\x00\x01\x00\x00\x00\x02\x00s32\x01\x02\x00\x14\x00\x00\x00\xB0\x00\x00\x00\x13\x02\x03\x00\x01\x00\x00\x00\x02\x003si\x87\x04\x00\x01\x00\x00\x00\xC4\x00\x00\x00X$\x00\x00Canon\x00Canon EOS 20D\x0033\x7F\xFF\xF5\xBB3333\xB7\xF7\xBF;\xB3;33H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00\x00\x002018:05:06 18:33:31\x00\x1C\x00\x9A\x82\x05\x00\x01\x00\x00\x00\x1A\x02\x00\x00\x9D\x82\x05\x00\x01\x00\x00\x00\x22\x02\x00\x00\x22\x88\x03\x00\x01\x00\x00\x00\x02\x0073'\x88\x03\x00\x01\x00\x00\x00@\x06\xCC\xCC\x00\x90\x07\x00\x04\x00\x00\x000221\x03\x90\x02\x00\x14\x00\x00\x00*\x02\x00\x00\x04\x90\x02\x00\x14\x00\x00\x00>\x02\x00\x00\x01\x91\x07\x00\x04\x00\x00\x00\x01\x02\x03\x00\x01\x92" 400 182 "-" "-"

所以乍一看,我会说这是图像的二进制数据,以某种方式最终出现在请求中 URL?怎么会这样?

好的,在将设置转换为 Apache/mod_php 后,我注意到这台机器上没有安装 GD 扩展(在日志中得到一个 Call to undefined method imagecreatefromjepg)。我安装了 GD,现在它可以正常工作了。不知道为什么 php-fpm 吞下了错误并在 nginx 中产生了这种奇怪的行为