我使用以下内容获取我网站上的视频网址。
$vid = 231231;
$url = file_get_contents("https://www.thevideositeurl.com/embed/{$vid}/")
echo $url ;
请注意: $vid
变量是动态的,有时会返回gziped
个内容。
我已经知道我可以使用gzdecode
函数解压缩这样的内容:
$vid = 231231;
$url = file_get_contents("https://www.thevideositeurl.com/embed/{$vid}/")
$decodeit = gzdecode($url);
echo $decodeit;
现在,问题是我需要找到一种方法来解码$url
变量,仅在需要时。通过" 需要",我的意思是:if {$url
)它返回gziped
内容,因为我需要使用相同的代码来相同的来源。
这可以做一些检查吗?怎么样?
答案 0 :(得分:1)
答案 1 :(得分:1)
致电file_get_contents
后,$http_response_header将返回响应标头,包括状态代码。
Content-Encoding标头指定使用了哪种编码,例如标头Content-Encoding: gzip
将指定内容使用gzip
进行编码。
所以我编写了一个函数来将头部映射到数组header name => value
,然后检查Content-Encoding
条目以确定是否使用gzip压缩响应。
从标题名称到值
创建地图function transformIntoHeaderMap(array $headers)
{
摆脱状态标题(例如HTTP/1.1 200 OK
),因为它不适合header name: value
格式。
$headersWithValues = array_filter($headers, function ($header) { return strpos($header, ':') !== false; });
现在将标题拆分为:
,并将键和值写入地图。修剪值,摆脱开头/结尾的空格。
$headerMap = [];
foreach ($headersWithValues as $header) {
list($key, $value) = explode(':', $header);
$headerMap[$key] = trim($value);
}
return $headerMap;
}
确定内容是否为gzip压缩
检查标头是否已设置,然后检查它是否具有您要查找的值(gzip
)。
function isGzipHeaderSet(array $headerMap)
{
return isset($headerMap['Content-Encoding']) &&
$headerMap['Content-Encoding'] == 'gzip';
}
解压缩内容(如果是gzip)
$vid = 231231;
$contents = file_get_contents("https://www.thevideositeurl.com/embed/{$vid}/");
if (isGzipHeaderSet(transformIntoHeaderMap($http_response_header))) {
$contents = gzdecode($contents);
}
echo $contents;
<强>替代强>
更简单的方法可能是使用array_search
并直接查找Content-Encoding: gzip
中的字符串$http_response_header
。但我认为这种方法对于标题中的空格更加健壮。