PHP:如何使用传输编码读取帖子正文:分块,无内容长度
我正在写一个服务来接收来自我家能源监测设备的数据。设备推送数据的唯一方法是使用HTTPPHP:如何使用传输编码读取帖子正文:分块,无内容长度,php,apache,http-headers,Php,Apache,Http Headers,我正在写一个服务来接收来自我家能源监测设备的数据。设备推送数据的唯一方法是使用HTTPPOST,使用传输编码:chunked,不使用内容长度,并在请求正文中以XML格式显示数据 我希望能够在PHP脚本中读取这些数据(在Apache后面),并将其存储在我的数据库中 现在看来,在PHP中读取HTTP请求正文的最正确方法是打开并读取php://input。然而,PHP网站上用户的评论指出(我的测试证实),如果客户端没有指定内容长度标题,php://input不返回任何数据(即使客户端以分块编码方式发送
POST
,使用传输编码:chunked
,不使用内容长度
,并在请求正文中以XML格式显示数据
我希望能够在PHP脚本中读取这些数据(在Apache后面),并将其存储在我的数据库中
现在看来,在PHP中读取HTTP请求正文的最正确方法是打开并读取php://input
。然而,PHP网站上用户的评论指出(我的测试证实),如果客户端没有指定内容长度标题,php://input
不返回任何数据(即使客户端以分块编码方式发送数据)
是否有其他方法可以访问请求正文?我是否可以配置Apache(使用.htaccess)对分块数据进行解码,并在得到所有数据后调用我的脚本,并包括内容长度
?或者配置PHP,使其能够处理此问题
谢谢 我想不妨写下这个作为答案
您描述的问题记录在此处:
线程中的亮点:
这就是我的发现。如果发送分块http请求但不发送
发送内容长度(我们应该使用HTTP 1.1协议)
请求的正文部分为空(php://input 不返回任何内容)。这
结果对于以下运行PHP的配置仍然有效
通过FastCGI:
与运行mod_PHP的PHP相同的配置很好,主体
申请可通过php://input.
及
从本质上讲,PHP遵循规范,而不是超越规范
FastCGI内容长度标题值-因此需要正确的修复
在FastCGI或web服务器实现中,必须高于PHP
可能的解决方法:
0)将httpd与mod_php一起使用
1) 使用不同的web服务器
2) 查看mod_fcgid的补丁
3) 可能(不推荐)翻转始终填充\u原始\u发布数据
,看看是否有任何内容我想不妨将此作为答案
您描述的问题记录在此处:
线程中的亮点:
这就是我的发现。如果发送分块http请求但不发送
发送内容长度(我们应该使用HTTP 1.1协议)
请求的正文部分为空(php://input 不返回任何内容)。这
结果对于以下运行PHP的配置仍然有效
通过FastCGI:
与运行mod_PHP的PHP相同的配置很好,主体
申请可通过php://input.
及
从本质上讲,PHP遵循规范,而不是超越规范
FastCGI内容长度标题值-因此需要正确的修复
在FastCGI或web服务器实现中,必须高于PHP
可能的解决方法:
0)将httpd与mod_php一起使用
1) 使用不同的web服务器
2) 查看mod_fcgid的补丁
3) 可能(不推荐)翻转始终填充\u原始\u发布数据
,看看是否有任何内容我想不妨将此作为答案
您描述的问题记录在此处:
线程中的亮点:
这就是我的发现。如果发送分块http请求但不发送
发送内容长度(我们应该使用HTTP 1.1协议)
请求的正文部分为空(php://input 不返回任何内容)。这
结果对于以下运行PHP的配置仍然有效
通过FastCGI:
与运行mod_PHP的PHP相同的配置很好,主体
申请可通过php://input.
及
从本质上讲,PHP遵循规范,而不是超越规范
FastCGI内容长度标题值-因此需要正确的修复
在FastCGI或web服务器实现中,必须高于PHP
可能的解决方法:
0)将httpd与mod_php一起使用
1) 使用不同的web服务器
2) 查看mod_fcgid的补丁
3) 可能(不推荐)翻转始终填充\u原始\u发布数据
,看看是否有任何内容我想不妨将此作为答案
您描述的问题记录在此处:
线程中的亮点:
这就是我的发现。如果发送分块http请求但不发送
发送内容长度(我们应该使用HTTP 1.1协议)
请求的正文部分为空(php://input 不返回任何内容)。这
结果对于以下运行PHP的配置仍然有效
通过FastCGI:
与运行mod_PHP的PHP相同的配置很好,主体
申请可通过php://input.
及
从本质上讲,PHP遵循规范,而不是超越规范
FastCGI内容长度标题值-因此需要正确的修复
在FastCGI或web服务器实现中,必须高于PHP
可能的解决方法:
0)将httpd与mod_php一起使用
1) 使用不同的web服务器
2) 查看mod_fcgid的补丁
3) 可能(不推荐)翻转始终填充\u原始\u发布\u数据
,查看什么版本的PHP中是否有任何内容?我记得这是特定于fastCGI实现的,而不是mod_php。从技术上讲,他们遵循HTTP 1.1规范。对于mod_fcgid,您可以查看这一点。啊,我正在使用PHP5.6.5和FastCGI。我会尝试改用不快的CGI(我的网络主机让我选择),看看会发生什么;我很快会回来报告的。什么版本的PHP?我记得这是特定于fastCGI实现的,而不是mod_php。从技术上讲,他们遵循HTTP 1.1规范。对于mod_fcgid,您可以查看这一点。啊,我使用的是PHP5.6.5