Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何使用传输编码读取帖子正文:分块,无内容长度_Php_Apache_Http Headers - Fatal编程技术网

PHP:如何使用传输编码读取帖子正文:分块,无内容长度

PHP:如何使用传输编码读取帖子正文:分块,无内容长度,php,apache,http-headers,Php,Apache,Http Headers,我正在写一个服务来接收来自我家能源监测设备的数据。设备推送数据的唯一方法是使用HTTPPOST,使用传输编码:chunked,不使用内容长度,并在请求正文中以XML格式显示数据 我希望能够在PHP脚本中读取这些数据(在Apache后面),并将其存储在我的数据库中 现在看来,在PHP中读取HTTP请求正文的最正确方法是打开并读取php://input。然而,PHP网站上用户的评论指出(我的测试证实),如果客户端没有指定内容长度标题,php://input不返回任何数据(即使客户端以分块编码方式发送

我正在写一个服务来接收来自我家能源监测设备的数据。设备推送数据的唯一方法是使用HTTP
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