Php Facebood SDK在标头中返回HTTP/2
我正在使用facebook SDK对用户进行身份验证并获取facebook页面列表。SDK在我的开发服务器上运行良好,但在生产服务器上崩溃。调试时,我发现dev和生产服务器上的头响应不同 dev服务器上的头响应是HTTP/1.1,而生产服务器上的头响应是HTTP/2,它破坏了正则表达式和SDK SDK中有一个名为Php Facebood SDK在标头中返回HTTP/2,php,regex,facebook,Php,Regex,Facebook,我正在使用facebook SDK对用户进行身份验证并获取facebook页面列表。SDK在我的开发服务器上运行良好,但在生产服务器上崩溃。调试时,我发现dev和生产服务器上的头响应不同 dev服务器上的头响应是HTTP/1.1,而生产服务器上的头响应是HTTP/2,它破坏了正则表达式和SDK SDK中有一个名为 /vendor/facebook/graph-sdk/src/Facebook/Http/GraphRawResponse.php 功能是: public function setH
/vendor/facebook/graph-sdk/src/Facebook/Http/GraphRawResponse.php
功能是:
public function setHttpResponseCodeFromHeader($rawResponseHeader)
{
preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|', $rawResponseHeader, $match);
$this->httpResponseCode = (int)$match[1];
}
根据正则表达式,必须有一个带小数点的十进制数,但在生产中只有2,这就破坏了它
我的问题是:它是否与我在生产中的服务器配置有关,或者facebook正在发送这些标题。如果facebook正在发送标题,那么为什么它的行为会有所不同,因为我有相同的SDK版本。
如果是某个服务器问题,那么如何解决它?将SDK更新为当前版本-该方法的代码已被修改,可能是为了考虑HTTP/2
将SDK更新为当前版本-该方法的代码已被修改,它工作起来非常有魅力,请添加此作为答案,以便我可以接受。
public function setHttpResponseCodeFromHeader($rawResponseHeader)
{
// https://tools.ietf.org/html/rfc7230#section-3.1.2
list($version, $status, $reason) = array_pad(explode(' ', $rawResponseHeader, 3), 3, null);
$this->httpResponseCode = (int) $status;
}