我在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_size
设置(allow_file_uploads
,nginx
等)看起来很好,应用程序代码本身也似乎没问题,至少它适用于不同的18.04机器(带有Apache / mod_php),所以我不知道这里可能出现什么问题。 php-fpm
vhost配置直接来自Symfony文档,php-errors
配置是Ubuntu附带的配置。我检查过的任何错误日志中都没有任何内容(syslog
,nginx/error.log
,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 "-" "-"
中得到这些行:
"query": {
"bool": {
"must": [
{
"match": {
"appName": "CreditDecisionServiceAPI"
}
},
{
"match": {
"level": "ERROR"
}
},
{
"range": {
"@timestamp": {
"gte": "now-1d"
}
}
}
]
}
}
所以乍一看我会说这是图像的二进制数据,它以某种方式在请求URL中结束?怎么会发生这种情况?
答案 0 :(得分:0)
好的,在将设置转换为Apache / mod_php之后,我注意到这台机器上没有安装GD扩展(在日志中得到Call to undefined method imagecreatefromjepg
)。我安装了GD,现在它正常工作。不知道为什么php-fpm
吞噬了错误并在nginx中产生了如此奇怪的行为